diff --git a/.ipynb_checkpoints/Analogical Proj Experiments-Copy1-checkpoint.ipynb b/.ipynb_checkpoints/Analogical Proj Experiments-Copy1-checkpoint.ipynb deleted file mode 100644 index c154c5e..0000000 --- a/.ipynb_checkpoints/Analogical Proj Experiments-Copy1-checkpoint.ipynb +++ /dev/null @@ -1,3989 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 7, - "id": "historic-drive", - "metadata": {}, - "outputs": [], - "source": [ - "# !isa_file=../data/P279_dataset/wikidata-P279.tsv\n", - "# !labels_file=../data/labels.en.tsv\n", - "!kgtk query -i ../data/P279_dataset/wikidata-P279.tsv -i ../data/labels.en.tsv \\\n", - "--match 'i: (x)-[:P279]->(y), l: (x)-[:label]->(lbl), (y)-[:label]->(lbl2)' \\\n", - "--where 'lbl =~ \".* .*\" AND instr(kgtk_unstringify(kgtk_lqstring_text(lbl)), kgtk_unstringify(kgtk_lqstring_text(lbl2))) AND lbl!=lbl2' \\\n", - "--return 'distinct x, y, kgtk_lqstring_text_string(lbl), kgtk_lqstring_text_string(lbl2)' \\\n", - "-o ../data/compositional.tsv\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "geographic-andorra", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "node1\tnode2\tkgtk_lqstring_text_string(graph_2_c2.\"node2\")\tkgtk_lqstring_text_string(graph_2_c3.\"node2\")\r\n", - "Q1000064\tQ11016\t\"nuclear reactor technology\"\t\"technology\"\r\n", - "Q1000120\tQ12510\t\"maximal torus\"\t\"torus\"\r\n", - "Q100061973\tQ1799072\t\"presentation method\"\t\"method\"\r\n", - "Q1000828\tQ918385\t\"team training\"\t\"training\"\r\n", - "Q1000850\tQ748\t\"Buddhism in Germany\"\t\"Buddhism\"\r\n", - "Q1000859\tQ748\t\"Buddhism in Iceland\"\t\"Buddhism\"\r\n", - "Q1000861\tQ748\t\"Buddhism in Ireland\"\t\"Buddhism\"\r\n", - "Q1000863\tQ376\t\"master clock\"\t\"clock\"\r\n", - "Q1000869\tQ748\t\"Buddhism in Bangladesh\"\t\"Buddhism\"\r\n" - ] - } - ], - "source": [ - "!head ../data/compositional.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "prospective-commission", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "comp = pd.read_csv('../data/compositional.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "personalized-liberal", - "metadata": {}, - "outputs": [], - "source": [ - "comp['node1_len'] = comp.node1.apply(lambda p: len(p))\n", - "comp['node2_len'] = comp.node2.apply(lambda p: len(p))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "naval-python", - "metadata": {}, - "outputs": [], - "source": [ - "comp = comp.sort_values(by=['node1_len', 'node2_len'])" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "postal-baseline", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2kgtk_lqstring_text_string(graph_2_c2.\"node2\")kgtk_lqstring_text_string(graph_2_c3.\"node2\")node1_lennode2_len
67979Q561Q553human toothtooth44
55355Q416Q41298disk magazinemagazine46
98710Q944Q41217quantum mechanicsmechanics46
49124Q305Q186361corporal punishmentpunishment47
41635Q250Q1921606computer keyboardkeyboard48
\n", - "
" - ], - "text/plain": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") \\\n", - "67979 Q561 Q553 human tooth \n", - "55355 Q416 Q41298 disk magazine \n", - "98710 Q944 Q41217 quantum mechanics \n", - "49124 Q305 Q186361 corporal punishment \n", - "41635 Q250 Q1921606 computer keyboard \n", - "\n", - " kgtk_lqstring_text_string(graph_2_c3.\"node2\") node1_len node2_len \n", - "67979 tooth 4 4 \n", - "55355 magazine 4 6 \n", - "98710 mechanics 4 6 \n", - "49124 punishment 4 7 \n", - "41635 keyboard 4 8 " - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comp.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "median-singer", - "metadata": {}, - "outputs": [], - "source": [ - "from tabulate import tabulate" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "charitable-abraham", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2kgtk_lqstring_text_string(graph_2_c2.\"node2\")kgtk_lqstring_text_string(graph_2_c3.\"node2\")node1_lennode2_len
94514Q8141Q9288Modern HebrewHebrew55
41635Q250Q1921606computer keyboardkeyboard48
93984Q7991Q336natural sciencescience54
98024Q9192Q7850Mandarin ChineseChinese55
67979Q561Q553human toothtooth44
69745Q5856Q161synthetic fiberfiber54
87295Q6754Q6718charm quarkquark55
57146Q4543Q1734beach volleyballvolleyball55
99864Q9778Q638electronic musicmusic54
88511Q699Q17991521fairy taletale49
43353Q2642Q2638exponential-Golomb codingGolomb coding55
98991Q9585Q432Shia IslamIslam54
87447Q6786Q6718bottom quarkquark55
89314Q7141Q420cell biologybiology54
69759Q5860Q161carbon fibersfiber54
73413Q6311Q8104stellar atmosphereatmosphere55
95355Q8494Q8481human sternumsternum55
55941Q426Q2386606animal rightsright48
49124Q305Q186361corporal punishmentpunishment47
94475Q8124Q58human penispenis53
94875Q8345Q8343bass clarinetclarinet55
58838Q4812Q527day skysky54
18599Q1827Q282red winewine54
88919Q7076Q6199individualist anarchismanarchism55
3014Q1111Q73792electric chargecharge56
\n", - "
" - ], - "text/plain": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") \\\n", - "94514 Q8141 Q9288 Modern Hebrew \n", - "41635 Q250 Q1921606 computer keyboard \n", - "93984 Q7991 Q336 natural science \n", - "98024 Q9192 Q7850 Mandarin Chinese \n", - "67979 Q561 Q553 human tooth \n", - "69745 Q5856 Q161 synthetic fiber \n", - "87295 Q6754 Q6718 charm quark \n", - "57146 Q4543 Q1734 beach volleyball \n", - "99864 Q9778 Q638 electronic music \n", - "88511 Q699 Q17991521 fairy tale \n", - "43353 Q2642 Q2638 exponential-Golomb coding \n", - "98991 Q9585 Q432 Shia Islam \n", - "87447 Q6786 Q6718 bottom quark \n", - "89314 Q7141 Q420 cell biology \n", - "69759 Q5860 Q161 carbon fibers \n", - "73413 Q6311 Q8104 stellar atmosphere \n", - "95355 Q8494 Q8481 human sternum \n", - "55941 Q426 Q2386606 animal rights \n", - "49124 Q305 Q186361 corporal punishment \n", - "94475 Q8124 Q58 human penis \n", - "94875 Q8345 Q8343 bass clarinet \n", - "58838 Q4812 Q527 day sky \n", - "18599 Q1827 Q282 red wine \n", - "88919 Q7076 Q6199 individualist anarchism \n", - "3014 Q1111 Q73792 electric charge \n", - "\n", - " kgtk_lqstring_text_string(graph_2_c3.\"node2\") node1_len node2_len \n", - "94514 Hebrew 5 5 \n", - "41635 keyboard 4 8 \n", - "93984 science 5 4 \n", - "98024 Chinese 5 5 \n", - "67979 tooth 4 4 \n", - "69745 fiber 5 4 \n", - "87295 quark 5 5 \n", - "57146 volleyball 5 5 \n", - "99864 music 5 4 \n", - "88511 tale 4 9 \n", - "43353 Golomb coding 5 5 \n", - "98991 Islam 5 4 \n", - "87447 quark 5 5 \n", - "89314 biology 5 4 \n", - "69759 fiber 5 4 \n", - "73413 atmosphere 5 5 \n", - "95355 sternum 5 5 \n", - "55941 right 4 8 \n", - "49124 punishment 4 7 \n", - "94475 penis 5 3 \n", - "94875 clarinet 5 5 \n", - "58838 sky 5 4 \n", - "18599 wine 5 4 \n", - "88919 anarchism 5 5 \n", - "3014 charge 5 6 " - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comp[:50].sample(n=25, random_state=13)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "random-dress", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") kgtk_lqstring_text_string(graph_2_c3.\"node2\") node1_len node2_len\n", - "----- ------- --------- ----------------------------------------------- ----------------------------------------------- ----------- -----------\n", - "94514 Q8141 Q9288 Modern Hebrew Hebrew 5 5\n", - "41635 Q250 Q1921606 computer keyboard keyboard 4 8\n", - "93984 Q7991 Q336 natural science science 5 4\n", - "98024 Q9192 Q7850 Mandarin Chinese Chinese 5 5\n", - "67979 Q561 Q553 human tooth tooth 4 4\n", - "69745 Q5856 Q161 synthetic fiber fiber 5 4\n", - "87295 Q6754 Q6718 charm quark quark 5 5\n", - "57146 Q4543 Q1734 beach volleyball volleyball 5 5\n", - "99864 Q9778 Q638 electronic music music 5 4\n", - "88511 Q699 Q17991521 fairy tale tale 4 9\n", - "43353 Q2642 Q2638 exponential-Golomb coding Golomb coding 5 5\n", - "98991 Q9585 Q432 Shia Islam Islam 5 4\n", - "87447 Q6786 Q6718 bottom quark quark 5 5\n", - "89314 Q7141 Q420 cell biology biology 5 4\n", - "69759 Q5860 Q161 carbon fibers fiber 5 4\n", - "73413 Q6311 Q8104 stellar atmosphere atmosphere 5 5\n", - "95355 Q8494 Q8481 human sternum sternum 5 5\n", - "55941 Q426 Q2386606 animal rights right 4 8\n", - "49124 Q305 Q186361 corporal punishment punishment 4 7\n", - "94475 Q8124 Q58 human penis penis 5 3\n", - "94875 Q8345 Q8343 bass clarinet clarinet 5 5\n", - "58838 Q4812 Q527 day sky sky 5 4\n", - "18599 Q1827 Q282 red wine wine 5 4\n", - "88919 Q7076 Q6199 individualist anarchism anarchism 5 5\n", - " 3014 Q1111 Q73792 electric charge charge 5 6\n" - ] - } - ], - "source": [ - "print(tabulate(comp[:50].sample(n=25, random_state=13), headers = 'keys', tablefmt = 'simple'))" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "governing-execution", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2kgtk_lqstring_text_string(graph_2_c2.\"node2\")kgtk_lqstring_text_string(graph_2_c3.\"node2\")
76391Q66502527Q27058096right fifth intercostal nervefifth intercostal nerve
64439Q5453438Q392316First Nations in AlbertaFirst Nations
54764Q3998922Q43304311clarinet-violin-piano triopiano trio
71844Q60687320Q29385978President of Communal Council of TremithousaPresident of Communal Council
26611Q21116244Q14878311glutamate catabolic process to 2-oxoglutarateglutamate catabolic process
76415Q66502641Q66502435medial branch of cervicothoracic ganglionbranch of cervicothoracic ganglion
24160Q20901636Q705135Grand Officer of the Order of Adolphe of NassauOrder of Adolphe of Nassau
27271Q21127225Q133492letters of Pliny the Youngerletter
3924Q1152224Q12050496distinctive featurefeature
84513Q66571241Q66570136right cuneate fasciculus of medullacuneate fasciculus of medulla
92282Q7624573Q1084strong nounnoun
23304Q20205194Q1644573Orthodox pilgrimagepilgrimage
9611Q14860562Q14862215positive regulation of cell motilityregulation of cell motility
92883Q77584712Q837924skew-symmetric bilinear formbilinear form
42826Q2593298Q1319755European Speed Skating Championships for MenEuropean Speed Skating Championships
29359Q2213536Q193343extensional tectonicstectonics
38430Q22328939Q22328937nuclear subtelomeric heterochromatinsubtelomeric heterochromatin
51013Q32861734Q5758703Western Highland ChatinoHighland Chatino
70167Q5898386Q105688hypobaric hypoxiahypoxia
7736Q13631670Q588723Passenger rail transport in Chinarail transport in China
\n", - "
" - ], - "text/plain": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") \\\n", - "76391 Q66502527 Q27058096 right fifth intercostal nerve \n", - "64439 Q5453438 Q392316 First Nations in Alberta \n", - "54764 Q3998922 Q43304311 clarinet-violin-piano trio \n", - "71844 Q60687320 Q29385978 President of Communal Council of Tremithousa \n", - "26611 Q21116244 Q14878311 glutamate catabolic process to 2-oxoglutarate \n", - "76415 Q66502641 Q66502435 medial branch of cervicothoracic ganglion \n", - "24160 Q20901636 Q705135 Grand Officer of the Order of Adolphe of Nassau \n", - "27271 Q21127225 Q133492 letters of Pliny the Younger \n", - "3924 Q1152224 Q12050496 distinctive feature \n", - "84513 Q66571241 Q66570136 right cuneate fasciculus of medulla \n", - "92282 Q7624573 Q1084 strong noun \n", - "23304 Q20205194 Q1644573 Orthodox pilgrimage \n", - "9611 Q14860562 Q14862215 positive regulation of cell motility \n", - "92883 Q77584712 Q837924 skew-symmetric bilinear form \n", - "42826 Q2593298 Q1319755 European Speed Skating Championships for Men \n", - "29359 Q2213536 Q193343 extensional tectonics \n", - "38430 Q22328939 Q22328937 nuclear subtelomeric heterochromatin \n", - "51013 Q32861734 Q5758703 Western Highland Chatino \n", - "70167 Q5898386 Q105688 hypobaric hypoxia \n", - "7736 Q13631670 Q588723 Passenger rail transport in China \n", - "\n", - " kgtk_lqstring_text_string(graph_2_c3.\"node2\") \n", - "76391 fifth intercostal nerve \n", - "64439 First Nations \n", - "54764 piano trio \n", - "71844 President of Communal Council \n", - "26611 glutamate catabolic process \n", - "76415 branch of cervicothoracic ganglion \n", - "24160 Order of Adolphe of Nassau \n", - "27271 letter \n", - "3924 feature \n", - "84513 cuneate fasciculus of medulla \n", - "92282 noun \n", - "23304 pilgrimage \n", - "9611 regulation of cell motility \n", - "92883 bilinear form \n", - "42826 European Speed Skating Championships \n", - "29359 tectonics \n", - "38430 subtelomeric heterochromatin \n", - "51013 Highland Chatino \n", - "70167 hypoxia \n", - "7736 rail transport in China " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comp.sample(n=20, random_state=13)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "bacterial-commerce", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") kgtk_lqstring_text_string(graph_2_c3.\"node2\")\n", - "----- --------- --------- ----------------------------------------------- -----------------------------------------------\n", - "76391 Q66502527 Q27058096 right fifth intercostal nerve fifth intercostal nerve\n", - "64439 Q5453438 Q392316 First Nations in Alberta First Nations\n", - "54764 Q3998922 Q43304311 clarinet-violin-piano trio piano trio\n", - "71844 Q60687320 Q29385978 President of Communal Council of Tremithousa President of Communal Council\n", - "26611 Q21116244 Q14878311 glutamate catabolic process to 2-oxoglutarate glutamate catabolic process\n", - "76415 Q66502641 Q66502435 medial branch of cervicothoracic ganglion branch of cervicothoracic ganglion\n", - "24160 Q20901636 Q705135 Grand Officer of the Order of Adolphe of Nassau Order of Adolphe of Nassau\n", - "27271 Q21127225 Q133492 letters of Pliny the Younger letter\n", - " 3924 Q1152224 Q12050496 distinctive feature feature\n", - "84513 Q66571241 Q66570136 right cuneate fasciculus of medulla cuneate fasciculus of medulla\n", - "92282 Q7624573 Q1084 strong noun noun\n", - "23304 Q20205194 Q1644573 Orthodox pilgrimage pilgrimage\n", - " 9611 Q14860562 Q14862215 positive regulation of cell motility regulation of cell motility\n", - "92883 Q77584712 Q837924 skew-symmetric bilinear form bilinear form\n", - "42826 Q2593298 Q1319755 European Speed Skating Championships for Men European Speed Skating Championships\n", - "29359 Q2213536 Q193343 extensional tectonics tectonics\n", - "38430 Q22328939 Q22328937 nuclear subtelomeric heterochromatin subtelomeric heterochromatin\n", - "51013 Q32861734 Q5758703 Western Highland Chatino Highland Chatino\n", - "70167 Q5898386 Q105688 hypobaric hypoxia hypoxia\n", - " 7736 Q13631670 Q588723 Passenger rail transport in China rail transport in China\n" - ] - } - ], - "source": [ - "print(tabulate(comp.sample(n=20, random_state=13), headers = 'keys', tablefmt = 'simple'))" - ] - }, - { - "cell_type": "markdown", - "id": "future-peace", - "metadata": {}, - "source": [ - "# Determine Top Parents based on transitive child count" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "attempted-calgary", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import gzip\n", - "\n", - "p279StarDF = pd.read_csv('../../wd-correctness/wikidata-20210215/derived.P279star.tsv.gz', sep='\\t', compression='gzip')" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "blocked-monitor", - "metadata": {}, - "outputs": [], - "source": [ - "p279StarDF_node2_counts = p279StarDF.node2.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "informal-destruction", - "metadata": {}, - "outputs": [], - "source": [ - "p279StarDF_node2_counts = p279StarDF_node2_counts.sort_values(ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "mathematical-mandate", - "metadata": {}, - "outputs": [], - "source": [ - "p279StarDF_node2_counts_dict = p279StarDF_node2_counts.to_dict()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "median-details", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Q35120 2461316\n", - "Q99527517 2254480\n", - "Q28813620 1363013\n", - "Q16887380 1362538\n", - "Q488383 1286312\n", - "Q20937557 1267164\n", - "Q58415929 1201300\n", - "Q4406616 1175217\n", - "Q223557 1164930\n", - "Q6671777 1122346\n", - "Q337060 1079449\n", - "Q7184903 1072421\n", - "Q219858 1057006\n", - "Q50365914 1056956\n", - "Q23958946 1038346\n", - "Q97669203 1007383\n", - "Q15712714 1007381\n", - "Q3511065 1007335\n", - "Q3771876 1004686\n", - "Q37500013 1004683\n", - "Name: node2, dtype: int64" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279StarDF_node2_counts[:20]" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "beginning-element", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Q35120,entity,2461316\n", - "Q99527517,collection entity,2254480\n", - "Q28813620,set,1363013\n", - "Q16887380,group,1362538\n", - "Q488383,object,1286312\n", - "Q20937557,series,1267164\n", - "Q58415929,spatio-temporal entity,1201300\n", - "Q4406616,concrete object,1175217\n", - "Q223557,physical object,1164930\n", - "Q6671777,structure,1122346\n", - "Q337060,perceptible object,1079449\n", - "Q7184903,abstract object,1072421\n", - "Q219858,zone,1057006\n", - "Q50365914,biological region,1056956\n", - "Q23958946,individual entity,1038346\n", - "Q97669203,molecular conformation,1007383\n", - "Q15712714,biomolecular structure,1007381\n", - "Q3511065,biological sequence,1007335\n", - "Q3771876,nucleic acid structure,1004686\n", - "Q37500013,primary structure,1004683\n", - "Q863908,nucleic acid sequence,1004680\n", - "Q7187,gene,1004634\n", - "Q103940464,continuant,1003328\n", - "Q53617489,independent continuant,1003327\n", - "Q27043950,anatomical entity,1003325\n", - "Q28732711,physical substance,977526\n", - "Q4503801,part and whole,969424\n", - "Q1310239,component,960112\n", - "Q20747295,protein-coding gene,942018\n", - "Q58416391,spatial entity,927246\n", - "Q43460564,chemical entity,894604\n", - "Q79529,chemical substance,893534\n", - "Q28728771,material substance,892254\n", - "Q35758,matter,891736\n", - "Q66394244,physical anatomical entity,877724\n", - "Q5127848,class,875770\n", - "Q578779,pure substance,874023\n", - "Q19478619,metaclass,873959\n", - "Q20026787,chemical component,873903\n", - "Q11173,chemical compound,873902\n", - "Q29651224,natural object,866276\n", - "Q16686022,natural physical object,866273\n", - "Q53617407,material entity,865793\n", - "Q27043948,material anatomical entity,865792\n", - "Q28845870,biological component,862053\n", - "Q4936952,anatomical structure,862034\n", - "Q1621273,particle,856456\n", - "Q46344,quantum,856370\n", - "Q28693603,quantum particle,856367\n", - "Q2923525,massive particle,856265\n", - "Q28877390,massive quantum particle,856264\n", - "Q908049,bound state,856239\n", - "Q3366856,composite particle,856208\n", - "Q2393187,molecular entity,856080\n", - "Q2901852,compound of carbon,855799\n", - "Q174211,organic compound,855763\n", - "Q169336,mixture,853910\n", - "Q11369,molecule,853417\n", - "Q178593,macromolecule,853231\n", - "Q206229,biomolecule,852989\n", - "Q81163,polymer,851896\n", - "Q422649,biopolymer,851714\n", - "Q424689,gene product,851333\n", - "Q66560214,biological macromolecule,789641\n", - "Q181394,nutrient,788439\n", - "Q145273,polyamide,788369\n", - "Q8054,protein,788357\n", - "Q16686448,artificial entity,309666\n", - "Q26907166,temporal entity,281532\n", - "Q1190554,occurrence,273428\n", - "Q4026292,action,231193\n", - "Q15401930,product,227605\n", - "Q937228,property,219920\n", - "Q8205328,artificial physical object,218567\n", - "Q1914636,activity,198404\n", - "Q1207505,quality,193010\n", - "Q24229398,agent,156590\n", - "Q61788060,human activity,148527\n", - "Q830077,subject,141105\n", - "Q28877,goods,139125\n", - "Q1150070,change,134268\n", - "Q18336849,item with given name property,133824\n", - "Q795052,individual,131442\n", - "Q3249551,process,130568\n", - "Q2424752,product,129982\n", - "Q215627,person,129884\n", - "Q4897819,role,129416\n", - "Q26720107,subject of a right,128685\n", - "Q3778211,legal person,128684\n", - "Q7239,organism,125704\n", - "Q16889133,class,125538\n", - "Q11028,information,122503\n", - "Q159344,heterotroph,122144\n", - "Q72638,consumer,122136\n", - "Q154954,natural person,121570\n", - "Q45983014,organisms by adaptation,121568\n", - "Q164509,omnivore,121567\n", - "Q5,human,121566\n", - "Q930933,relation,121018\n", - "Q16722960,phenomenon,120253\n" - ] - } - ], - "source": [ - "import requests\n", - "\n", - "top_parents = []\n", - "\n", - "for qnode,qnode_count in zip(p279StarDF_node2_counts[:100].index, p279StarDF_node2_counts[:100]):\n", - " top_parents.append((qnode,requests.get('http://ckg07:9200/wikidatadwd-augmented/_doc/'+qnode).json()['_source']['labels']['en'][0],qnode_count))\n", - " print(qnode+','+requests.get('http://ckg07:9200/wikidatadwd-augmented/_doc/'+qnode).json()['_source']['labels']['en'][0] + \",\" + str(qnode_count))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "proud-remainder", - "metadata": {}, - "outputs": [], - "source": [ - "top_parents = pd.DataFrame(top_parents, columns=['qnode','label','count'])" - ] - }, - { - "cell_type": "markdown", - "id": "asian-pleasure", - "metadata": {}, - "source": [ - "## Analyze Parents" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "cardiac-prison", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3caff386d7254beab10e799a453273bb", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from collections import defaultdict\n", - "from tqdm.notebook import tqdm\n", - "\n", - "child_parent_dict = defaultdict(set)\n", - "parent_child_dict = defaultdict(set)\n", - "with gzip.open('../../wd-correctness/wikidata-20210215/derived.P279.tsv.gz') as fIN:\n", - " first_line = True\n", - " for line in tqdm(fIN):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line_s = line.decode(\"utf-8\").strip().split('\\t')\n", - " child_parent_dict[line_s[1]].add(line_s[3])\n", - " parent_child_dict[line_s[3]].add(line_s[1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "defined-darwin", - "metadata": {}, - "outputs": [], - "source": [ - "max_depths = {}\n", - "min_depths = {}" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "bibliographic-layout", - "metadata": {}, - "outputs": [], - "source": [ - "def find_max_depth(qnode, depth=0, visited=set()):\n", - " global parent_child_dict\n", - "# print(qnode, depth, visited)\n", - " if qnode not in parent_child_dict:\n", - " return depth\n", - " max_val = depth\n", - " for child in parent_child_dict[qnode]:\n", - " if child not in visited:\n", - " if child not in max_depths:\n", - " max_depths[child] = find_max_depth(child, depth+1, visited | {child})\n", - " max_val = max(max_val, max_depths[child])\n", - " return max_val\n", - "\n", - "def find_min_depth(qnode, depth=0, visited=set()):\n", - " global parent_child_dict\n", - "# print(qnode, depth, visited)\n", - " if qnode not in parent_child_dict:\n", - " return depth\n", - " min_val = float('inf')\n", - " for child in parent_child_dict[qnode]:\n", - " if child not in visited:\n", - " if child not in min_depths:\n", - " min_depths[child] = find_min_depth(child, depth+1, visited | {child})\n", - " min_val = min(min_val, min_depths[child])\n", - " if min_val == float('inf'):\n", - " return depth\n", - " else:\n", - " return min_val" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "opponent-vertex", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "def entropy_of_children(qnode):\n", - " entropy_sum = 0\n", - " for child in parent_child_dict[qnode]:\n", - " if child in p279StarDF_node2_counts_dict:\n", - " assert p279StarDF_node2_counts_dict[child] <= p279StarDF_node2_counts_dict[qnode], (child, qnode)\n", - " entropy_sum -= p279StarDF_node2_counts_dict[child] / p279StarDF_node2_counts_dict[qnode] * np.log2(p279StarDF_node2_counts_dict[child] / p279StarDF_node2_counts_dict[qnode])\n", - " return float(entropy_sum)" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "id": "widespread-storage", - "metadata": {}, - "outputs": [], - "source": [ - "def get_reduction_ratio(qnode):\n", - " return [p279StarDF_node2_counts_dict[qnode] / p279StarDF_node2_counts_dict[parent] for parent in child_parent_dict[qnode]]" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "id": "exciting-representation", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "9e0f343423654e6d93249f3f454fae38", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "newRows = []\n", - "for _, row in tqdm(top_parents.iterrows()):\n", - " row['child_count'] = len(parent_child_dict[row['qnode']])\n", - " row['max_no_of_siblings'] = max([len(parent_child_dict[parent]) - 1 for parent in child_parent_dict[row['qnode']]]) if child_parent_dict[row['qnode']] else 0\n", - " row['min_no_of_siblings'] = min([len(parent_child_dict[parent]) - 1 for parent in child_parent_dict[row['qnode']]]) if child_parent_dict[row['qnode']] else 0\n", - " row['max_depth'] = find_max_depth(row['qnode'])\n", - " row['min_depth'] = find_min_depth(row['qnode'])\n", - " row['entropy'] = entropy_of_children(row['qnode'])\n", - " row['red_ratios'] = get_reduction_ratio(row['qnode'])\n", - " newRows.append(row)" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "lucky-teens", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Q15401930', 'Q28877', 'Q8205328'}" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "parent_child_dict['Q2424752']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "numerical-sharp", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "intense-bibliography", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "blessed-biodiversity", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "common-cooking", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "chinese-competition", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "solid-final", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "known-logan", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "careful-linux", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
qnodelabelcountchild_countmax_no_of_siblingsmin_no_of_siblingsmax_depthmin_depthentropyred_ratios
0Q35120entity246131660002914.986354[]
1Q99527517collection entity2254480659592921.201021[0.9159652803622127]
2Q28813620set136301341552520.035319[0.6045797700578404]
3Q16887380group136253814740402520.786249[0.999651507359064]
4Q488383object12863125659592911.487792[0.5226114810125965]
.................................
95Q45983014organisms by adaptation12156811461462120.000012[0.08922173179757188]
96Q164509omnivore1215671502120.000012[0.9953412589244777, 0.9999917741510924]
97Q5human12156625454202120.311051[0.9999917740834272, 0.9999670971456774, 0.935...
98Q930933relation1210185644442921.937792[0.11284560820797056]
99Q16722960phenomenon120253959592520.341837[0.04885719671915349]
\n", - "

100 rows × 10 columns

\n", - "
" - ], - "text/plain": [ - " qnode label count child_count \\\n", - "0 Q35120 entity 2461316 60 \n", - "1 Q99527517 collection entity 2254480 6 \n", - "2 Q28813620 set 1363013 41 \n", - "3 Q16887380 group 1362538 147 \n", - "4 Q488383 object 1286312 56 \n", - ".. ... ... ... ... \n", - "95 Q45983014 organisms by adaptation 121568 1 \n", - "96 Q164509 omnivore 121567 1 \n", - "97 Q5 human 121566 254 \n", - "98 Q930933 relation 121018 56 \n", - "99 Q16722960 phenomenon 120253 9 \n", - "\n", - " max_no_of_siblings min_no_of_siblings max_depth min_depth entropy \\\n", - "0 0 0 29 1 4.986354 \n", - "1 59 59 29 2 1.201021 \n", - "2 5 5 25 2 0.035319 \n", - "3 40 40 25 2 0.786249 \n", - "4 59 59 29 1 1.487792 \n", - ".. ... ... ... ... ... \n", - "95 146 146 21 2 0.000012 \n", - "96 5 0 21 2 0.000012 \n", - "97 542 0 21 2 0.311051 \n", - "98 44 44 29 2 1.937792 \n", - "99 59 59 25 2 0.341837 \n", - "\n", - " red_ratios \n", - "0 [] \n", - "1 [0.9159652803622127] \n", - "2 [0.6045797700578404] \n", - "3 [0.999651507359064] \n", - "4 [0.5226114810125965] \n", - ".. ... \n", - "95 [0.08922173179757188] \n", - "96 [0.9953412589244777, 0.9999917741510924] \n", - "97 [0.9999917740834272, 0.9999670971456774, 0.935... \n", - "98 [0.11284560820797056] \n", - "99 [0.04885719671915349] \n", - "\n", - "[100 rows x 10 columns]" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(newRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "interested-reply", - "metadata": {}, - "outputs": [], - "source": [ - "pd.DataFrame(newRows).to_csv('../data/Analogical_Dataset/top_parents_analysis.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sporting-radius", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "pacific-hughes", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "needed-grenada", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "ordinary-schema", - "metadata": {}, - "source": [ - "# Determine if training file has common parent or common ancestor" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "anonymous-penalty", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "comp = pd.read_csv('../data/compositional.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "statutory-supplier", - "metadata": {}, - "outputs": [], - "source": [ - "compDict = {row['node1']: row['node2'] for _, row in comp.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 158, - "id": "legal-handy", - "metadata": {}, - "outputs": [], - "source": [ - "trainingDF = pd.read_csv('../data/Analogical_Dataset/Analogical_Test_File.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "democratic-hebrew", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2node1_labelnode2_labelrelationother_node1other_node2other_node1_labelother_node2_labelother_relationtype
25Q250Q1921606computer keyboardkeyboardPURPOSEQ444321Q2009740telephone keybadkeypadPURPOSEPOS_SAME_PAR
26Q250Q1921606computer keyboardkeyboardPURPOSEQ807980Q82744barcode readerimage scannerPURPOSEPOS_SAME_PAR
27Q7991Q336natural sciencesciencePROPERTYQ2914650Q7163identity politicspoliticsPROPERTYPOS_SAME_PAR
28Q7991Q336natural sciencesciencePROPERTYQ4259813Q9174liberal religionreligionPROPERTYPOS_SAME_PAR
29Q7991Q336natural sciencesciencePROPERTYQ10404171Q186005thermal therapyphysiotherapyPROPERTYPOS_SAME_PAR
\n", - "
" - ], - "text/plain": [ - " node1 node2 node1_label node2_label relation other_node1 \\\n", - "25 Q250 Q1921606 computer keyboard keyboard PURPOSE Q444321 \n", - "26 Q250 Q1921606 computer keyboard keyboard PURPOSE Q807980 \n", - "27 Q7991 Q336 natural science science PROPERTY Q2914650 \n", - "28 Q7991 Q336 natural science science PROPERTY Q4259813 \n", - "29 Q7991 Q336 natural science science PROPERTY Q10404171 \n", - "\n", - " other_node2 other_node1_label other_node2_label other_relation \\\n", - "25 Q2009740 telephone keybad keypad PURPOSE \n", - "26 Q82744 barcode reader image scanner PURPOSE \n", - "27 Q7163 identity politics politics PROPERTY \n", - "28 Q9174 liberal religion religion PROPERTY \n", - "29 Q186005 thermal therapy physiotherapy PROPERTY \n", - "\n", - " type \n", - "25 POS_SAME_PAR \n", - "26 POS_SAME_PAR \n", - "27 POS_SAME_PAR \n", - "28 POS_SAME_PAR \n", - "29 POS_SAME_PAR " - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingDF[trainingDF.type == 'POS_SAME_PAR'].head()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "scientific-charles", - "metadata": {}, - "outputs": [], - "source": [ - "trainingDFSubset = trainingDF[trainingDF.type == 'POS_SAME_PAR']" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "moral-shaft", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2node1_labelnode2_labelrelationother_node1other_node2other_node1_labelother_node2_labelother_relationtypeUnnamed: 11
25Q250Q1921606computer keyboardkeyboardPURPOSEQ444321Q2009740telephone keybadkeypadPURPOSEPOS_SAME_PARNaN
26Q54854916Q1921606typewriter keyboardkeyboardPURPOSEQ807980Q82744barcode readerimage scannerPURPOSEPOS_SAME_PARNaN
27Q7991Q336natural sciencesciencePROPERTYQ2914650Q7163identity politicspoliticsPROPERTYPOS_SAME_PARNaN
28Q1637030Q336food sciencesciencePROPERTYQ4259813Q9174liberal religionreligionPROPERTYPOS_SAME_PARNaN
29Q16387Q336information sciencesciencePROPERTYQ10404171Q186005thermal therapyphysiotherapyPROPERTYPOS_SAME_PARNaN
\n", - "
" - ], - "text/plain": [ - " node1 node2 node1_label node2_label relation \\\n", - "25 Q250 Q1921606 computer keyboard keyboard PURPOSE \n", - "26 Q54854916 Q1921606 typewriter keyboard keyboard PURPOSE \n", - "27 Q7991 Q336 natural science science PROPERTY \n", - "28 Q1637030 Q336 food science science PROPERTY \n", - "29 Q16387 Q336 information science science PROPERTY \n", - "\n", - " other_node1 other_node2 other_node1_label other_node2_label \\\n", - "25 Q444321 Q2009740 telephone keybad keypad \n", - "26 Q807980 Q82744 barcode reader image scanner \n", - "27 Q2914650 Q7163 identity politics politics \n", - "28 Q4259813 Q9174 liberal religion religion \n", - "29 Q10404171 Q186005 thermal therapy physiotherapy \n", - "\n", - " other_relation type Unnamed: 11 \n", - "25 PURPOSE POS_SAME_PAR NaN \n", - "26 PURPOSE POS_SAME_PAR NaN \n", - "27 PROPERTY POS_SAME_PAR NaN \n", - "28 PROPERTY POS_SAME_PAR NaN \n", - "29 PROPERTY POS_SAME_PAR NaN " - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingDFSubset.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "competitive-medication", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " trainingDFSubset['pair1_exists'] = trainingDFSubset.apply(checkIfExists, args=('node1','node2'), axis=1)\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " trainingDFSubset['pair2_exists'] = trainingDFSubset.apply(checkIfExists, args=('other_node1','other_node2'), axis=1)\n" - ] - } - ], - "source": [ - "def checkIfExists(row, node1_col, node2_col):\n", - " return row[node1_col] in compDict and row[node2_col] == compDict[row[node1_col]]\n", - "trainingDFSubset['pair1_exists'] = trainingDFSubset.apply(checkIfExists, args=('node1','node2'), axis=1)\n", - "trainingDFSubset['pair2_exists'] = trainingDFSubset.apply(checkIfExists, args=('other_node1','other_node2'), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "wrapped-softball", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True 35\n", - "False 15\n", - "Name: pair2_exists, dtype: int64" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingDFSubset['pair2_exists'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "physical-fireplace", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "25 -1\n", - "26 -1\n", - "27 -1\n", - "28 -1\n", - "29 -1\n", - "30 -1\n", - "31 -1\n", - "32 -1\n", - "33 -1\n", - "34 -1\n", - "35 -1\n", - "36 -1\n", - "37 -1\n", - "38 -1\n", - "39 -1\n", - "40 -1\n", - "41 -1\n", - "42 -1\n", - "43 -1\n", - "44 -1\n", - "45 -1\n", - "46 -1\n", - "47 -1\n", - "48 -1\n", - "49 -1\n", - "50 -1\n", - "51 -1\n", - "52 -1\n", - "53 -1\n", - "54 -1\n", - "55 -1\n", - "56 -1\n", - "57 -1\n", - "58 -1\n", - "59 -1\n", - "60 -1\n", - "61 -1\n", - "62 -1\n", - "63 -1\n", - "64 -1\n", - "65 -1\n", - "66 -1\n", - "67 -1\n", - "68 -1\n", - "69 -1\n", - "70 -1\n", - "71 -1\n", - "72 -1\n", - "73 -1\n", - "74 -1\n", - "dtype: int64" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def checkIfCommonParent(row):\n", - " if row['node2'] not in compDict or row['other_node2'] not in compDict:\n", - " return -1\n", - " elif compDict[row['node2']] == compDict[row['other_node2']]:\n", - " return 1\n", - " else:\n", - " return 0\n", - "trainingDFSubset.apply(checkIfCommonParent, axis=1)" - ] - }, - { - "cell_type": "markdown", - "id": "according-shark", - "metadata": {}, - "source": [ - "# Same Ancestor Subset Top Parent Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 175, - "id": "hourly-december", - "metadata": {}, - "outputs": [], - "source": [ - "trainingDF = pd.read_csv('../data/Analogical_Dataset/Analogical_Test_File.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 176, - "id": "alternate-bookmark", - "metadata": {}, - "outputs": [], - "source": [ - "trainingDFSubset = trainingDF[trainingDF.type == 'POS_SAME_ANC']" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "existing-gauge", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2node1_labelnode2_labelrelationother_node1other_node2other_node1_labelother_node2_labelother_relationtypeVerifiedcommentpar_nodepar_labelpair1_ancestorpair2_ancestortop_pars_listUnnamed: 18
75Q250Q1921606computer keyboardkeyboardPURPOSEQ7708416Q327065Text displaydisplay devicePURPOSEPOS_SAME_ANCVERIFIEDNaNNaNNaNQ1921606:keyboard|Q864114:input device|Q47146:...Q327065:display device|Q778637:output device|Q...entity,object,physical object,abstract object,...entity,object,physical object,abstract object,...
76Q7991Q336natural sciencesciencePROPERTYQ1140700Q11635improvisational theatretheatrePROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ336:science|Q11862829:academic discipline|Q10...Q11635:theater|Q184485:performing arts|Q201852...entity,object,abstract objectentity,object,abstract object,structure
77Q16387Q336information sciencesciencePROPERTYQ107181871Q11032manuscript newspapernewspaperPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ336:science|Q11862829:academic discipline|Q10...Q11032:newspaper|Q1002697:periodical|Q234460:t...entity,object,abstract objectentity,object,physical object,abstract object,...
78Q9192Q7850Mandarin ChineseChineseLOCATIONQ1122452Q29536Germanic paganismpaganismLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ7850:Chinese|Q33857:Sinitic languages|Q45961:...Q29536:paganism|Q9174:religion|Q3702971:person...entity,object,abstract object,propertyentity,object,abstract object,structure,proper...
79Q56479Q7850Jin ChineseChineseLOCATIONQ702065Q9134Korean mythologymythologyLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ7850:Chinese|Q33857:Sinitic languages|Q45961:...Q9134:mythology|Q49447:world view|Q20978643:po...entity,object,abstract object,propertyentity,object,abstract object,property,relatio...
80Q561Q553human toothtoothOWNERSHIPQ106907987Q106907993mammalian oocytevertebrate oocyteOWNERSHIPPOS_SAME_ANCVERIFIEDNaNNaNNaNNaNNaNentity,object,physical objectNaN
81Q5856Q161synthetic fiberfiberMATERIALQ16676963Q6584340mint syrupsyrupMATERIALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ161:fiber|Q214609:material|Q2424752:productQ6584340:syrup|Q40050:drink|Q2095:food|Q119405...entity,object,physical object,productentity,object,physical object,product
82Q4543Q1734beach volleyballvolleyballLOCATIONQ55491Q55488underground railway stationrailway stationLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ1734:volleyball|Q877517:ball game|Q4438147:sp...Q55488:railway station|Q1318558:operation poin...entity,object,action,phenomenonentity,object,physical object,structure
83Q15728017Q1734snow volleyballvolleyballLOCATIONQ99689267Q3305213leather paintingpaintingLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ1734:volleyball|Q877517:ball game|Q4438147:sp...Q3305213:painting|Q4502142:visual artwork|Q838...entity,object,action,phenomenonentity,object,physical object
84Q9778Q638electronic musicmusicPROPERTYQ20358335Q8261political novelnovelPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ638:music|Q735:art|Q2018526:arts|Q80083:human...Q8261:novel|Q571:book|Q49848:document|Q234460:...entity,object,abstract object,structure,actionentity,object,physical object,abstract object,...
85Q1045756Q638microtonal musicmusicPROPERTYQ5707594Q191067news articlearticlePROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ638:music|Q735:art|Q2018526:arts|Q80083:human...Q191067:article|Q234460:text|Q11028:informatio...entity,object,abstract object,structure,actionentity,object,abstract object
86Q699Q17991521fairy taletalePROPERTYQ58079064Q2977protestant cathedralcathedralPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ17991521:tale|Q1318295:narrative|Q17537576:cr...Q2977:cathedral|Q16970:church building|Q137059...entity,objectentity,object,physical object,structure
87Q9585Q432Shia IslamIslamINSTANCEQ4775051Q132203Antiochian GreeksGreek diasporaINSTANCEPOS_SAME_ANCVERIFIEDNaNNaNNaNNaNNaNentity,object,abstract object,structure,proper...NaN
88Q6786Q6718bottom quarkquarkPROPERTYQ55511397Q107968monoatomic anionanionPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ6718:quark|Q52234516:elementary fermion|Q4311...Q107968:anion|Q36496:ion|Q2393187:molecular en...entity,object,physical object,particleentity,object,physical object,particle
89Q7141Q420cell biologybiologyPROPERTYQ81197Q413nuclear physicsphysicsPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ420:biology|Q7991:natural science|Q336:scienc...Q413:physics|Q14632398:physical sciences|Q7991...entity,object,abstract objectentity,object,abstract object
90Q5860Q161carbon fibersfiberMATERIALQ5567094Q80228glass bottlebottleMATERIALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ161:fiber|Q214609:material|Q2424752:productQ80228:bottle|Q16896124:bin|Q987767:container|...entity,object,physical object,productentity,object,physical object,structure,product
91Q6311Q8104stellar atmosphereatmosphereLOCATIONQ1037499Q36133lunar soilsoilLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ8104:atmosphere|Q47495022:shell of an astrono...Q36133:soil|Q1155083:granular material|Q214609...entity,object,physical objectentity,object,physical object,product
92Q426Q2386606animal rightsrightPROPERTYQ2845837Q11210tripolar coordinatescoordinate systemPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ2386606:right|Q7748:law|Q1151067:rule|Q268459...Q11210:coordinate system|Q184876:frame of refe...entity,object,abstract objectentity,object,abstract object,structure,relation
93Q305Q186361corporal punishmentpunishmentPROPERTYQ3436733Q50000decisive victoryvictoryPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ186361:punishment|Q2995644:result|Q733541:con...Q50000:victory|Q2995644:result|Q733541:consequ...entity,actionentity,property
94Q4812Q527day skyskyTEMPORALQ9182675Q1107656perennial gardengardenTEMPORALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ527:sky|Q107:space|Q3054889:measurable set|Q3...Q1107656:garden|Q35145743:human-made landform|...entity,object,abstract object,relationentity,object,physical object,abstract object,...
95Q318887Q527evening skyskyTEMPORALQ18354756Q344far futurefutureTEMPORALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ527:sky|Q107:space|Q3054889:measurable set|Q3...Q344:future|Q11471:time|Q3054889:measurable se...entity,object,abstract object,relationentity,object,abstract object,relation
96Q104857623Q374raspberry vodkavodkaMATERIALQ1757352Q13317soy yogurtyogurtMATERIALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ374:vodka|Q56139:liquor|Q17562878:spirit drin...Q281:whisky|Q1479546:grain spirit|Q56139:liquo...entity,object,physical object,productentity,object,physical object,product
97Q7076Q6199individualist anarchismanarchismPROPERTYQ2300258Q200726conditional probability distributionprobability distributionPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNNaNNaNNaNentity,object,abstract object,property,relation
98Q380528Q73792color chargechargePROPERTYQ184550Q11379mechanical energyenergyPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ73792:charge|Q4373292:physical property|Q9372...Q11379:energy|Q107715:physical quantity|Q30931...entity,object,abstract object,property,relationentity,object,abstract object,property,relation
99Q1364131Q73792weak hyperchargechargePROPERTYQ240105Q11465radial velocityvelocityPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ73792:charge|Q4373292:physical property|Q9372...Q11465:velocity|Q107715:physical quantity|Q309...entity,object,abstract object,property,relationentity,object,abstract object,property,relation
\n", - "
" - ], - "text/plain": [ - " node1 node2 node1_label node2_label relation \\\n", - "75 Q250 Q1921606 computer keyboard keyboard PURPOSE \n", - "76 Q7991 Q336 natural science science PROPERTY \n", - "77 Q16387 Q336 information science science PROPERTY \n", - "78 Q9192 Q7850 Mandarin Chinese Chinese LOCATION \n", - "79 Q56479 Q7850 Jin Chinese Chinese LOCATION \n", - "80 Q561 Q553 human tooth tooth OWNERSHIP \n", - "81 Q5856 Q161 synthetic fiber fiber MATERIAL \n", - "82 Q4543 Q1734 beach volleyball volleyball LOCATION \n", - "83 Q15728017 Q1734 snow volleyball volleyball LOCATION \n", - "84 Q9778 Q638 electronic music music PROPERTY \n", - "85 Q1045756 Q638 microtonal music music PROPERTY \n", - "86 Q699 Q17991521 fairy tale tale PROPERTY \n", - "87 Q9585 Q432 Shia Islam Islam INSTANCE \n", - "88 Q6786 Q6718 bottom quark quark PROPERTY \n", - "89 Q7141 Q420 cell biology biology PROPERTY \n", - "90 Q5860 Q161 carbon fibers fiber MATERIAL \n", - "91 Q6311 Q8104 stellar atmosphere atmosphere LOCATION \n", - "92 Q426 Q2386606 animal rights right PROPERTY \n", - "93 Q305 Q186361 corporal punishment punishment PROPERTY \n", - "94 Q4812 Q527 day sky sky TEMPORAL \n", - "95 Q318887 Q527 evening sky sky TEMPORAL \n", - "96 Q104857623 Q374 raspberry vodka vodka MATERIAL \n", - "97 Q7076 Q6199 individualist anarchism anarchism PROPERTY \n", - "98 Q380528 Q73792 color charge charge PROPERTY \n", - "99 Q1364131 Q73792 weak hypercharge charge PROPERTY \n", - "\n", - " other_node1 other_node2 other_node1_label \\\n", - "75 Q7708416 Q327065 Text display \n", - "76 Q1140700 Q11635 improvisational theatre \n", - "77 Q107181871 Q11032 manuscript newspaper \n", - "78 Q1122452 Q29536 Germanic paganism \n", - "79 Q702065 Q9134 Korean mythology \n", - "80 Q106907987 Q106907993 mammalian oocyte \n", - "81 Q16676963 Q6584340 mint syrup \n", - "82 Q55491 Q55488 underground railway station \n", - "83 Q99689267 Q3305213 leather painting \n", - "84 Q20358335 Q8261 political novel \n", - "85 Q5707594 Q191067 news article \n", - "86 Q58079064 Q2977 protestant cathedral \n", - "87 Q4775051 Q132203 Antiochian Greeks \n", - "88 Q55511397 Q107968 monoatomic anion \n", - "89 Q81197 Q413 nuclear physics \n", - "90 Q5567094 Q80228 glass bottle \n", - "91 Q1037499 Q36133 lunar soil \n", - "92 Q2845837 Q11210 tripolar coordinates \n", - "93 Q3436733 Q50000 decisive victory \n", - "94 Q9182675 Q1107656 perennial garden \n", - "95 Q18354756 Q344 far future \n", - "96 Q1757352 Q13317 soy yogurt \n", - "97 Q2300258 Q200726 conditional probability distribution \n", - "98 Q184550 Q11379 mechanical energy \n", - "99 Q240105 Q11465 radial velocity \n", - "\n", - " other_node2_label other_relation type Verified comment \\\n", - "75 display device PURPOSE POS_SAME_ANC VERIFIED NaN \n", - "76 theatre PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "77 newspaper PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "78 paganism LOCATION POS_SAME_ANC VERIFIED NaN \n", - "79 mythology LOCATION POS_SAME_ANC VERIFIED NaN \n", - "80 vertebrate oocyte OWNERSHIP POS_SAME_ANC VERIFIED NaN \n", - "81 syrup MATERIAL POS_SAME_ANC VERIFIED NaN \n", - "82 railway station LOCATION POS_SAME_ANC VERIFIED NaN \n", - "83 painting LOCATION POS_SAME_ANC VERIFIED NaN \n", - "84 novel PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "85 article PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "86 cathedral PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "87 Greek diaspora INSTANCE POS_SAME_ANC VERIFIED NaN \n", - "88 anion PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "89 physics PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "90 bottle MATERIAL POS_SAME_ANC VERIFIED NaN \n", - "91 soil LOCATION POS_SAME_ANC VERIFIED NaN \n", - "92 coordinate system PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "93 victory PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "94 garden TEMPORAL POS_SAME_ANC VERIFIED NaN \n", - "95 future TEMPORAL POS_SAME_ANC VERIFIED NaN \n", - "96 yogurt MATERIAL POS_SAME_ANC VERIFIED NaN \n", - "97 probability distribution PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "98 energy PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "99 velocity PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "\n", - " par_node par_label pair1_ancestor \\\n", - "75 NaN NaN Q1921606:keyboard|Q864114:input device|Q47146:... \n", - "76 NaN NaN Q336:science|Q11862829:academic discipline|Q10... \n", - "77 NaN NaN Q336:science|Q11862829:academic discipline|Q10... \n", - "78 NaN NaN Q7850:Chinese|Q33857:Sinitic languages|Q45961:... \n", - "79 NaN NaN Q7850:Chinese|Q33857:Sinitic languages|Q45961:... \n", - "80 NaN NaN NaN \n", - "81 NaN NaN Q161:fiber|Q214609:material|Q2424752:product \n", - "82 NaN NaN Q1734:volleyball|Q877517:ball game|Q4438147:sp... \n", - "83 NaN NaN Q1734:volleyball|Q877517:ball game|Q4438147:sp... \n", - "84 NaN NaN Q638:music|Q735:art|Q2018526:arts|Q80083:human... \n", - "85 NaN NaN Q638:music|Q735:art|Q2018526:arts|Q80083:human... \n", - "86 NaN NaN Q17991521:tale|Q1318295:narrative|Q17537576:cr... \n", - "87 NaN NaN NaN \n", - "88 NaN NaN Q6718:quark|Q52234516:elementary fermion|Q4311... \n", - "89 NaN NaN Q420:biology|Q7991:natural science|Q336:scienc... \n", - "90 NaN NaN Q161:fiber|Q214609:material|Q2424752:product \n", - "91 NaN NaN Q8104:atmosphere|Q47495022:shell of an astrono... \n", - "92 NaN NaN Q2386606:right|Q7748:law|Q1151067:rule|Q268459... \n", - "93 NaN NaN Q186361:punishment|Q2995644:result|Q733541:con... \n", - "94 NaN NaN Q527:sky|Q107:space|Q3054889:measurable set|Q3... \n", - "95 NaN NaN Q527:sky|Q107:space|Q3054889:measurable set|Q3... \n", - "96 NaN NaN Q374:vodka|Q56139:liquor|Q17562878:spirit drin... \n", - "97 NaN NaN NaN \n", - "98 NaN NaN Q73792:charge|Q4373292:physical property|Q9372... \n", - "99 NaN NaN Q73792:charge|Q4373292:physical property|Q9372... \n", - "\n", - " pair2_ancestor \\\n", - "75 Q327065:display device|Q778637:output device|Q... \n", - "76 Q11635:theater|Q184485:performing arts|Q201852... \n", - "77 Q11032:newspaper|Q1002697:periodical|Q234460:t... \n", - "78 Q29536:paganism|Q9174:religion|Q3702971:person... \n", - "79 Q9134:mythology|Q49447:world view|Q20978643:po... \n", - "80 NaN \n", - "81 Q6584340:syrup|Q40050:drink|Q2095:food|Q119405... \n", - "82 Q55488:railway station|Q1318558:operation poin... \n", - "83 Q3305213:painting|Q4502142:visual artwork|Q838... \n", - "84 Q8261:novel|Q571:book|Q49848:document|Q234460:... \n", - "85 Q191067:article|Q234460:text|Q11028:informatio... \n", - "86 Q2977:cathedral|Q16970:church building|Q137059... \n", - "87 NaN \n", - "88 Q107968:anion|Q36496:ion|Q2393187:molecular en... \n", - "89 Q413:physics|Q14632398:physical sciences|Q7991... \n", - "90 Q80228:bottle|Q16896124:bin|Q987767:container|... \n", - "91 Q36133:soil|Q1155083:granular material|Q214609... \n", - "92 Q11210:coordinate system|Q184876:frame of refe... \n", - "93 Q50000:victory|Q2995644:result|Q733541:consequ... \n", - "94 Q1107656:garden|Q35145743:human-made landform|... \n", - "95 Q344:future|Q11471:time|Q3054889:measurable se... \n", - "96 Q281:whisky|Q1479546:grain spirit|Q56139:liquo... \n", - "97 NaN \n", - "98 Q11379:energy|Q107715:physical quantity|Q30931... \n", - "99 Q11465:velocity|Q107715:physical quantity|Q309... \n", - "\n", - " top_pars_list \\\n", - "75 entity,object,physical object,abstract object,... \n", - "76 entity,object,abstract object \n", - "77 entity,object,abstract object \n", - "78 entity,object,abstract object,property \n", - "79 entity,object,abstract object,property \n", - "80 entity,object,physical object \n", - "81 entity,object,physical object,product \n", - "82 entity,object,action,phenomenon \n", - "83 entity,object,action,phenomenon \n", - "84 entity,object,abstract object,structure,action \n", - "85 entity,object,abstract object,structure,action \n", - "86 entity,object \n", - "87 entity,object,abstract object,structure,proper... \n", - "88 entity,object,physical object,particle \n", - "89 entity,object,abstract object \n", - "90 entity,object,physical object,product \n", - "91 entity,object,physical object \n", - "92 entity,object,abstract object \n", - "93 entity,action \n", - "94 entity,object,abstract object,relation \n", - "95 entity,object,abstract object,relation \n", - "96 entity,object,physical object,product \n", - "97 NaN \n", - "98 entity,object,abstract object,property,relation \n", - "99 entity,object,abstract object,property,relation \n", - "\n", - " Unnamed: 18 \n", - "75 entity,object,physical object,abstract object,... \n", - "76 entity,object,abstract object,structure \n", - "77 entity,object,physical object,abstract object,... \n", - "78 entity,object,abstract object,structure,proper... \n", - "79 entity,object,abstract object,property,relatio... \n", - "80 NaN \n", - "81 entity,object,physical object,product \n", - "82 entity,object,physical object,structure \n", - "83 entity,object,physical object \n", - "84 entity,object,physical object,abstract object,... \n", - "85 entity,object,abstract object \n", - "86 entity,object,physical object,structure \n", - "87 NaN \n", - "88 entity,object,physical object,particle \n", - "89 entity,object,abstract object \n", - "90 entity,object,physical object,structure,product \n", - "91 entity,object,physical object,product \n", - "92 entity,object,abstract object,structure,relation \n", - "93 entity,property \n", - "94 entity,object,physical object,abstract object,... \n", - "95 entity,object,abstract object,relation \n", - "96 entity,object,physical object,product \n", - "97 entity,object,abstract object,property,relation \n", - "98 entity,object,abstract object,property,relation \n", - "99 entity,object,abstract object,property,relation " - ] - }, - "execution_count": 177, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingDFSubset" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "id": "running-conspiracy", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a178a238123f40b19e775fa110bcaaa6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from collections import defaultdict\n", - "from tqdm.notebook import tqdm\n", - "\n", - "subset_nodes = set(trainingDFSubset.node1.to_list() + trainingDFSubset.node2.to_list() + trainingDFSubset.other_node1.to_list() + trainingDFSubset.other_node2.to_list())\n", - "parent_dict = defaultdict(set)\n", - "with gzip.open('../../wd-correctness/wikidata-20210215/derived.P279star.tsv.gz') as fIN:\n", - " first_line = True\n", - " for line in tqdm(fIN):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line_s = line.decode(\"utf-8\").strip().split('\\t')\n", - " if line_s[0] in subset_nodes:\n", - " parent_dict[line_s[0]].add(line_s[2])" - ] - }, - { - "cell_type": "code", - "execution_count": 166, - "id": "private-catch", - "metadata": {}, - "outputs": [], - "source": [ - "top_nodes = {'Q35120': 'entity', 'Q488383': 'object', 'Q223557': 'physical object', 'Q7184903': 'abstract object',\n", - " 'Q6671777': 'structure', 'Q219858': 'zone', 'Q1621273': 'particle', 'Q174211': 'organic compound', \n", - " 'Q4026292': 'action', 'Q937228': 'property', 'Q2424752': 'product', 'Q215627': 'person', 'Q4897819': 'role',\n", - " 'Q7239': 'organism', 'Q930933': 'relation', 'Q16722960': 'phenomenon'}" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "id": "prepared-senegal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['entity',\n", - " 'object',\n", - " 'physical object',\n", - " 'abstract object',\n", - " 'structure',\n", - " 'zone',\n", - " 'particle',\n", - " 'organic compound',\n", - " 'action',\n", - " 'property',\n", - " 'product',\n", - " 'person',\n", - " 'role',\n", - " 'organism',\n", - " 'relation',\n", - " 'phenomenon']" - ] - }, - "execution_count": 167, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(top_nodes.values())" - ] - }, - { - "cell_type": "markdown", - "id": "detailed-painting", - "metadata": {}, - "source": [ - "# Pairwise Top Parent Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "id": "brief-postcard", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "369de020404143008c60621efca55090", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from collections import defaultdict\n", - "from tqdm.notebook import tqdm\n", - "\n", - "child_parent_dict = defaultdict(set)\n", - "parent_child_dict = defaultdict(set)\n", - "with gzip.open('../../wd-correctness/wikidata-20210215/derived.P279.tsv.gz') as fIN:\n", - " first_line = True\n", - " for line in tqdm(fIN):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line_s = line.decode(\"utf-8\").strip().split('\\t')\n", - " child_parent_dict[line_s[1]].add(line_s[3])\n", - " parent_child_dict[line_s[3]].add(line_s[1])" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "careful-divorce", - "metadata": {}, - "outputs": [], - "source": [ - "def find_parent_path(curr, top_parent, path):\n", - " if curr == top_parent:\n", - " return path + [top_parent]\n", - " elif curr not in child_parent_dict:\n", - " return False\n", - " \n", - " for par in child_parent_dict[curr]:\n", - " new_path = find_parent_path(par, top_parent, path + [curr])\n", - " if new_path:\n", - " return new_path\n", - "\n", - " return None" - ] - }, - { - "cell_type": "code", - "execution_count": 143, - "id": "atlantic-cornwall", - "metadata": {}, - "outputs": [], - "source": [ - "def find_common_top_parents(node1, node2):\n", - " pars1, pars2 = set(), set()\n", - " for top_node in top_nodes:\n", - " if top_node in parent_dict[node1]:\n", - " pars1.add(top_node)\n", - " if top_node in parent_dict[node2]:\n", - " pars2.add(top_node)\n", - " return pars1 & pars2" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "id": "black-confidentiality", - "metadata": {}, - "outputs": [], - "source": [ - "def shortest_common_path(node1, node2):\n", - " node1_shortest, node2_shortest = [], []\n", - " shortest_len = float('inf')\n", - " for top_par in find_common_top_parents(node1, node2):\n", - " node1_path = find_parent_path(node1, top_par, [])\n", - " node2_path = find_parent_path(node2, top_par, [])\n", - " \n", - " if node1_path and node2_path and max(len(node1_path), len(node2_path)) < shortest_len:\n", - " node1_shortest = node1_path\n", - " node2_shortest = node2_path\n", - " shortest_len = max(len(node1_path), len(node2_path))\n", - " node1_shortest = \"|\".join([node + ':' + fetch_label(node) for node in node1_shortest])\n", - " node2_shortest = \"|\".join([node + ':' + fetch_label(node) for node in node2_shortest])\n", - " pars1 = {}\n", - " pars2 = {}\n", - " for top_node in top_nodes:\n", - " if top_node in parent_dict[row['node2']]:\n", - " pars1[top_node] = top_nodes[top_node]\n", - " if top_node in parent_dict[row['other_node2']]:\n", - " pars2[top_node] = top_nodes[top_node]\n", - " return node1_shortest + \";\" + node2_shortest + ';' + \",\".join(list(pars1.values())) + ';' + \",\".join(list(pars2.values()))" - ] - }, - { - "cell_type": "code", - "execution_count": 198, - "id": "laden-charter", - "metadata": {}, - "outputs": [], - "source": [ - "def fetch_label(qnode):\n", - " try:\n", - " return requests.get('http://ckg07:9200/wikidatadwd-augmented/_doc/'+qnode).json()['_source']['labels']['en'][0]\n", - " except:\n", - " return str(False)" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "id": "material-interpretation", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e73c4a3b211f45ec9d1ebc8d6895bbae", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "trainingSubsetCommonPaths = []\n", - "for _,row in tqdm(trainingDFSubset.iterrows()):\n", - " trainingSubsetCommonPaths.append(shortest_common_path(row['node2'], row['other_node2']))" - ] - }, - { - "cell_type": "code", - "execution_count": 180, - "id": "promotional-diamond", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Q1921606:keyboard|Q864114:input device|Q47146:user interface|Q23808:interface|Q230629:connection|Q930933:relation;Q327065:display device|Q778637:output device|Q47146:user interface|Q23808:interface|Q230629:connection|Q930933:relation;entity,object,physical object,abstract object,product,person,relation;entity,object,physical object,abstract object,product,relation',\n", - " 'Q336:science|Q11862829:academic discipline|Q1047113:specialty|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q11635:theater|Q184485:performing arts|Q2018526:arts|Q80083:humanities|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;entity,object,abstract object;entity,object,abstract object,structure',\n", - " 'Q336:science|Q11862829:academic discipline|Q1047113:specialty|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q11032:newspaper|Q1002697:periodical|Q234460:text|Q11028:information|Q7184903:abstract object;entity,object,abstract object;entity,object,physical object,abstract object,structure,action',\n", - " 'Q7850:Chinese|Q33857:Sinitic languages|Q45961:Sino-Tibetan languages|Q7524744:Sino-Austronesian languages|Q20162172:human language|Q315:language|Q17376908:languoid|Q7184903:abstract object;Q29536:paganism|Q9174:religion|Q3702971:personal data|Q61151961:individual data|Q42848:data|Q11028:information|Q7184903:abstract object;entity,object,abstract object,property;entity,object,abstract object,structure,property,relation',\n", - " 'Q7850:Chinese|Q33857:Sinitic languages|Q45961:Sino-Tibetan languages|Q7524744:Sino-Austronesian languages|Q20162172:human language|Q315:language|Q17376908:languoid|Q7184903:abstract object;Q9134:mythology|Q49447:world view|Q20978643:point of view|Q595523:notion|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;entity,object,abstract object,property;entity,object,abstract object,property,relation,phenomenon',\n", - " ';;entity,object,physical object;',\n", - " 'Q161:fiber|Q214609:material|Q2424752:product;Q6584340:syrup|Q40050:drink|Q2095:food|Q1194058:disposable product|Q2424752:product;entity,object,physical object,product;entity,object,physical object,product',\n", - " 'Q1734:volleyball|Q877517:ball game|Q4438147:sport games|Q11410:game|Q17538258:recreative work|Q386724:work|Q15401930:product|Q488383:object;Q55488:railway station|Q1318558:operation point|Q800279:railway facility|Q27096235:artificial geographic entity|Q8205328:artificial physical object|Q223557:physical object|Q4406616:concrete object|Q488383:object;entity,object,action,phenomenon;entity,object,physical object,structure',\n", - " 'Q1734:volleyball|Q877517:ball game|Q4438147:sport games|Q11410:game|Q17538258:recreative work|Q386724:work|Q15401930:product|Q488383:object;Q3305213:painting|Q4502142:visual artwork|Q838948:work of art|Q28877:goods|Q337060:perceptible object|Q223557:physical object|Q4406616:concrete object|Q488383:object;entity,object,action,phenomenon;entity,object,physical object',\n", - " 'Q638:music|Q735:art|Q2018526:arts|Q80083:humanities|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q8261:novel|Q571:book|Q49848:document|Q234460:text|Q11028:information|Q7184903:abstract object;entity,object,abstract object,structure,action;entity,object,physical object,abstract object,structure,action',\n", - " 'Q638:music|Q735:art|Q2018526:arts|Q80083:humanities|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q191067:article|Q234460:text|Q11028:information|Q7184903:abstract object;entity,object,abstract object,structure,action;entity,object,abstract object',\n", - " 'Q17991521:tale|Q1318295:narrative|Q17537576:creative work|Q15621286:intellectual work|Q386724:work|Q15401930:product|Q488383:object|Q35120:entity;Q2977:cathedral|Q16970:church building|Q1370598:place of worship|Q811979:architectural structure|Q811430:human-made geographic feature|Q35145743:human-made landform|Q27096235:artificial geographic entity|Q27096213:geographic entity|Q58416391:spatial entity|Q58415929:spatio-temporal entity|Q35120:entity;entity,object;entity,object,physical object,structure',\n", - " ';;entity,object,abstract object,structure,property,relation;',\n", - " 'Q6718:quark|Q52234516:elementary fermion|Q43116:elementary particle|Q63243922:elementary object|Q488383:object|Q35120:entity;Q107968:anion|Q36496:ion|Q2393187:molecular entity|Q43460564:chemical entity|Q58416391:spatial entity|Q58415929:spatio-temporal entity|Q35120:entity;entity,object,physical object,particle;entity,object,physical object,particle',\n", - " 'Q420:biology|Q7991:natural science|Q336:science|Q11862829:academic discipline|Q1047113:specialty|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q413:physics|Q14632398:physical sciences|Q7991:natural science|Q336:science|Q11862829:academic discipline|Q1047113:specialty|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;entity,object,abstract object;entity,object,abstract object',\n", - " 'Q161:fiber|Q214609:material|Q2424752:product;Q80228:bottle|Q16896124:bin|Q987767:container|Q39546:tool|Q16798631:equipment|Q2424752:product;entity,object,physical object,product;entity,object,physical object,structure,product',\n", - " 'Q8104:atmosphere|Q47495022:shell of an astronomical object|Q23497974:covering|Q23497981:layer|Q223557:physical object;Q36133:soil|Q1155083:granular material|Q214609:material|Q2424752:product|Q28877:goods|Q337060:perceptible object|Q223557:physical object;entity,object,physical object;entity,object,physical object,product',\n", - " 'Q2386606:right|Q7748:law|Q1151067:rule|Q2684591:statement|Q108163:proposition|Q474328:declarative sentence|Q41796:sentence|Q9380010:denunciation|Q628523:message|Q11028:information|Q7184903:abstract object;Q11210:coordinate system|Q184876:frame of reference|Q20978643:point of view|Q595523:notion|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;entity,object,abstract object;entity,object,abstract object,structure,relation',\n", - " 'Q186361:punishment|Q2995644:result|Q733541:consequence|Q408386:inference|Q3249551:process|Q20937557:series|Q16887380:group|Q28813620:set|Q99527517:collection entity|Q35120:entity;Q50000:victory|Q2995644:result|Q733541:consequence|Q408386:inference|Q3249551:process|Q20937557:series|Q16887380:group|Q28813620:set|Q99527517:collection entity|Q35120:entity;entity,action;entity,property',\n", - " 'Q527:sky|Q107:space|Q3054889:measurable set|Q36161:set|Q217594:class|Q16889133:class|Q99527517:collection entity|Q35120:entity;Q1107656:garden|Q35145743:human-made landform|Q27096235:artificial geographic entity|Q27096213:geographic entity|Q58416391:spatial entity|Q58415929:spatio-temporal entity|Q35120:entity;entity,object,abstract object,relation;entity,object,physical object,abstract object,structure,relation',\n", - " 'Q527:sky|Q107:space|Q3054889:measurable set|Q36161:set|Q217594:class|Q246672:mathematical object|Q7184903:abstract object;Q344:future|Q11471:time|Q3054889:measurable set|Q36161:set|Q217594:class|Q246672:mathematical object|Q7184903:abstract object;entity,object,abstract object,relation;entity,object,abstract object,relation',\n", - " 'Q374:vodka|Q56139:liquor|Q17562878:spirit drink|Q154:alcoholic beverage|Q40050:drink|Q2095:food|Q1194058:disposable product|Q2424752:product;Q13317:yogurt|Q26868224:fermented milk products, other than sour cream and cottage cheese|Q3506176:fermented milk product|Q147538:soft drink|Q2647467:non-alcoholic beverage|Q40050:drink|Q2095:food|Q1194058:disposable product|Q2424752:product;entity,object,physical object,product;entity,object,physical object,structure,action,property,product,phenomenon',\n", - " ';;;entity,object,abstract object,property,relation',\n", - " 'Q73792:charge|Q4373292:physical property|Q937228:property;Q11379:energy|Q107715:physical quantity|Q309314:quantity|Q937228:property;entity,object,abstract object,property,relation;entity,object,abstract object,property,relation',\n", - " 'Q73792:charge|Q4373292:physical property|Q937228:property;Q11465:velocity|Q107715:physical quantity|Q309314:quantity|Q937228:property;entity,object,abstract object,property,relation;entity,object,abstract object,property,relation']" - ] - }, - "execution_count": 180, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingSubsetCommonPaths" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "moderate-roller", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "diverse-clinton", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchDescription(qnode):\n", - " try:\n", - " return requests.get('http://ckg07:9200/wikidatadwd-augmented/_doc/'+qnode).json()['_source']['descriptions']['en'][0]\n", - " except:\n", - " return str(False)" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "id": "painful-craft", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d0eaf93e5d0947d9ae34fd4739b07cdd", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "trainingSubsetCommonPaths = []\n", - "for _,row in tqdm(trainingDF.iterrows()):\n", - " trainingSubsetCommonPaths.append((fetchDescription(row['node1']) + '&' + fetchDescription(row['node2']) + '&' + \\\n", - " fetchDescription(row['other_node1']) + '&' + fetchDescription(row['other_node2'])))" - ] - }, - { - "cell_type": "code", - "execution_count": 189, - "id": "front-consortium", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['device comprising an arrangement of buttons or keys used to input text in computers&data input device&keyboard of a typewriter&data input device',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&applied science devoted to the study of food&systematic enterprise that builds and organizes knowledge',\n", - " 'study of the philosophical, biological, social, and cultural aspects of human life.&systematic enterprise that builds and organizes knowledge&field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&language family&group of languages that belongs to the Sino-Tibetan family',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&group of Chinese languages primarily spoken in the whole city of Shanghai, Zhejiang province and the southern half of Jiangsu province, as well as bordering areas.&group of languages that belongs to the Sino-Tibetan family',\n", - " 'calcified whitish structure in humans\\\\ mouths used to break down food&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&False&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&any fibre derived from natural sources such as plants, animals or minerals&natural or synthetic substance made of long, thin filaments',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net',\n", - " 'False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots&False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&music performed in front of an audience&art form, and cultural activity, whose medium is sound',\n", - " 'use in music of microtones (intervals smaller than a semitone)&art form, and cultural activity, whose medium is sound&music genre&art form, and cultural activity, whose medium is sound',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&variante of tale that pertains to urbanity&prose fiction that can be either rooted in oral tradition or created by an author',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&denomination of Islam&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths',\n", - " 'type of quark&class of fundamental particles&type of quark&class of fundamental particles',\n", - " 'scientific discipline that studies cells&science that studies living beings&academic discipline&science that studies living beings',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&atmosphere of astronomical objects outside our solar system&layer of gases surrounding a material body',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&right to use the dining facilities offered to the members (and possibly their guests, when accompanied by a member) of certain organisations such as universities, clubs, colleges and bodies such as the House of Lords, and the Hawks\\\\ Club&legal position allowing a person to require a certain thing from another person or other persons',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&False&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable',\n", - " 'designation for the sky in day&everything that is above the surface of the Earth&view of the starry sky to a respective season between twilight and a few hours after sunset&everything that is above the surface of the Earth',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&the study of the recording and retrieval of information&systematic enterprise that builds and organizes knowledge',\n", - " 'wine made from dark-colored grape varieties with coloring from the skin&alcoholic drink typically made from grapes&wine that is fermented without grape skin, with a yellowish color&alcoholic drink typically made from grapes',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&movement in political theology and political philosophy&political philosophy and movement',\n", - " 'physical property that quantifies an object\\\\s interaction with electric fields&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number',\n", - " 'False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&property of quarks and gluons that is related to the particles\\\\ strong interactions in the theory of quantum chromodynamics&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&keypad that appears on a \\\\Touch Tone\\\\ telephone&computer input device',\n", - " 'keyboard of a typewriter&data input device&electronic device that can read and output printed barcodes to a computer&device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&political position based on the interests and perspectives of social groups with which people identify&practice and theory of influencing other people, as in government',\n", - " 'applied science devoted to the study of food&systematic enterprise that builds and organizes knowledge&False&set of beliefs and practices for a group or community',\n", - " 'field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge&therapeutic method of treatment&health profession that aims to address the illnesses or injuries that limit a person\\\\s abilities to function in everyday lives',\n", - " 'study of the philosophical, biological, social, and cultural aspects of human life.&systematic enterprise that builds and organizes knowledge&field of accounting concerned with the summary, analysis and reporting of financial transactions related to a business&measurement, processing and communication of financial information about economic entities',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&False&East Asian language',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&dialect of English spoken in Nigeria&West Germanic language originating in England',\n", - " 'human organ&organ for the circulation of blood in animal circulatory systems&False&rigid organ that constitute part of the endoskeleton of vertebrates',\n", - " 'feature of the face&organ that smells and facilitates breathing&organ that serves as the center of the nervous system in apes and monkeys&organ that serves as the center of the nervous system in all vertebrate and most invertebrate animals',\n", - " 'False&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&False&essential respiration organ in many air-breathing animals',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&soft wood&fibrous material from trees or other plants',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&metal resistant to corrosion and oxidation in moist air, e.g. ruthenium, rhodium, palladium, silver, osmium, iridium, platinum, and gold&element, compound or alloy that is a good conductor of both electricity and heat',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&water sport&team sport played on a court with baskets on either end',\n", - " 'sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&game derived from association football adapted for play in an indoor arena&team sports that involve, to varying degrees, kicking a ball to score a goal',\n", - " 'team sport featuring constant motion, communication and bursts of explosiveness.&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&informal ad hoc variant of the game of cricket, played by people of all genders and all ages in gardens, back yards, on the street, in parks, carparks, beaches and any area not specifically intended for the purpose&team sport played with bats and balls',\n", - " 'False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots&tennis variant&racket sport played on a court bisected by a net',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&literary genre&written art form',\n", - " 'circulation of literature beyond its country of origin&written art form&dance performed by a single dancer&rhythmic movement of the body',\n", - " 'False&creative work in which pictures and text convey information such as narratives&False&visual artwork, surface artistically covered with paint',\n", - " 'music genre&art form, and cultural activity, whose medium is sound&use of digital technology to distribute or project motion pictures as opposed to the historical use of reels of motion picture film&art of film making and projection',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&literary genre&narrative text, normally of a substantial length and in the form of prose describing a fictional and sequential story',\n", - " 'False&publication type&blog on fashion&discussion or informational site published on the World Wide Web',\n", - " 'False&work comprising an ordered list of items&article that is published in news media&text that forms an independent part of a publication',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&Christian doctrine professed by the Roman Catholic Church&monotheistic religious group based on the belief of Jesus being the Son of God',\n", - " 'denomination of Islam&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadithsðnic religion of the Yao people in China, heavily based on Taoism since the 13th century, similar to the communitarian Taoism in the earliest Taoist movements in China proper&religious or philosophical tradition of Chinese origin',\n", - " 'False&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&modernized form of Buddhism&religion founded by the Buddha',\n", - " 'type of quark&class of fundamental particles&ion having a negative charge&atom or molecule in which the total number of electrons is not equal to the total number of protons, giving the atom a net positive or negative electrical charge',\n", - " 'type of quark&class of fundamental particles&class of ions&atom or molecule in which the total number of electrons is not equal to the total number of protons, giving the atom a net positive or negative electrical charge',\n", - " 'scientific discipline that studies cells&science that studies living beings&scientific study of minerals&study of the composition, structure, physical properties, and history of Earth\\\\s components, and the processes by which they are shaped',\n", - " 'field of physics that deals with the structure and behavior of atomic nuclei&study of matter and its motion, along with related concepts such as energy and force&subdiscipline within chemistry involving the scientific study of carbon-based compounds, hydrocarbons, and their derivatives&branch of physical science concerned with the composition, structure and properties of matter',\n", - " 'medical speciality dealing with the diseases of animals, animal welfare, etc.&field of study for diagnosing, treating and preventing disease&branch of psychology focused on personality&The scientific study of the way the human mind works and how it influences behaviour, or the influence of a particular person\\\\s character on their behaviour',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&wire made of iron&single, usually cylindrical, flexible strand or rod of metal',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&paint type&colored composition applied over a surface that dries as a solid film',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&atmospheric layer of Earth&atmospheric layer of Earth',\n", - " 'water-filled depression between coastal sand dunes&land area that is permanently or seasonally saturated with water&sub-continental land that is surrounded by water&contiguous area of land surrounded by ocean; large continuous area of land, either surrounded by sea or contiguous with another landmass',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&Ttx on shares transferred electronically without using a stock transfer form&method to impose financial charge or other levy upon a taxpayer by a government or functional equivalent',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&award for authors and literary associations&something given to a person or a group of people to recognize their merit or excellence',\n", - " 'land areas near the shore that are frequently or permanently covered by water&land area that is permanently or seasonally saturated with water&space separate from the rest of the residential garden&planned space set aside for the display, cultivation, and enjoyment of plants',\n", - " 'rock-like reefs, composed of dense aggregations of oysters&feature lying beneath the surface of the water&garden where flowers are grown and displayed&planned space set aside for the display, cultivation, and enjoyment of plants',\n", - " 'wine made from dark-colored grape varieties with coloring from the skin&alcoholic drink typically made from grapes&kind of beer&alcoholic drink',\n", - " 'wine that is fermented without grape skin, with a yellowish color&alcoholic drink typically made from grapes&Wikimedia disambiguation page&alcoholic drink',\n", - " 'False&distilled beverage&type of vodka flavored with raspberries&distilled alcoholic beverage',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&political ideology&political philosophy focused on retaining traditional social institutions',\n", - " 'movement in political theology and political philosophy&political philosophy and movement&nationalism based on the its activity on the internet&ideology and movement that promotes the interests of a particular nation (as in a group of people) especially with the aim of gaining and maintaining the nation\\\\s sovereignty (self-governance) over its homeland',\n", - " 'form of anarchism&political philosophy and movement&False&belief or attitude that some individuals, who form an elite, are those whose influence or authority is greater than that of others',\n", - " 'physical property that quantifies an object\\\\s interaction with electric fields&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&third in a set of four quantum numbers, distinguishes the orbitals available within a subshell, and is used to calculate the azimuthal component of the orientation of orbital in space¬ation for conserved quantities in physics and chemistry',\n", - " 'type of frequency&inverse of the period duration&Force that makes a moving body follow a curved path&influence that causes an object to change motion',\n", - " 'rate at which electric energy is transferred by an electric circuit&rate at which energy is transferred, used, or transformed&False&mass per volume',\n", - " 'average velocity attained by charged particles in a material due to electric field&rate of change of the position of an object as a function of time, and the direction of that change&potential and kinetic energy associated with the position and movement of a physical object&quantitative physical property transferred to objects to perform heating or work on them',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&False&output device for presentation of information in visual form',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&theatrical genre&collaborative form of performing and fine art',\n", - " 'field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge&False&scheduled publication containing news of events, articles, features, editorials, and advertising',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan familyðnic religion practiced by the Germanic peoples from the Iron Age until Christianisation&non-Abrahamic religion, or modern religious movement such as nature worship',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&Mythology that existed in the Korean Peninsula from ancient times.&stories of gods and fairies and fantastic creatures',\n", - " 'calcified whitish structure in humans\\\\ mouths used to break down food&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&False&False',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&False&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&railway station located below grade&railway facility where trains regularly stop to load or unload passengers and/or freight',\n", - " 'sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&type of artwork&visual artwork, surface artistically covered with paint',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&literary genre&narrative text, normally of a substantial length and in the form of prose describing a fictional and sequential story',\n", - " 'use in music of microtones (intervals smaller than a semitone)&art form, and cultural activity, whose medium is sound&article that is published in news media&text that forms an independent part of a publication',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&church that is the seat of a bishop of any of the Protestant churches&Christian church, which is seat of a bishop',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&Christian ethnoreligious Group&diaspora',\n", - " 'type of quark&class of fundamental particles&anion consisting of one atom&ion having a negative charge',\n", - " 'scientific discipline that studies cells&science that studies living beings&field of physics that deals with the structure and behavior of atomic nuclei&study of matter and its motion, along with related concepts such as energy and force',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&lidded container made from glass&cylindrical container',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&finely grained regolith on the Moon&natural body consisting of layers that are primarily composed of minerals',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&given a reference triangle, a coordinate system whose three coordinates are distances to each of the three vertices of the triangle&System for determining the position of a point by a tuple of scalars',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&A military victory determines the undisputed outcome of a war&above a gate is the word Invictus',\n", - " 'designation for the sky in day&everything that is above the surface of the Earth&False&planned space set aside for the display, cultivation, and enjoyment of plants',\n", - " 'view of the starry sky to a respective season between twilight and a few hours after sunset&everything that is above the surface of the Earth&time beyond 10 000 AD&time which has yet to occur',\n", - " 'type of vodka flavored with raspberries&distilled alcoholic beverage&False&dairy product',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&False&mathematical function that describes the probability of occurrence of different possible outcomes in an experiment',\n", - " 'property of quarks and gluons that is related to the particles\\\\ strong interactions in the theory of quantum chromodynamics&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&potential and kinetic energy associated with the position and movement of a physical object&quantitative physical property transferred to objects to perform heating or work on them',\n", - " 'False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&subclass of velocity&rate of change of the position of an object as a function of time, and the direction of that change',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&paint that air dries to a hard, usually glossy, finish, used for coating surfaces that are outdoors or otherwise subject to hard wear or variations in temperature&colored composition applied over a surface that dries as a solid film',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&deep blue colored glass with cobalt&amorphous solid that exhibits a glass transition when heated towards the liquid state',\n", - " 'study of the philosophical, biological, social, and cultural aspects of human life.&systematic enterprise that builds and organizes knowledge&organization or political movement leading a rebellion, or a non-violent social movement, against a colonial power or national government&type of group action',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&computer whose batteries use solar power&foldable portable personal computer for mobile use',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&False&material produced by twining, weaving, felting, knotting, or otherwise processing natural or synthetic fibers',\n", - " 'calcified whitish structure in humans\\\\ mouths used to break down food&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&narrative text, normally of a substantial length and in the form of prose describing a fictional and sequential story&a written text that can be published in printed or electronic form',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&Temporary or emergency government body/authority created when none exists&system or group of people governing an organized community, often a state',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&form of dictatorial military rule&autocratic form of government which is ruled by a sole leader',\n", - " 'False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots&stage of the English language from about the 12th through 15th centuries&West Germanic language originating in England',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&body exerting the executive power in France&system or group of people governing an organized community, often a state',\n", - " 'use in music of microtones (intervals smaller than a semitone)&art form, and cultural activity, whose medium is sound&False&undomesticated organisms that grow or live wild in an area without being introduced by humans',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&type of wood&fibrous material from trees or other plants',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&music that developed in literate cultures, replacing prehistoric music&art form, and cultural activity, whose medium is sound',\n", - " 'type of quark&class of fundamental particles&civilization in control of a planetary system&organized cultural society that encounters many communities, on a scale of a nation or human, as well as a system of development',\n", - " 'scientific discipline that studies cells&science that studies living beings&social movement seeking to change anti-fat bias in social attitudes&type of group action',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&type of financial institution&financial institution',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&False&material or object that produces a magnetic field',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&Wikimedia list article&undomesticated organisms that grow or live wild in an area without being introduced by humans',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&lands originally owned by the monarchy of the United Kingdom&permanently dedicated recreation area, often open to the public and generally characterized by natural, historic, or landscape features',\n", - " 'designation for the sky in day&everything that is above the surface of the Earth&collection of songs, poetry, dances etc. of China&cultural expressions of a particular group of people, consisting of legends, music, oral history, proverbs, jokes, popular beliefs, fairy tales, etc.',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&cultural movement&cultural movement that spanned the period roughly from the 14th to the 17th century',\n", - " 'wine made from dark-colored grape varieties with coloring from the skin&alcoholic drink typically made from grapes&dialect&West Germanic language originating in England',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&False&society\\\\s way of life within anthropology',\n", - " 'physical property that quantifies an object\\\\s interaction with electric fields&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&ritual and ceremonial mask of Sub-Saharan Africa&any full or partial face covering, whether ceremonial, protective, decorative, or used as disguise',\n", - " 'False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&flora and fauna of the Philippines&undomesticated organisms that grow or live wild in an area without being introduced by humans',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&False&investigation and reporting of events, issues and trends to a broad audience',\n", - " 'keyboard of a typewriter&data input device&ancient Egyptian funerary text&a written text that can be published in printed or electronic form',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&Expressive body of culture shared by a particular group.&cultural expressions of a particular group of people, consisting of legends, music, oral history, proverbs, jokes, popular beliefs, fairy tales, etc.',\n", - " 'applied science devoted to the study of food&systematic enterprise that builds and organizes knowledge&False&cultural movement that spanned the period roughly from the 14th to the 17th century',\n", - " 'field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge&infusion made from roasted barley grains&drink made from infusing boiling water with the leaves of the tea plant',\n", - " 'study of the philosophical, biological, social, and cultural aspects of human life.&systematic enterprise that builds and organizes knowledge&False&system or group of people governing an organized community, often a state',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&wildlife that can live or thrive in urban environments&undomesticated organisms that grow or live wild in an area without being introduced by humans',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&music genre&art form, and cultural activity, whose medium is sound',\n", - " 'human organ&organ for the circulation of blood in animal circulatory systems¤t issue that has to be reported&communication of selected information on current events',\n", - " 'feature of the face&organ that smells and facilitates breathing&drink made from infusing fruit and other material in hot water&drink made from infusing boiling water with the leaves of the tea plant',\n", - " 'False&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&reference book containing an alphabetical list of slang&collection of words and their meanings',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&New model of banks initiative by Reserve Bank of India&financial institution',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&False&cultural expressions of a particular group of people, consisting of legends, music, oral history, proverbs, jokes, popular beliefs, fairy tales, etc.',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&False&interaction among people in which they create, share, and/or exchange information and ideas in virtual communities and networks',\n", - " 'sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&economy with an increased emphasis on informational activities and information industry&area of the production, distribution and trade, as well as consumption of goods and services by different agents',\n", - " 'team sport featuring constant motion, communication and bursts of explosiveness.&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&drink made from sepals of Hibiscus sabdariffa&drink made from infusing boiling water with the leaves of the tea plant',\n", - " 'False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots&False&collection of words and their meanings',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&syrup usually made from the xylem sap of sugar maple, red maple, or black maple trees&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'circulation of literature beyond its country of origin&written art form&birds that live on or around water&class of tetrapods',\n", - " 'False&creative work in which pictures and text convey information such as narratives&type of garbage&unwanted or unusable material',\n", - " 'music genre&art form, and cultural activity, whose medium is sound&painted decoration or scene applied to a prepared wall or ceiling surface&visual artwork, surface artistically covered with paint',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&coffee brewing method originating from Turkey&brewed beverage prepared from roasted coffee seeds',\n", - " 'False&publication type&aggregate of past events from the beginning of recorded human history to the Early Middle Ages&past events and their tracks or records, studied by various branches of human sciences of history',\n", - " 'False&work comprising an ordered list of items&continental geography&science that studies the terrestrial surface, the societies that inhabit it and the territories, landscapes, places or regions that form it when interacting with each other',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&method of brewing coffee&brewed beverage prepared from roasted coffee seeds',\n", - " 'denomination of Islam&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&creation and maintenance of colonies by people from another territory&creation of an unequal relationship between states through domination',\n", - " 'False&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&type of writing tool&writing and drawing implement using liquid or paste ink',\n", - " 'type of quark&class of fundamental particles&insect which lives in the air or on land and breeds in water&class of arthropods',\n", - " 'type of quark&class of fundamental particles&bank that specializes in originating and/or servicing mortgage loans&financial institution',\n", - " 'scientific discipline that studies cells&science that studies living beings&box containing cigars&container (usually cuboidal) with at least one roughly rectangular cross-section',\n", - " 'field of physics that deals with the structure and behavior of atomic nuclei&study of matter and its motion, along with related concepts such as energy and force&Variety of coffee plant&brewed beverage prepared from roasted coffee seeds',\n", - " 'medical speciality dealing with the diseases of animals, animal welfare, etc.&field of study for diagnosing, treating and preventing disease&chocolate-flavored condiment&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&An economic system combining public and private production&area of the production, distribution and trade, as well as consumption of goods and services by different agents',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&fire lit at a campsite&rapid oxidation of a material',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&False&writing and drawing implement using liquid or paste ink',\n", - " 'water-filled depression between coastal sand dunes&land area that is permanently or seasonally saturated with water&False&science that studies the terrestrial surface, the societies that inhabit it and the territories, landscapes, places or regions that form it when interacting with each other',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&physical money&object or record accepted as payment',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&a pencil whose lead contains a dye so that its stroke is indelible&writing implement',\n", - " 'land areas near the shore that are frequently or permanently covered by water&land area that is permanently or seasonally saturated with water&type of private company&financial institution',\n", - " 'rock-like reefs, composed of dense aggregations of oysters&feature lying beneath the surface of the water&clean subterran source of water, rich in minerals and trace elements&chemical compound; main constituent of the fluids of most living organisms',\n", - " 'wine made from dark-colored grape varieties with coloring from the skin&alcoholic drink typically made from grapes&pattern of human activity and associated with the minority peoples of Russia&society\\\\s way of life within anthropology',\n", - " 'wine that is fermented without grape skin, with a yellowish color&alcoholic drink typically made from grapes&thin grade of paper used for printing books which have many pages&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'False&distilled beverage&material discarded as a byproduct of agriculture&unwanted or unusable material',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&False&perennial woody plant',\n", - " 'movement in political theology and political philosophy&political philosophy and movement&cellulose-based paper that is used in baking&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'form of anarchism&political philosophy and movement&False&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'physical property that quantifies an object\\\\s interaction with electric fields&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&head of state and head of government of the Republic of Cyprus&leader of a country or part of a country, usually in republics',\n", - " 'type of frequency&inverse of the period duration&a volcano considered unlikely to erupt again&natural, surface vent or fissure usually in a mountainous form',\n", - " 'rate at which electric energy is transferred by an electric circuit&rate at which energy is transferred, used, or transformed&False&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'average velocity attained by charged particles in a material due to electric field&rate of change of the position of an object as a function of time, and the direction of that change&False&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&subdiscipline within chemistry involving the scientific study of carbon-based compounds, hydrocarbons, and their derivatives&branch of physical science concerned with the composition, structure and properties of matter',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&False&writing implement',\n", - " 'field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge&water on the continents surface, rather than underground&chemical compound; main constituent of the fluids of most living organisms',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&False&outline of a strategy for achievement of an objective',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&branch of physiology and neuroscience&science of the function of living systems',\n", - " 'calcified whitish structure in humans\\\\ mouths used to break down food&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&positionرئيس الجمهوريه اليمنية&leader of a country or part of a country, usually in republics',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&electronically coded still image in video technology&data transmission unit',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&level of psychological well-being, or an absence of a mental disorder&state of physical, mental and social well-being in the absence of disease and infirmity',\n", - " 'sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&a recession that affects many countries around the world&business cycle contraction;\\xa0general slowdown in economic activity',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&tinplate container&container (usually cuboidal) with at least one roughly rectangular cross-section',\n", - " 'use in music of microtones (intervals smaller than a semitone)&art form, and cultural activity, whose medium is sound&compensation paid by an offender (usually a murderer) or their family to kin of the victim&object or record accepted as payment',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&pencil with lead of finely ground, highly compacted charcoal&writing implement',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&Overall health of the population of Denmark&state of physical, mental and social well-being in the absence of disease and infirmity',\n", - " 'type of quark&class of fundamental particles&Paper with security features&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'scientific discipline that studies cells&science that studies living beings&False&organized cultural society that encounters many communities, on a scale of a nation or human, as well as a system of development',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&recreational visitor attraction&permanently dedicated recreation area, often open to the public and generally characterized by natural, historic, or landscape features',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&article in an academic publication, usually peer reviewed&text that forms an independent part of a publication',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&water frozen into the solid state&chemical compound; main constituent of the fluids of most living organisms',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&False&organized cultural society that encounters many communities, on a scale of a nation or human, as well as a system of development',\n", - " 'designation for the sky in day&everything that is above the surface of the Earth&money given in a bribe&object or record accepted as payment',\n", - " 'view of the starry sky to a respective season between twilight and a few hours after sunset&everything that is above the surface of the Earth&culture of an area&society\\\\s way of life within anthropology',\n", - " 'type of vodka flavored with raspberries&distilled alcoholic beverage&False&permanently dedicated recreation area, often open to the public and generally characterized by natural, historic, or landscape features',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&False&type of rotor craft in which lift and thrust are supplied by rotors',\n", - " 'property of quarks and gluons that is related to the particles\\\\ strong interactions in the theory of quantum chromodynamics&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&type of paper&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&False&writing implement']" - ] - }, - "execution_count": 189, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingSubsetCommonPaths" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "upset-introduction", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "blank-weekend", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "alpine-cooperation", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "recent-algorithm", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "cordless-subdivision", - "metadata": {}, - "source": [ - "# Find Candidates" - ] - }, - { - "cell_type": "code", - "execution_count": 238, - "id": "historical-maryland", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'False'" - ] - }, - "execution_count": 238, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fetchDescription('Q1757352')" - ] - }, - { - "cell_type": "code", - "execution_count": 240, - "id": "composite-vienna", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "556d68601f09422292148ac709006b9a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/39 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
012
0Q3711805singular distributiondistribution concentrated on a set of measure ...
1Q7893853univariate distributionprobability distribution of only one random va...
2Q3258332Kent distributionprobability distribution on the two-dimensiona...
3Q16000505symmetric probability distributionprobability distribution which features a dens...
4Q670653marginal distributionprobability distribution of a subset (the \\mar...
5Q4889567Benktander Weibull distributionFalse
6Q7049201noncentral F-distributioncontinuous probability distribution
7Q21051291joint distribution of random variablesFalse
8Q3258268noncentral beta distributionFalse
9Q1472677heavy-tailed distributionprobability distributions whose tails are not ...
10Q6664772location-scale familyFalse
11Q7857491Tweedie distributionfamily of probability distributions
12Q917918continuous probability distributionprobability distribution which admits a cumula...
13Q2671311Rice distributionprobability distribution of the magnitude of a...
14Q85900768multimodal distributionprobability distribution whose density has two...
15Q3204440relativistic Breit–Wigner distributionprobability distribution
16Q3711786compound Poisson distributionFalse
17Q17157111mixture distributionprobability distribution
18Q7247759product distributionprobability distribution, in mathematics
19Q98098110board game tile distributiona distribution of game tiles and their scores ...
20Q1188504exponential familyprobablility distribution
21Q5421539exponentiated Weibull distributionFalse
22Q1417619Voigt profileprobability distribution often used in spectro...
23Q7604398statistical interferenceoverlap of multiple probability distributions
24Q7051758normal-inverse-gamma distributionfour-parameter family of multivariate continuo...
25Q2421579log-Laplace distributionprobability distribution
26Q26898117discrete probability distributionprobability distribution whose mass lies entir...
27Q5527846Gaussian q-distributionfamily of probability distributions
28Q3258303Benktander Gibrat distributionFalse
29Q3773214sampling distributionprobability distribution of the possible sampl...
30Q12345341Asymptotic distributionprobability distribution to which random varia...
31Q59394126Uniform distributionterm in probability theory
32Q1333358joint probability distributionprobability distribution which can feature mor...
33Q1934245stable distributiondistribution of variables which satisfies a st...
34Q5156926compound probability distributionFalse
35Q576072Student\\s t-distributionprobability distribution
36Q7051757Normal-inverse-Wishart distributionFalse
37Q255598bimodal distributionprobability distribution whose density has two...
38Q2300258conditional probability distributionFalse
\n", - "" - ], - "text/plain": [ - " 0 1 \\\n", - "0 Q3711805 singular distribution \n", - "1 Q7893853 univariate distribution \n", - "2 Q3258332 Kent distribution \n", - "3 Q16000505 symmetric probability distribution \n", - "4 Q670653 marginal distribution \n", - "5 Q4889567 Benktander Weibull distribution \n", - "6 Q7049201 noncentral F-distribution \n", - "7 Q21051291 joint distribution of random variables \n", - "8 Q3258268 noncentral beta distribution \n", - "9 Q1472677 heavy-tailed distribution \n", - "10 Q6664772 location-scale family \n", - "11 Q7857491 Tweedie distribution \n", - "12 Q917918 continuous probability distribution \n", - "13 Q2671311 Rice distribution \n", - "14 Q85900768 multimodal distribution \n", - "15 Q3204440 relativistic Breit–Wigner distribution \n", - "16 Q3711786 compound Poisson distribution \n", - "17 Q17157111 mixture distribution \n", - "18 Q7247759 product distribution \n", - "19 Q98098110 board game tile distribution \n", - "20 Q1188504 exponential family \n", - "21 Q5421539 exponentiated Weibull distribution \n", - "22 Q1417619 Voigt profile \n", - "23 Q7604398 statistical interference \n", - "24 Q7051758 normal-inverse-gamma distribution \n", - "25 Q2421579 log-Laplace distribution \n", - "26 Q26898117 discrete probability distribution \n", - "27 Q5527846 Gaussian q-distribution \n", - "28 Q3258303 Benktander Gibrat distribution \n", - "29 Q3773214 sampling distribution \n", - "30 Q12345341 Asymptotic distribution \n", - "31 Q59394126 Uniform distribution \n", - "32 Q1333358 joint probability distribution \n", - "33 Q1934245 stable distribution \n", - "34 Q5156926 compound probability distribution \n", - "35 Q576072 Student\\s t-distribution \n", - "36 Q7051757 Normal-inverse-Wishart distribution \n", - "37 Q255598 bimodal distribution \n", - "38 Q2300258 conditional probability distribution \n", - "\n", - " 2 \n", - "0 distribution concentrated on a set of measure ... \n", - "1 probability distribution of only one random va... \n", - "2 probability distribution on the two-dimensiona... \n", - "3 probability distribution which features a dens... \n", - "4 probability distribution of a subset (the \\mar... \n", - "5 False \n", - "6 continuous probability distribution \n", - "7 False \n", - "8 False \n", - "9 probability distributions whose tails are not ... \n", - "10 False \n", - "11 family of probability distributions \n", - "12 probability distribution which admits a cumula... \n", - "13 probability distribution of the magnitude of a... \n", - "14 probability distribution whose density has two... \n", - "15 probability distribution \n", - "16 False \n", - "17 probability distribution \n", - "18 probability distribution, in mathematics \n", - "19 a distribution of game tiles and their scores ... \n", - "20 probablility distribution \n", - "21 False \n", - "22 probability distribution often used in spectro... \n", - "23 overlap of multiple probability distributions \n", - "24 four-parameter family of multivariate continuo... \n", - "25 probability distribution \n", - "26 probability distribution whose mass lies entir... \n", - "27 family of probability distributions \n", - "28 False \n", - "29 probability distribution of the possible sampl... \n", - "30 probability distribution to which random varia... \n", - "31 term in probability theory \n", - "32 probability distribution which can feature mor... \n", - "33 distribution of variables which satisfies a st... \n", - "34 False \n", - "35 probability distribution \n", - "36 False \n", - "37 probability distribution whose density has two... \n", - "38 False " - ] - }, - "execution_count": 240, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "par_qnode = 'Q200726'\n", - "results = []\n", - "for child in tqdm(parent_child_dict[par_qnode]):\n", - " results.append((child, fetch_label(child), fetchDescription(child)))\n", - "pd.DataFrame(results).head(50)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "atlantic-milton", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opposed-regulation", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "liable-lincoln", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "encouraging-legend", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/.ipynb_checkpoints/Analysis Files Analyser-checkpoint.ipynb b/.ipynb_checkpoints/Analysis Files Analyser-checkpoint.ipynb deleted file mode 100644 index 8b82add..0000000 --- a/.ipynb_checkpoints/Analysis Files Analyser-checkpoint.ipynb +++ /dev/null @@ -1,1783 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "sound-better", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "affected-driving", - "metadata": {}, - "outputs": [], - "source": [ - "def findMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['Embedding']\n", - " basis = row['Basis']\n", - " newAcc = row['New Acc']\n", - " oldAcc = row['Old Acc']\n", - " iteration = row['Iteration Num']\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if newAcc > embDict[emb]['maxNewAcc'] or (newAcc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " if iteration == 1:\n", - " embDict[emb]['oldAcc'] = oldAcc\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list(), embDict[emb]['oldAcc'], embDict[emb]['maxRow']['New Acc'] - embDict[emb]['oldAcc']])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "numerous-local", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...15161718192021222324
0text_7_props19k_childPar2True157.26744257.2674420.0000003440.325000...0.3333330.750.4615380.2105260.0388350.06557412.082148057.2674420.000000
1text_2_props19k_2_class2True156.68604756.104651-0.5813953440.292683...0.2888890.650.4000000.2105260.0388350.06557487.920485056.686047-0.581395
2complex19k_childPar1True367.15116368.0232560.8720933440.916667...0.9230770.600.7272730.5057470.4271840.46315818.160508060.1744197.848837
3transe19k_class_childPar1True163.66279167.7325584.0697673440.900000...0.8125000.650.7222220.5116280.2135920.3013703.838469063.6627914.069767
4abstract19k_class_childPar2True163.95348864.2441860.2906983440.461538...0.4687500.750.5769230.6666670.0388350.0733944.033524063.9534880.290698
5abstract_first_sent19k_class_siblings2True165.69767465.6976740.0000003440.500000...0.5200000.650.5777780.7000000.0679610.12389419.390705065.6976740.000000
\n", - "

6 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 \\\n", - "0 text_7_props 19k_childPar 2 True 1 57.267442 \n", - "1 text_2_props 19k_2_class 2 True 1 56.686047 \n", - "2 complex 19k_childPar 1 True 3 67.151163 \n", - "3 transe 19k_class_childPar 1 True 1 63.662791 \n", - "4 abstract 19k_class_childPar 2 True 1 63.953488 \n", - "5 abstract_first_sent 19k_class_siblings 2 True 1 65.697674 \n", - "\n", - " 6 7 8 9 ... 15 16 17 \\\n", - "0 57.267442 0.000000 344 0.325000 ... 0.333333 0.75 0.461538 \n", - "1 56.104651 -0.581395 344 0.292683 ... 0.288889 0.65 0.400000 \n", - "2 68.023256 0.872093 344 0.916667 ... 0.923077 0.60 0.727273 \n", - "3 67.732558 4.069767 344 0.900000 ... 0.812500 0.65 0.722222 \n", - "4 64.244186 0.290698 344 0.461538 ... 0.468750 0.75 0.576923 \n", - "5 65.697674 0.000000 344 0.500000 ... 0.520000 0.65 0.577778 \n", - "\n", - " 18 19 20 21 22 23 24 \n", - "0 0.210526 0.038835 0.065574 12.082148 0 57.267442 0.000000 \n", - "1 0.210526 0.038835 0.065574 87.920485 0 56.686047 -0.581395 \n", - "2 0.505747 0.427184 0.463158 18.160508 0 60.174419 7.848837 \n", - "3 0.511628 0.213592 0.301370 3.838469 0 63.662791 4.069767 \n", - "4 0.666667 0.038835 0.073394 4.033524 0 63.953488 0.290698 \n", - "5 0.700000 0.067961 0.123894 19.390705 0 65.697674 0.000000 \n", - "\n", - "[6 rows x 25 columns]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unsupSumm = pd.read_csv('../data/retrofitting/retro_test_Sept_21_2021.csv')\n", - "findMaximals(unsupSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "disciplinary-pioneer", - "metadata": {}, - "outputs": [], - "source": [ - "def findPrecRecIMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['Embedding']\n", - " basis = row['Basis']\n", - " newAcc = row['New I F1-Score']\n", - " oldAcc = row['Old I F1-Score']\n", - " iteration = row['Iteration Num']\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if newAcc > embDict[emb]['maxNewAcc'] or (newAcc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " if iteration == 1:\n", - " embDict[emb]['oldAcc'] = oldAcc\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list()[:5], embDict[emb]['oldAcc'], embDict[emb]['maxRow']['New I F1-Score'], embDict[emb]['maxRow']['New I F1-Score'] - embDict[emb]['oldAcc'], embDict[emb]['maxRow']['Old I Precision'], embDict[emb]['maxRow']['New I Precision'], embDict[emb]['maxRow']['Old I Recall'], embDict[emb]['maxRow']['New I Recall'], ])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "million-particular", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
01234567891011
0text_7_props19k_class_childPar2True10.4333330.4687500.0354170.3250000.3409090.650.75
1text_2_props19k_22True30.3934430.4307690.0373270.2954550.3111110.650.70
2complex19k_class_childPar1True30.6206900.7272730.1065830.9166670.9230770.550.60
3transe19k_childPar1True20.6000000.7567570.1567570.8461540.8235290.550.70
4abstract19k_class_childPar2True10.5217390.5769230.0551840.4615380.4687500.600.75
5abstract_first_sent19k_childPar2True30.5238100.6274510.1036410.4666670.5161290.700.80
\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 6 \\\n", - "0 text_7_props 19k_class_childPar 2 True 1 0.433333 0.468750 \n", - "1 text_2_props 19k_2 2 True 3 0.393443 0.430769 \n", - "2 complex 19k_class_childPar 1 True 3 0.620690 0.727273 \n", - "3 transe 19k_childPar 1 True 2 0.600000 0.756757 \n", - "4 abstract 19k_class_childPar 2 True 1 0.521739 0.576923 \n", - "5 abstract_first_sent 19k_childPar 2 True 3 0.523810 0.627451 \n", - "\n", - " 7 8 9 10 11 \n", - "0 0.035417 0.325000 0.340909 0.65 0.75 \n", - "1 0.037327 0.295455 0.311111 0.65 0.70 \n", - "2 0.106583 0.916667 0.923077 0.55 0.60 \n", - "3 0.156757 0.846154 0.823529 0.55 0.70 \n", - "4 0.055184 0.461538 0.468750 0.60 0.75 \n", - "5 0.103641 0.466667 0.516129 0.70 0.80 " - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unsupSumm = pd.read_csv('../data/retrofitting/retro_test_Sept_21_2021.csv')\n", - "findPrecRecIMaximals(unsupSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "smoking-burns", - "metadata": {}, - "outputs": [], - "source": [ - "def findPrecRecUMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['Embedding']\n", - " basis = row['Basis']\n", - " newAcc = row['New U F1-Score']\n", - " oldAcc = row['Old U F1-Score']\n", - " iteration = row['Iteration Num']\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if newAcc > embDict[emb]['maxNewAcc'] or (newAcc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " if iteration == 1:\n", - " embDict[emb]['oldAcc'] = oldAcc\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list()[:5], embDict[emb]['oldAcc'], embDict[emb]['maxRow']['New U F1-Score'], embDict[emb]['maxRow']['New U F1-Score'] - embDict[emb]['oldAcc'], embDict[emb]['maxRow']['Old U Precision'], embDict[emb]['maxRow']['New U Precision'], embDict[emb]['maxRow']['Old U Recall'], embDict[emb]['maxRow']['New U Recall'], ])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "premium-dakota", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
01234567891011
0text_7_props19k_2_class2True30.0655740.0655740.0000000.2105260.2105260.0388350.038835
1text_2_props19k_2_class2True10.0655740.0655740.0000000.2105260.2105260.0388350.038835
2complex19k_childPar2True20.5362320.5426360.0064040.4382720.4516130.6893200.679612
3transe19k_2_class2True30.3666670.3793100.0126440.4342110.4647890.3203880.320388
4abstract19k_2_class2True20.0892860.0909090.0016230.6250000.7142860.0485440.048544
5abstract_first_sent19k_class_siblings2True20.1551720.123894-0.0312790.7000000.7000000.0679610.067961
\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 6 \\\n", - "0 text_7_props 19k_2_class 2 True 3 0.065574 0.065574 \n", - "1 text_2_props 19k_2_class 2 True 1 0.065574 0.065574 \n", - "2 complex 19k_childPar 2 True 2 0.536232 0.542636 \n", - "3 transe 19k_2_class 2 True 3 0.366667 0.379310 \n", - "4 abstract 19k_2_class 2 True 2 0.089286 0.090909 \n", - "5 abstract_first_sent 19k_class_siblings 2 True 2 0.155172 0.123894 \n", - "\n", - " 7 8 9 10 11 \n", - "0 0.000000 0.210526 0.210526 0.038835 0.038835 \n", - "1 0.000000 0.210526 0.210526 0.038835 0.038835 \n", - "2 0.006404 0.438272 0.451613 0.689320 0.679612 \n", - "3 0.012644 0.434211 0.464789 0.320388 0.320388 \n", - "4 0.001623 0.625000 0.714286 0.048544 0.048544 \n", - "5 -0.031279 0.700000 0.700000 0.067961 0.067961 " - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unsupSumm = pd.read_csv('../data/retrofitting/retro_test_Sept_21_2021.csv')\n", - "findPrecRecUMaximals(unsupSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "checked-scotland", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...15161718192021222324
0text_7-text_2-comp-tran-abs-abs_first19k_2_class2True262.562.50.03440.416667...0.4166670.750.5357140.50.0291260.055046473.402399063.081395-0.581395
\n", - "

1 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 \\\n", - "0 text_7-text_2-comp-tran-abs-abs_first 19k_2_class 2 True 2 62.5 \n", - "\n", - " 6 7 8 9 ... 15 16 17 18 19 \\\n", - "0 62.5 0.0 344 0.416667 ... 0.416667 0.75 0.535714 0.5 0.029126 \n", - "\n", - " 20 21 22 23 24 \n", - "0 0.055046 473.402399 0 63.081395 -0.581395 \n", - "\n", - "[1 rows x 25 columns]" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "concatSumm = pd.read_csv('../data/retrofitting/retro_concat_Sep_21_2021.csv')\n", - "findMaximals(concatSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "greater-plant", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...19202122232425262728
0text_7_props19k_class_siblings2True176.33489373.079537-3.25535650837NaN...NaNNaN0.3780920.4056540.7687940.735391129.360480076.334893-3.255356
1text_2_props19k_class_siblings2True176.46491073.318887-3.14602350837NaN...NaNNaN0.3448760.3738520.7705820.738268131.612632076.464910-3.146023
2complex19k_class_siblings2True192.93868592.425511-0.51317450666NaN...NaNNaN0.0621910.0664310.9416440.936380104.645769092.938685-0.513174
3transe19k_class_siblings2True192.01477589.904950-2.10982550666NaN...NaNNaN0.1314490.1462900.9312960.909689100.077391092.014775-2.109825
4abstract19k_class_siblings2True193.09825291.391283-1.70696920695NaN...NaNNaN0.0713780.0777390.9431330.92573242.654327093.098252-1.706969
5abstract_first_sent19k_class_siblings2True194.56291693.337602-1.22531420695NaN...NaNNaN0.0650180.0692580.9580760.94559042.566209094.562916-1.225314
\n", - "

6 rows × 29 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 \\\n", - "0 text_7_props 19k_class_siblings 2 True 1 76.334893 \n", - "1 text_2_props 19k_class_siblings 2 True 1 76.464910 \n", - "2 complex 19k_class_siblings 2 True 1 92.938685 \n", - "3 transe 19k_class_siblings 2 True 1 92.014775 \n", - "4 abstract 19k_class_siblings 2 True 1 93.098252 \n", - "5 abstract_first_sent 19k_class_siblings 2 True 1 94.562916 \n", - "\n", - " 6 7 8 9 ... 19 20 21 22 23 \\\n", - "0 73.079537 -3.255356 50837 NaN ... NaN NaN 0.378092 0.405654 0.768794 \n", - "1 73.318887 -3.146023 50837 NaN ... NaN NaN 0.344876 0.373852 0.770582 \n", - "2 92.425511 -0.513174 50666 NaN ... NaN NaN 0.062191 0.066431 0.941644 \n", - "3 89.904950 -2.109825 50666 NaN ... NaN NaN 0.131449 0.146290 0.931296 \n", - "4 91.391283 -1.706969 20695 NaN ... NaN NaN 0.071378 0.077739 0.943133 \n", - "5 93.337602 -1.225314 20695 NaN ... NaN NaN 0.065018 0.069258 0.958076 \n", - "\n", - " 24 25 26 27 28 \n", - "0 0.735391 129.360480 0 76.334893 -3.255356 \n", - "1 0.738268 131.612632 0 76.464910 -3.146023 \n", - "2 0.936380 104.645769 0 92.938685 -0.513174 \n", - "3 0.909689 100.077391 0 92.014775 -2.109825 \n", - "4 0.925732 42.654327 0 93.098252 -1.706969 \n", - "5 0.945590 42.566209 0 94.562916 -1.225314 \n", - "\n", - "[6 rows x 29 columns]" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "concatSumm = pd.read_csv('../data/retrofitting/retro_WikiCS_Sep_27_2021.csv')\n", - "findMaximals(concatSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "perfect-introduction", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...19202122232425262728
0text_7_props19k_2_class1True118.99152919.0076640.016136599NaN...NaNNaN0.9848280.9857470.0207440.02074445.268861018.9915290.016136
1text_2_props19k_2_class2True318.99152919.0076640.016136599NaN...NaNNaN0.9848280.9857470.0207440.020744281.146679018.9915290.016136
2complex19k_21True381.66196081.9201290.258169595NaN...NaNNaN0.0928740.0928740.9706460.973777152.884296081.3392500.580879
3transe19k_21True382.41226382.4768050.064542595NaN...NaNNaN0.0928740.0937930.9797460.980333152.751550082.1298910.346914
4abstract19k_2_class2True318.11214218.1121420.000000297NaN...NaNNaN0.9917240.9917240.0086110.00861172.580956118.1121420.000000
5abstract_first_sent19k_2_class2True318.10407418.1121420.008068297NaN...NaNNaN0.9917240.9917240.0085130.00861171.931216018.0879390.024203
\n", - "

6 rows × 29 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 6 \\\n", - "0 text_7_props 19k_2_class 1 True 1 18.991529 19.007664 \n", - "1 text_2_props 19k_2_class 2 True 3 18.991529 19.007664 \n", - "2 complex 19k_2 1 True 3 81.661960 81.920129 \n", - "3 transe 19k_2 1 True 3 82.412263 82.476805 \n", - "4 abstract 19k_2_class 2 True 3 18.112142 18.112142 \n", - "5 abstract_first_sent 19k_2_class 2 True 3 18.104074 18.112142 \n", - "\n", - " 7 8 9 ... 19 20 21 22 23 24 \\\n", - "0 0.016136 599 NaN ... NaN NaN 0.984828 0.985747 0.020744 0.020744 \n", - "1 0.016136 599 NaN ... NaN NaN 0.984828 0.985747 0.020744 0.020744 \n", - "2 0.258169 595 NaN ... NaN NaN 0.092874 0.092874 0.970646 0.973777 \n", - "3 0.064542 595 NaN ... NaN NaN 0.092874 0.093793 0.979746 0.980333 \n", - "4 0.000000 297 NaN ... NaN NaN 0.991724 0.991724 0.008611 0.008611 \n", - "5 0.008068 297 NaN ... NaN NaN 0.991724 0.991724 0.008513 0.008611 \n", - "\n", - " 25 26 27 28 \n", - "0 45.268861 0 18.991529 0.016136 \n", - "1 281.146679 0 18.991529 0.016136 \n", - "2 152.884296 0 81.339250 0.580879 \n", - "3 152.751550 0 82.129891 0.346914 \n", - "4 72.580956 1 18.112142 0.000000 \n", - "5 71.931216 0 18.087939 0.024203 \n", - "\n", - "[6 rows x 29 columns]" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "concatSumm = pd.read_csv('../data/retrofitting/retro_conceptNet_Sep_27_2021.csv')\n", - "findMaximals(concatSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fiscal-actress", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "accepted-species", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "subjective-italy", - "metadata": {}, - "outputs": [], - "source": [ - "def findSVMMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['emb']\n", - " basis = row['basis']\n", - " acc = row['Acc']\n", - " iteration = row['iteration']\n", - " if iteration == 0:\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': -1, 'maxRow': row, 'oldAcc': acc}\n", - " else:\n", - " embDict[emb] = {'maxNewAcc': embDict[emb]['maxNewAcc'], 'maxRow': embDict[emb]['maxRow'], 'oldAcc': acc}\n", - " else:\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': acc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if acc > embDict[emb]['maxNewAcc'] or (acc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': acc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list(), embDict[emb]['oldAcc'], embDict[emb]['maxRow']['Acc'] - embDict[emb]['oldAcc']])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "digital-nursery", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789
0text_7_props_19k_class_childPar_1_weighted19k_class_childPartext_7_propsTrue21score0.6943700.6800000.014370
1text_2_props_19k_class_childPar_2_weighted19k_class_childPartext_2_propsTrue22score0.6946220.6773110.017311
2complex_19k_2_class_2_weighted19k_2_classcomplexTrue22score0.6684870.674538-0.006050
3transe_19k_2_class_1_weighted19k_2_classtranseTrue21score0.6684030.674454-0.006050
4abstract_19k_class_siblings_2_weighted19k_class_siblingsabstractTrue22score0.7120170.6831930.028824
5abstract_first_sent_19k_2_2_weighted19k_2abstract_first_sentTrue12score0.7116810.714622-0.002941
\n", - "
" - ], - "text/plain": [ - " 0 1 \\\n", - "0 text_7_props_19k_class_childPar_1_weighted 19k_class_childPar \n", - "1 text_2_props_19k_class_childPar_2_weighted 19k_class_childPar \n", - "2 complex_19k_2_class_2_weighted 19k_2_class \n", - "3 transe_19k_2_class_1_weighted 19k_2_class \n", - "4 abstract_19k_class_siblings_2_weighted 19k_class_siblings \n", - "5 abstract_first_sent_19k_2_2_weighted 19k_2 \n", - "\n", - " 2 3 4 5 6 7 8 9 \n", - "0 text_7_props True 2 1 score 0.694370 0.680000 0.014370 \n", - "1 text_2_props True 2 2 score 0.694622 0.677311 0.017311 \n", - "2 complex True 2 2 score 0.668487 0.674538 -0.006050 \n", - "3 transe True 2 1 score 0.668403 0.674454 -0.006050 \n", - "4 abstract True 2 2 score 0.712017 0.683193 0.028824 \n", - "5 abstract_first_sent True 1 2 score 0.711681 0.714622 -0.002941 " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "svmSumm = pd.read_csv('../data/retrofitting/retro_SVM_Reg_test_Sept_21_2021.csv')\n", - "findSVMMaximals(svmSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "elementary-carrier", - "metadata": {}, - "outputs": [], - "source": [ - "def findSVMCombMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['emb_comb']\n", - " basis = row['basis']\n", - " acc = row['accuracy']\n", - " iteration = row['iteration']\n", - " if iteration == 0:\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': -1, 'maxRow': row, 'oldAcc': acc}\n", - " else:\n", - " embDict[emb] = {'maxNewAcc': embDict[emb]['maxNewAcc'], 'maxRow': embDict[emb]['maxRow'], 'oldAcc': acc}\n", - " else:\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': acc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if acc > embDict[emb]['maxNewAcc'] or (acc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': acc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list(), embDict[emb]['oldAcc'], embDict[emb]['maxRow']['accuracy'] - embDict[emb]['oldAcc']])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "sunset-bahrain", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789
14abstract_first_sent_19k_2_2_weighted19k_2text_2_props & abstract_first_sentTrue12score0.7265550.7178150.008739
37abstract_19k_class_siblings_2_weighted19k_class_siblingscomplex & transe & abstractTrue32score0.7263030.6799160.046387
44abstract_19k_2_class_1_weighted19k_2_classtext_7_props & text_2_props & transe & abstractTrue31score0.7240340.6973950.026639
45abstract_first_sent_19k_class_childPar_2_weighted19k_class_childPartext_7_props & text_2_props & transe & abstrac...True32score0.7210920.7147900.006303
49abstract_first_sent_19k_childPar_1_weighted19k_childPartext_7_props & complex & abstract & abstract_f...True11score0.7209240.6652940.055630
.................................
6text_2_props_19k_class_childPar_1_weighted19k_class_childPartext_7_props & text_2_propsTrue31score0.6943700.6742860.020084
20abstract_first_sent_19k_class_siblings_2_weighted19k_class_siblingsabstract & abstract_first_sentTrue32score0.6914290.6828570.008571
15transe_19k_siblings_2_weighted19k_siblingscomplex & transeTrue12score0.6686550.6626890.005966
2complex_19k_2_class_2_weighted19k_2_classcomplexTrue32score0.6684870.674538-0.006050
3transe_19k_2_class_1_weighted19k_2_classtranseTrue31score0.6684030.674454-0.006050
\n", - "

63 rows × 10 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 \\\n", - "14 abstract_first_sent_19k_2_2_weighted 19k_2 \n", - "37 abstract_19k_class_siblings_2_weighted 19k_class_siblings \n", - "44 abstract_19k_2_class_1_weighted 19k_2_class \n", - "45 abstract_first_sent_19k_class_childPar_2_weighted 19k_class_childPar \n", - "49 abstract_first_sent_19k_childPar_1_weighted 19k_childPar \n", - ".. ... ... \n", - "6 text_2_props_19k_class_childPar_1_weighted 19k_class_childPar \n", - "20 abstract_first_sent_19k_class_siblings_2_weighted 19k_class_siblings \n", - "15 transe_19k_siblings_2_weighted 19k_siblings \n", - "2 complex_19k_2_class_2_weighted 19k_2_class \n", - "3 transe_19k_2_class_1_weighted 19k_2_class \n", - "\n", - " 2 3 4 5 6 \\\n", - "14 text_2_props & abstract_first_sent True 1 2 score \n", - "37 complex & transe & abstract True 3 2 score \n", - "44 text_7_props & text_2_props & transe & abstract True 3 1 score \n", - "45 text_7_props & text_2_props & transe & abstrac... True 3 2 score \n", - "49 text_7_props & complex & abstract & abstract_f... True 1 1 score \n", - ".. ... ... .. .. ... \n", - "6 text_7_props & text_2_props True 3 1 score \n", - "20 abstract & abstract_first_sent True 3 2 score \n", - "15 complex & transe True 1 2 score \n", - "2 complex True 3 2 score \n", - "3 transe True 3 1 score \n", - "\n", - " 7 8 9 \n", - "14 0.726555 0.717815 0.008739 \n", - "37 0.726303 0.679916 0.046387 \n", - "44 0.724034 0.697395 0.026639 \n", - "45 0.721092 0.714790 0.006303 \n", - "49 0.720924 0.665294 0.055630 \n", - ".. ... ... ... \n", - "6 0.694370 0.674286 0.020084 \n", - "20 0.691429 0.682857 0.008571 \n", - "15 0.668655 0.662689 0.005966 \n", - "2 0.668487 0.674538 -0.006050 \n", - "3 0.668403 0.674454 -0.006050 \n", - "\n", - "[63 rows x 10 columns]" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "svmCombSumm = pd.read_csv('../data/retrofitting/retro_SVM_Reg_comb_test_Sept_21_2021.csv')\n", - "findSVMCombMaximals(svmCombSumm).sort_values(by=[7], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "employed-dover", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/.ipynb_checkpoints/Evaluation Datasets-checkpoint.ipynb b/.ipynb_checkpoints/Evaluation Datasets-checkpoint.ipynb deleted file mode 100644 index 8fce4b9..0000000 --- a/.ipynb_checkpoints/Evaluation Datasets-checkpoint.ipynb +++ /dev/null @@ -1,1177 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 20, - "id": "ultimate-subscriber", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from tqdm.notebook import tqdm\n", - "import gzip\n", - "import os\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from matplotlib import pyplot\n", - "from itertools import combinations\n", - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "democratic-memorial", - "metadata": {}, - "outputs": [], - "source": [ - "LABELS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/labels.en.tsv.gz\"\n", - "ALL_EDGES_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/claims.tsv.gz\"" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "detailed-founder", - "metadata": {}, - "outputs": [], - "source": [ - "WORDSIM_OLD_SOURCE_FILE = \"../data/evaluation/source_files/wordsim_old.csv\"\n", - "WORDSIM_OLD_FINAL_FILE = \"../data/evaluation/wordsim_old.csv\"" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "perceived-robert", - "metadata": {}, - "outputs": [], - "source": [ - "CONCEPTNET_SOURCE_FILE = \"../data/evaluation/source_files/kgtk_conceptnet.tsv\"\n", - "CONCEPTNET_INTERM_FILE = \"../data/evaluation/intermediate_files/kgtk_conceptnet.csv\"\n", - "CONCEPTNET_FINAL_FILE = \"../data/evaluation/kgtk_conceptnet_final.csv\"" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "southeast-liberty", - "metadata": {}, - "outputs": [], - "source": [ - "WIKI_CS_SOURCE_FILE = '../data/evaluation/source_files/wikidata-cs-20200504.tsv'\n", - "WIKI_CS_INTERM_FILE = '../data/evaluation/intermediate_files/wikidata-cs_categorized.csv'\n", - "WIKI_CS_FINAL_FILE = '../data/evaluation/wikidata-cs_final.csv'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "caroline-initial", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "automatic-rotation", - "metadata": {}, - "outputs": [], - "source": [ - "def uniformize_dataset(wikiDF):\n", - " needed_size = len(wikiDF[wikiDF.category == 'I'])\n", - " M_sampled_set = wikiDF[wikiDF.category == 'M'].sample(needed_size, random_state=13)\n", - " subset = wikiDF[wikiDF.category == 'M']\n", - " mainset = wikiDF\n", - " \n", - " mainset_pairs = set([(row['word1_kg_id'], row['word2_kg_id']) for _,row in mainset.iterrows()])\n", - " nodes = set([row['word1_kg_id'] for _,row in subset.iterrows()] \n", - " + [row['word2_kg_id'] for _,row in subset.iterrows()])\n", - " node_label_mappings = {row['word1_kg_id']: row['node1;label'] for _, row in subset.iterrows()}\n", - " node_label_mappings.update({row['word2_kg_id']: row['node2;label'] for _, row in subset.iterrows()})\n", - " \n", - " all_pairs = set([pair for pair in random.sample(list(combinations(list(nodes), 2)), 10*needed_size)])\n", - " removed_pairs = set()\n", - "\n", - " first_line = True\n", - " \n", - " with gzip.open(ALL_EDGES_FILE, 'r') as claims_file:\n", - " for line in tqdm(claims_file, total=491297976): #, total=1034927835):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.decode(\"utf-8\").strip().split('\\t')\n", - " curr_pair = (line[1], line[3])\n", - " if curr_pair in all_pairs:\n", - " removed_pairs.add(curr_pair)\n", - " newDF = []\n", - " count = 0\n", - " \n", - " for pair in all_pairs - removed_pairs - mainset_pairs:\n", - " if pair is None or pair[0] is None or pair[1] is None:\n", - " continue\n", - " try:\n", - " newDF.append((pair[0], pair[1], 'U', node_label_mappings.get(pair[0],\"\"), node_label_mappings.get(pair[1],\"\"), None, None, None, None, None))\n", - " count += 1\n", - " if count == needed_size:\n", - " break\n", - " except:\n", - " print(f\"Error while processing pair: {pair}\")\n", - " \n", - " return pd.concat([\n", - " wikiDF[wikiDF.category == 'I'],\n", - " M_sampled_set,\n", - " pd.DataFrame(newDF, columns=subset.columns)\n", - " ])" - ] - }, - { - "cell_type": "markdown", - "id": "found-correspondence", - "metadata": {}, - "source": [ - "# Wordsim" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "executed-guard", - "metadata": {}, - "outputs": [], - "source": [ - "old_wordsim_df = pd.read_csv(WORDSIM_OLD_SOURCE_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "consecutive-spelling", - "metadata": {}, - "outputs": [], - "source": [ - "old_wordsim_df['Avg'] = (10 - old_wordsim_df['Human (Mean)']) * 3 / 10 + 1" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "concrete-apple", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclassAvg
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN2.33920
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.0058512.76250
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.3936572.01250
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.2088123.38125
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.8886211.84375
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class Avg \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN 2.33920 \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 2.76250 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 2.01250 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 3.38125 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 1.84375 " - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "old_wordsim_df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "recreational-cuisine", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 349.000000\n", - "mean 2.784180\n", - "std 0.613491\n", - "min 1.000000\n", - "25% 2.387500\n", - "50% 2.818750\n", - "75% 3.287500\n", - "max 3.906250\n", - "Name: Avg, dtype: float64" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "old_wordsim_df.Avg.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "large-rover", - "metadata": {}, - "outputs": [], - "source": [ - "old_wordsim_df['category'] = old_wordsim_df.Avg.apply(lambda score: 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M')" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "searching-hollow", - "metadata": {}, - "outputs": [], - "source": [ - "old_wordsim_df.to_csv(WORDSIM_OLD_FINAL_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "otherwise-mozambique", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "accredited-consistency", - "metadata": {}, - "source": [ - "# ConceptNet" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "steady-mitchell", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "beb4ee57be0a42afaedfece6dac99064", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "No. of conceptNet nodes fetched: 1165190\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8bc3ec3c5db74a4eb8c6ba97d08a7a31", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "labelsMap = {}\n", - "with open(CONCEPTNET_SOURCE_FILE) as conceptFile:\n", - " firstLine = True\n", - " for line in tqdm(conceptFile):\n", - " if firstLine:\n", - " firstLine = False\n", - " continue\n", - " line = line.split('\\t')\n", - " labelsMap[line[3][1:-1]] = None\n", - " labelsMap[line[4][1:-1]] = None\n", - "print(\"No. of conceptNet nodes fetched: \",len(labelsMap))\n", - "with gzip.open(LABELS_FILE, 'r') as labelsFile:\n", - " firstLine = True\n", - " for line in tqdm(labelsFile):\n", - " if firstLine:\n", - " firstLine = False\n", - " continue\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " line[3] = line[3][1:-5]\n", - " qnode, label = line[1], line[3]\n", - "# print(qnode, label)\n", - " if label in labelsMap:\n", - " if labelsMap[label] == None:\n", - " labelsMap[label] = []\n", - " labelsMap[label].append(qnode)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "studied-pharmacology", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchQnode(label):\n", - " if pd.isna(label):\n", - " return None\n", - " label = label[1:-1]\n", - " if label not in labelsMap:\n", - " return None\n", - " else:\n", - " return labelsMap[label]" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "imperial-genetics", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/IPython/core/interactiveshell.py:3165: DtypeWarning: Columns (8) have mixed types.Specify dtype option on import or set low_memory=False.\n", - " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Concept Net dataset size reduced from 3423004 pairs to 99052 pairs\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":6: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF1['node1;qnode;len'] = conceptDF1['node1;qnode'].apply(len)\n", - ":7: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF1['node2;qnode;len'] = conceptDF1['node2;qnode'].apply(len)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Concept Net dataset size reduced from 99052 pairs to 2084 pairs by keeping only pairs which have one-one mapping with qnodes\n" - ] - }, - { - "data": { - "text/plain": [ - "related to 758\n", - "synonym 708\n", - "form of 219\n", - "etymologically related to 82\n", - "derived from 77\n", - "is a 63\n", - "has context 45\n", - "at location 29\n", - "antonym 15\n", - "manner of 15\n", - "similar to 15\n", - "part of 12\n", - "causes 9\n", - "distinct from 6\n", - "used for 5\n", - "receives action 4\n", - "has prerequisite 4\n", - "genus 2\n", - "has a 2\n", - "instance of 2\n", - "has subevent 2\n", - "capital 2\n", - "motivated by goal 2\n", - "has last subevent 1\n", - "has property 1\n", - "causes desire 1\n", - "genre 1\n", - "has first subevent 1\n", - "language 1\n", - "Name: relation;label, dtype: int64" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "conceptDF = pd.read_csv(CONCEPTNET_SOURCE_FILE, sep='\\t')\n", - "conceptDF['node1;qnode'] = conceptDF['node1;label'].apply(fetchQnode)\n", - "conceptDF['node2;qnode'] = conceptDF['node2;label'].apply(fetchQnode)\n", - "conceptDF1 = conceptDF[(~conceptDF['node1;qnode'].isna()) & (~conceptDF['node2;qnode'].isna())]\n", - "print(f\"Concept Net dataset size reduced from {len(conceptDF)} pairs to {len(conceptDF1)} pairs\")\n", - "conceptDF1['node1;qnode;len'] = conceptDF1['node1;qnode'].apply(len)\n", - "conceptDF1['node2;qnode;len'] = conceptDF1['node2;qnode'].apply(len)\n", - "conceptDF2 = conceptDF1[(conceptDF1['node1;qnode;len'] == 1) & (conceptDF1['node2;qnode;len'] == 1)]\n", - "print(f\"Concept Net dataset size reduced from {len(conceptDF1)} pairs to {len(conceptDF2)} pairs by keeping only pairs which have one-one mapping with qnodes\")\n", - "conceptDF2['relation;label'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "elder-final", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF2['category'] = conceptDF2['relation;label'].apply(lambda p: 'I' if p == 'synonym' or p == 'similar to' else 'M')\n", - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF2['word1_kg_id'] = conceptDF2['node1;qnode'].apply(lambda p: p[0])\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF2['word2_kg_id'] = conceptDF2['node2;qnode'].apply(lambda p: p[0])\n" - ] - } - ], - "source": [ - "conceptDF2['category'] = conceptDF2['relation;label'].apply(lambda p: 'I' if p == 'synonym' or p == 'similar to' else 'M')\n", - "conceptDF2['relation;label'].apply(lambda p: 'I' if p == 'synonym' or p == 'similar to' else 'M').value_counts()\n", - "conceptDF2['word1_kg_id'] = conceptDF2['node1;qnode'].apply(lambda p: p[0])\n", - "conceptDF2['word2_kg_id'] = conceptDF2['node2;qnode'].apply(lambda p: p[0])\n", - "conceptDF2[['word1_kg_id', 'word2_kg_id', 'category', 'node1;label', 'node2;label', 'relation', 'relation;label', 'relation;dimension', 'source', 'sentence']].to_csv(CONCEPTNET_INTERM_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "distinguished-mustang", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "18277bf62d5e4098a980327e5a94f8a4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/491297976 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idcategorynode1;labelnode2;labelrelationrelation;labelrelation;dimensionsourcesentence
1350Q29736947Q50414211Iarcobowed/r/SimilarTosimilar toNaNCN[[arco]] is similar to [[bowed]]
1351Q29782278Q12835706Iauxothallo/r/SimilarTosimilar toNaNCNNaN
1352Q50414211Q29736947Ibowedarco/r/SimilarTosimilar toNaNCN[[bowed]] is similar to [[arco]]
1353Q1146652Q12835706Idikethallo/r/SimilarTosimilar toNaNCNNaN
1354Q61504726Q3366001Iemptystripped/r/SimilarTosimilar toNaNCN[[empty]] is similar to [[stripped]]
.................................
2025Q190527Q2655953Ivalueprize/r/SynonymsynonymNaNCN[[value]] is a synonym of [[prize]]
2037Q1128240P3828Iwearyaweary/r/SynonymsynonymNaNCN[[weary]] is a synonym of [[aweary]]
2038Q1128240Q29713327Iwearytire/r/SynonymsynonymNaNCN[[weary]] is a synonym of [[tire]]
2045Q103859907Q213449Iwhippingbeating/r/SynonymsynonymNaNCN[[whipping]] is a synonym of [[beating]]
2059Q1128240Q97138958Iyearsdays/r/SynonymsynonymNaNCN[[years]] is a synonym of [[days]]
\n", - "

76 rows × 10 columns

\n", - "" - ], - "text/plain": [ - " word1_kg_id word2_kg_id category node1;label node2;label relation \\\n", - "1350 Q29736947 Q50414211 I arco bowed /r/SimilarTo \n", - "1351 Q29782278 Q12835706 I auxo thallo /r/SimilarTo \n", - "1352 Q50414211 Q29736947 I bowed arco /r/SimilarTo \n", - "1353 Q1146652 Q12835706 I dike thallo /r/SimilarTo \n", - "1354 Q61504726 Q3366001 I empty stripped /r/SimilarTo \n", - "... ... ... ... ... ... ... \n", - "2025 Q190527 Q2655953 I value prize /r/Synonym \n", - "2037 Q1128240 P3828 I weary aweary /r/Synonym \n", - "2038 Q1128240 Q29713327 I weary tire /r/Synonym \n", - "2045 Q103859907 Q213449 I whipping beating /r/Synonym \n", - "2059 Q1128240 Q97138958 I years days /r/Synonym \n", - "\n", - " relation;label relation;dimension source \\\n", - "1350 similar to NaN CN \n", - "1351 similar to NaN CN \n", - "1352 similar to NaN CN \n", - "1353 similar to NaN CN \n", - "1354 similar to NaN CN \n", - "... ... ... ... \n", - "2025 synonym NaN CN \n", - "2037 synonym NaN CN \n", - "2038 synonym NaN CN \n", - "2045 synonym NaN CN \n", - "2059 synonym NaN CN \n", - "\n", - " sentence \n", - "1350 [[arco]] is similar to [[bowed]] \n", - "1351 NaN \n", - "1352 [[bowed]] is similar to [[arco]] \n", - "1353 NaN \n", - "1354 [[empty]] is similar to [[stripped]] \n", - "... ... \n", - "2025 [[value]] is a synonym of [[prize]] \n", - "2037 [[weary]] is a synonym of [[aweary]] \n", - "2038 [[weary]] is a synonym of [[tire]] \n", - "2045 [[whipping]] is a synonym of [[beating]] \n", - "2059 [[years]] is a synonym of [[days]] \n", - "\n", - "[76 rows x 10 columns]" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "conceptnet_uniform_df[(conceptnet_uniform_df.category == 'I') & (conceptnet_uniform_df.word1_kg_id != conceptnet_uniform_df.word2_kg_id)].head(100)" - ] - }, - { - "cell_type": "markdown", - "id": "structural-league", - "metadata": {}, - "source": [ - "# Wiki-CS" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "incomplete-range", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "inheritance 72707\n", - "meronymy 6886\n", - "context 5541\n", - "distinctness 4934\n", - "utility 2243\n", - "antonymy 2184\n", - "ordering 2107\n", - "material 1426\n", - "synonymy 1070\n", - "properties 1049\n", - "derivation 540\n", - "causation 510\n", - "similarity 345\n", - "attribution 187\n", - "other 42\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF = pd.read_csv(WIKI_CS_SOURCE_FILE,sep='\\t')\n", - "mapper1 = {'/r/DistinctFrom': 'distinctness',\n", - " '/r/Antonym': 'antonymy',\n", - " '/r/Synonym': 'synonymy',\n", - " '/r/SimilarTo': 'similarity',\n", - " '/r/DerivedFrom': 'derivation',\n", - " '/r/IsA': 'inheritance',\n", - " '/r/PartOf': 'meronymy',\n", - " '/r/MadeOf': 'material',\n", - " '/r/CreatedBy': 'attribution',\n", - " '/r/UsedFor': 'utility',\n", - " '/r/HasProperty': 'properties',\n", - " '/r/Causes': 'causation',\n", - " '/r/HasPrerequisite': 'ordering',\n", - " '/r/HasContext': 'context',\n", - " '/r/RelatedTo': 'other'}\n", - "\n", - "wikiDF['dim'] = wikiDF['relation'].apply(lambda p: mapper1[p])\n", - "wikiDF['category'] = wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' or p == 'similarity' else 'M')\n", - "wikiDF['dim'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "practical-credits", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 100701\n", - "I 1070\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' else 'M').value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "agreed-strand", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 100110\n", - "I 1415\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF1 = wikiDF[wikiDF.apply(lambda p: p['node1'].startswith('Q') and p['node2'].startswith('Q'), axis=1)]\n", - "wikiDF1.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "secondary-episode", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF1.rename(columns={'node1':'word1_kg_id', 'node2':'word2_kg_id'})\n", - "wikiDF1[['word1_kg_id', 'word2_kg_id', 'category', 'node1;label', 'node2;label', 'relation', 'relation;label', 'relation;dimension', 'source', 'sentence']].to_csv(WIKI_CS_INTERM_FILE,index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "artificial-fantasy", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c0dd5091b52c44849cf5dbfd30090864", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/491297976 [00:00 ../output/text-embeddings/P279-text-embedding-7-props-missing-qnodes.tsv\"\n", - "os.system(q1 + \" \")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "worth-desperate", - "metadata": {}, - "outputs": [], - "source": [ - "text7_missingnodes = pd.read_csv(\"../output/text-embeddings/P279-text-embedding-7-props-missing-qnodes.tsv\", sep='\\t')\n", - "text7_missingnodes = text7_missingnodes[text7_missingnodes.property == 'text_embedding']" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "universal-alignment", - "metadata": {}, - "outputs": [], - "source": [ - "text7_missingnodes['value'] = text7_missingnodes['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "interested-phenomenon", - "metadata": {}, - "outputs": [], - "source": [ - "text7EmbDict = {row['node']: row['value'] for _,row in text7_missingnodes.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "lucky-windsor", - "metadata": {}, - "outputs": [], - "source": [ - "for key in text7EmbDict.keys():\n", - " if key not in text_emb_dict:\n", - " text_emb_dict[key] = text7EmbDict[key]" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "limited-present", - "metadata": {}, - "outputs": [], - "source": [ - "json.dump(text_emb_dict, open(TEXT_EMB_FINAL_FILE, 'w'))" - ] - }, - { - "cell_type": "markdown", - "id": "complex-mexico", - "metadata": {}, - "source": [ - "## Old technique follows" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "neural-gibson", - "metadata": {}, - "outputs": [], - "source": [ - "p279ChildPar = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_baremetal.csv')\n", - "p279QnodesList = list(set(p279ChildPar.node1.to_list() + p279ChildPar.node2.to_list()))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "instructional-weather", - "metadata": {}, - "outputs": [], - "source": [ - "missingNodes = allNodes - set(p279ChildPar.node1.to_list() + p279ChildPar.node2.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "specified-clear", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "37038" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingNodes)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "conditional-brooks", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6fb2da21d7cf4241a3e52ac132a7c534", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/38 [00:00 ../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - " print(cnt)\n", - " runCommCnt += 1\n", - " os.system(q1 + \" &\")\n", - " if runCommCnt % 15 == 0:\n", - " time.sleep(11*60)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "surprising-burning", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "for cnt in tqdm(range(1,290)):\n", - " if countFileLines(\"../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\") != 4097:\n", - " print(cnt)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bottom-lodge", - "metadata": {}, - "outputs": [], - "source": [ - "import time\n", - "from os.path import exists\n", - "\n", - "# roberta-large-nli-mean-tokens\n", - "runCommCnt = 0\n", - "for cnt in tqdm(range(252,290)):\n", - " if exists(\"../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\") and countFileLines(\"../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\") == 4097:\n", - " continue\n", - " q1 = \"\"\n", - "# if cnt % 10 == 0:\n", - "# q1 += \"sleep 20m; \"\n", - " q1 += \"~/miniconda3/envs/kgtkEnv2/bin/kgtk text-embedding -i ../data/Master_P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - " --model sentence-transformers/all-distilroberta-v1 \\\n", - " --property-labels-file ../data/labels.en.tsv --debug \\\n", - " --isa-properties P31 P279 \\\n", - " --save-embedding-sentence > ../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\"\n", - " print(cnt)\n", - " runCommCnt += 1\n", - " os.system(q1 + \" &\")\n", - " if runCommCnt % 15 == 0:\n", - " time.sleep(13*60)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "damaged-browse", - "metadata": {}, - "outputs": [], - "source": [ - "p279QnodesList = set(json.load(open('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_nodes.json')))" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "collective-april", - "metadata": {}, - "outputs": [], - "source": [ - "# temp = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-1.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "decent-yorkshire", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99738027text_embedding0.74755263,1.6350263,-0.73952675,1.0463063,-0....
1Q99738027embedding_sentencenight shift, work shift during nighttime hours...
2Q99228502text_embedding0.25261465,0.06285462,0.029052094,0.50796187,0...
3Q99228502embedding_sentenceavenue, thoroughfare named \\\"avenue\\\" is thoro...
4Q98970128text_embedding0.11887096,0.8598291,0.4446009,-0.5038472,-0.9...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99738027 text_embedding \n", - "1 Q99738027 embedding_sentence \n", - "2 Q99228502 text_embedding \n", - "3 Q99228502 embedding_sentence \n", - "4 Q98970128 text_embedding \n", - "\n", - " value \n", - "0 0.74755263,1.6350263,-0.73952675,1.0463063,-0.... \n", - "1 night shift, work shift during nighttime hours... \n", - "2 0.25261465,0.06285462,0.029052094,0.50796187,0... \n", - "3 avenue, thoroughfare named \\\"avenue\\\" is thoro... \n", - "4 0.11887096,0.8598291,0.4446009,-0.5038472,-0.9... " - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# temp.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "satisfactory-speech", - "metadata": {}, - "outputs": [], - "source": [ - "text2EmbArr = []\n", - "for i in tqdm(range(1, 290)):\n", - " if not(checkIfFileContainsLines('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-'+str(i)+'.tsv')):\n", - " continue\n", - " temp = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-'+str(i)+'.tsv', sep='\\t')\n", - " temp = temp[temp.property == 'text_embedding']\n", - " text2EmbArr.append(temp)\n", - "text2Emb = pd.concat(text2EmbArr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "unavailable-competition", - "metadata": {}, - "outputs": [], - "source": [ - "text2Emb.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "concerned-april", - "metadata": {}, - "outputs": [], - "source": [ - "text7EmbArr = []\n", - "for i in tqdm(range(1, 290)):\n", - " if not(checkIfFileContainsLines('../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-'+str(i)+'.tsv')):\n", - " continue\n", - " temp = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-'+str(i)+'.tsv', sep='\\t')\n", - " temp = temp[temp.property == 'text_embedding']\n", - " text7EmbArr.append(temp)\n", - "text7Emb = pd.concat(text7EmbArr)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "australian-enforcement", - "metadata": {}, - "outputs": [], - "source": [ - "text2Emb = text2Emb[text2Emb.node.apply(lambda p: p in allNodes)]\n", - "text7Emb = text7Emb[text7Emb.node.apply(lambda p: p in allNodes)]" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "closed-treatment", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "We have 2prop text embeddings for 278467 nodes and 7prop for 277587 nodes\n" - ] - } - ], - "source": [ - "print(f\"We have 2prop text embeddings for {len(text2Emb)} nodes and 7prop for {len(text7Emb)} nodes\")" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "duplicate-agency", - "metadata": {}, - "outputs": [], - "source": [ - "text2Emb['value'] = text2Emb['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "text7Emb['value'] = text7Emb['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "framed-third", - "metadata": {}, - "outputs": [], - "source": [ - "text2EmbDict = {row['node']: row['value'] for _,row in text2Emb.iterrows()}\n", - "text7EmbDict = {row['node']: row['value'] for _,row in text7Emb.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "peaceful-andrew", - "metadata": {}, - "outputs": [], - "source": [ - "json.dump(text2EmbDict, open('../data/Master_P279_dataset/embeddings/text_2_props_orig_embedding_dict.json', 'w'))\n", - "json.dump(text7EmbDict, open('../data/Master_P279_dataset/embeddings/text_7_props_orig_embedding_dict.json', 'w'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "considered-river", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sustained-playback", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "requested-state", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "suited-going", - "metadata": {}, - "source": [ - "# Abstract Embeddings Generation\n", - "\n", - "Downloaded short abstracts file from [DBPedia Short Abstracts - 2020.07.01](https://downloads.dbpedia.org/repo/dbpedia/text/short-abstracts/2020.07.01/short-abstracts_lang=en.ttl.bz2)\n", - "\n", - "Then, we extract the abstracts file from the bz2 file using: `bzip2 -d short-abstracts_lang=en.ttl.bz2`" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "former-editor", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d0038713a1604ccb9c2e5499615fbc43", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# cnt = 0\n", - "# p1s = []\n", - "# p11s = []\n", - "# p2s = []\n", - "# lines = []\n", - "# with open(DBPEDIA_SHORT_ABSTRACTS_TTL, 'r', encoding='utf-8') as f:\n", - "# for line in tqdm(f):\n", - "# p1 = line[:line.find(\" \")]\n", - "# p11 = p1[len(\"\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...P_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategoryembedding_cos_simResp_code
0Arafatpeace83D4NaN3U4...NaN3.60.5477232.12507.8750Q34211Q454U3.982734<Response [200]>
1Arafatterror93D4NaN3U4...NaN3.60.5477233.06256.9375Q34211Q13648784U3.969884<Response [200]>
2FBIfingerprint1093D4NaN4NaN3...NaN3.60.5477234.06255.9375Q8333Q178022U4.000000<Response [200]>
3FBIinvestigation1103U3U3U3...u3.00.0000005.06254.9375Q8333Q21004260M3.951077<Response [200]>
4HarvardYale1372S3S2S2...s2.20.4472144.87505.1250Q13371Q49112M1.264601<Response [200]>
\n", - "

5 rows × 22 columns

\n", - "" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... P_Dim Avg Stdev H_orig H_reversed word1_kg_id word2_kg_id \\\n", - "0 ... NaN 3.6 0.547723 2.1250 7.8750 Q34211 Q454 \n", - "1 ... NaN 3.6 0.547723 3.0625 6.9375 Q34211 Q13648784 \n", - "2 ... NaN 3.6 0.547723 4.0625 5.9375 Q8333 Q178022 \n", - "3 ... u 3.0 0.000000 5.0625 4.9375 Q8333 Q21004260 \n", - "4 ... s 2.2 0.447214 4.8750 5.1250 Q13371 Q49112 \n", - "\n", - " category embedding_cos_sim Resp_code \n", - "0 U 3.982734 \n", - "1 U 3.969884 \n", - "2 U 4.000000 \n", - "3 M 3.951077 \n", - "4 M 1.264601 \n", - "\n", - "[5 rows x 22 columns]" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "word_sim_class_sim_df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "operational-survival", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4899ff6e2e264789be04ed8d2b8ca6fd", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/349 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
embeddingcountCoverage Percentage
0complex23844899.815395
1transe23844899.815395
2text2238889100.000000
3text7238889100.000000
4abstract10582844.300072
5abstractFirstSent10582844.300072
\n", - "" - ], - "text/plain": [ - " embedding count Coverage Percentage\n", - "0 complex 238448 99.815395\n", - "1 transe 238448 99.815395\n", - "2 text2 238889 100.000000\n", - "3 text7 238889 100.000000\n", - "4 abstract 105828 44.300072\n", - "5 abstractFirstSent 105828 44.300072" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(summArr, columns=['embedding', 'count', 'Coverage Percentage'])" - ] - }, - { - "cell_type": "markdown", - "id": "changing-strategy", - "metadata": {}, - "source": [ - "# Embeddings correction" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "purple-raising", - "metadata": {}, - "outputs": [], - "source": [ - "masterEmbedDictMaster = {}\n", - "subsetEmbedDictMaster = {}" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "round-product", - "metadata": {}, - "outputs": [], - "source": [ - "masterEmbedKeys = ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent']\n", - "for key1 in masterEmbedKeys:\n", - " masterEmbedDictMaster[key1] = json.load(open('../data/Master_P279_dataset/embeddings/'+key1+'_orig_embedding_dict.json'))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "metallic-insulin", - "metadata": {}, - "outputs": [], - "source": [ - "subsetEmbedKeys = ['text_7props', 'text_2props', 'complex', 'transe', 'abstract', 'abstract_first_sent']\n", - "for key1 in subsetEmbedKeys:\n", - " subsetEmbedDictMaster[key1] = json.load(open('../data/orig_embeddings/'+key1+'_original_embeddings_dict.json'))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "assigned-parameter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "olympic-yemen", - "metadata": {}, - "outputs": [], - "source": [ - "wordsim_pairs = {(row['word1_kg_id'], row['word2_kg_id']) for _, row in wordSim353AnnotDF_New.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "welcome-disorder", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pair Coverage by text_7props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by text_2props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by complex embeddings created for 19k retrofitting: 342\n", - "Pair Coverage by transe embeddings created for 19k retrofitting: 342\n", - "Pair Coverage by abstract embeddings created for 19k retrofitting: 343\n", - "Pair Coverage by abstract_first_sent embeddings created for 19k retrofitting: 343\n" - ] - } - ], - "source": [ - "for key1 in subsetEmbedKeys:\n", - " print(f\"Pair Coverage by {key1} embeddings created for 19k retrofitting: {sum([row[0] in subsetEmbedDictMaster[key1] and row[1] in subsetEmbedDictMaster[key1] for row in wordsim_pairs])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "northern-psychiatry", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pair Coverage by old text_7_props embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old text_2_props embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old complex embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old transe embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old abstract embeddings created for 19k retrofitting: 183\n", - "Pair Coverage by old abstract_first_sent embeddings created for 19k retrofitting: 183\n" - ] - } - ], - "source": [ - "for key1 in masterEmbedKeys:\n", - " print(f\"Pair Coverage by old {key1} embeddings created for 19k retrofitting: {sum([row[0] in masterEmbedDictMaster[key1] and row[1] in masterEmbedDictMaster[key1] for row in wordsim_pairs])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "contrary-casino", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_set = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "alleged-polish", - "metadata": {}, - "outputs": [], - "source": [ - "from collections import defaultdict\n", - "masterEmbCorrections = defaultdict(list)\n", - "for node in wordSim353AnnotDF_New_set:\n", - " for i in range(len(masterEmbedKeys)):\n", - " if node not in masterEmbedDictMaster[masterEmbedKeys[i]] and node in wordSim353AnnotDF_New_set:\n", - " masterEmbCorrections[masterEmbedKeys[i]].append(node)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "periodic-buffer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['abstract', 'abstract_first_sent', 'text_7_props', 'text_2_props', 'complex', 'transe'])" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "masterEmbCorrections.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "awful-signal", - "metadata": {}, - "source": [ - "## Complex, Transe" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "exceptional-acting", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# correctedComplexEmb = {}\n", - "# correctedTranseEmb = {}\n", - "# for wordID in masterEmbCorrections['complex']:\n", - "# try:\n", - "# resp = requests.get(\"http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID).json()['_source']\n", - "# correctedComplexEmb[wordID] = [float(p) for p in resp['graph_embedding_complex'].split(',')]\n", - "# correctedTranseEmb[wordID] = [float(p) for p in resp['graph_embeddings_transe'].split(',')]\n", - "# except:\n", - "# print(\"Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "assigned-journey", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "51850ec9544547f293820bd9e94091f4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/42575933 [00:00 ../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-corrections.tsv\"\n", - "# print(q1)\n", - "os.system(q1 + \" &\")" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "cooked-vinyl", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "32512" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "q1 = \"kgtk text-embedding -i ../data/Master_P279_dataset/output/wikidataos.for.text-embedding-ext-corrections.tsv \\\n", - " --model roberta-large-nli-mean-tokens \\\n", - " --property-labels-file ../data/labels.en.tsv --debug \\\n", - " --isa-properties P31 P279 \\\n", - " --save-embedding-sentence > ../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-corrections.tsv\"\n", - "# print(q1)\n", - "os.system(q1 + \" &\")" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "static-failure", - "metadata": {}, - "outputs": [], - "source": [ - "corrected7Emb = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-corrections.tsv', sep='\\t')\n", - "corrected2Emb = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-corrections.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "spare-flexibility", - "metadata": {}, - "outputs": [], - "source": [ - "corrected7Emb = corrected7Emb[corrected7Emb.property == 'text_embedding']\n", - "corrected7Emb['value'] = corrected7Emb.value.apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "\n", - "corrected2Emb = corrected2Emb[corrected2Emb.property == 'text_embedding']\n", - "corrected2Emb['value'] = corrected2Emb.value.apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "id": "minute-oakland", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in corrected7Emb.iterrows():\n", - " masterEmbedDictMaster['text_7_props'][row['node']] = row['value']\n", - "for _, row in corrected2Emb.iterrows():\n", - " masterEmbedDictMaster['text_2_props'][row['node']] = row['value']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "documentary-fluid", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "analyzed-naples", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "psychological-brighton", - "metadata": {}, - "source": [ - "## Abstract" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "meaning-spanking", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DBPedia dataset has 5732949 records with unique 5732947 index values\n", - "There are 8472828 sitelinks present in the dataset corresponding to 8472828 unique node1s (Qxxx), 8401883 unique labels (text)\n" - ] - } - ], - "source": [ - "df1 = pd.read_csv(\"../data/short-abstracts_lang=en.csv\", skiprows=1, skipfooter=1, header=None, engine='python')\n", - "df1.columns = ['ignore', 'node1', 'url', 'ignore2', 'abstract']\n", - "df1 = df1.set_index('node1')\n", - "df1[df1.url.apply(lambda p: 'http://dbpedia.org/resource' not in p)]\n", - "print(f\"DBPedia dataset has {len(df1)} records with unique {df1.index.nunique()} index values\")\n", - "sitelinksDF = pd.read_csv(\"../data/sitelinks.en.tsv.gz\", sep='\\t')\n", - "sitelinksDF['trimmedNode2'] = sitelinksDF.node2.apply(lambda p: p.split(\"/\")[-1] if p.split(\"/\")[-1] != '' else p.split(\"/\")[-2])\n", - "sitelinksDF1 = sitelinksDF[sitelinksDF.label == 'wikipedia_sitelink']\n", - "sitelinksDF2 = sitelinksDF1.set_index('trimmedNode2')\n", - "print(f\"There are {len(sitelinksDF2)} sitelinks present in the dataset corresponding to {sitelinksDF2.node1.nunique()} unique node1s (Qxxx), {sitelinksDF2.index.nunique()} unique labels (text)\")\n", - "sitelinksDF2.loc[sitelinksDF2[sitelinksDF2.index.duplicated()].index]\n", - "masterEmbCorrections_abs_set = set(masterEmbCorrections['abstract'])\n", - "sitelinksDF2 = sitelinksDF2[sitelinksDF2.node1.apply(lambda p: p in masterEmbCorrections_abs_set)]" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "offensive-enclosure", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')\n", - "labelsDF = labelsDF[labelsDF.node1.apply(lambda p: p in masterEmbCorrections_abs_set)]\n", - "labelsDict = {row['node1']: row['node2'] for _, row in labelsDF.iterrows()}\n", - "descriptionsDF = pd.read_csv('../../wd-correctness/gdrive-kgtk-dump-2020-12-07/descriptions.en.tsv.gz', compression='gzip', sep='\\t')\n", - "descriptionsDF = descriptionsDF[descriptionsDF.node1.apply(lambda p: p in masterEmbCorrections_abs_set)]\n", - "descDict = {row['node1']: row['node2'] for _, row in descriptionsDF.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "better-tuner", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "From 58 Qnodes, there are 16 sitelink Qnodes which do not have a short abstract i.e 42 have a short abstract\n" - ] - } - ], - "source": [ - "sdf_set = set(sitelinksDF2.index.to_list())\n", - "df1 = df1[df1.index.map(lambda p: p in sdf_set)]\n", - "abstractsDF2 = sitelinksDF2.join(df1).reset_index()\n", - "print(f\"From {len(abstractsDF2)} Qnodes, there are {abstractsDF2.ignore2.isna().sum()} sitelink Qnodes which do not have a short abstract i.e {len(abstractsDF2) - abstractsDF2.ignore2.isna().sum()} have a short abstract\")\n", - "# abstractsDF2 = abstractsDF2[~abstractsDF2.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "invalid-fiction", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2['node1_label'] = abstractsDF2.node1.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else \"\")\n", - "abstractsDF2['node1_desc'] = abstractsDF2.node1.apply(lambda p: descDict[p][1:-4] if p in descDict else \"\")\n", - "def combineAbsLabDesc(row, parameter):\n", - " if not(pd.isna(row[parameter])) and row[parameter] != 'nan' and row[parameter] != \"\":\n", - " return row[parameter]\n", - " elif row['node1_label'] == \"\" and row['node1_desc'] == \"\":\n", - " return None\n", - " else:\n", - " return row['node1_label'] + ' ' + row['node1_desc']" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "opened-drink", - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.tokenize import sent_tokenize\n", - "abstractsDF2['abstract_firstSent'] = abstractsDF2.abstract.apply(lambda p: sent_tokenize(str(p))[0] if p else None)\n", - "abstractsDF2 = abstractsDF2.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "affected-reproduction", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2['abstract'] = abstractsDF2.apply(combineAbsLabDesc, axis=1, args=('abstract',))\n", - "abstractsDF2['abstract_firstSent'] = abstractsDF2.apply(combineAbsLabDesc, axis=1, args=('abstract_firstSent',))" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "actual-communication", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "58" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(abstractsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "quantitative-tumor", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2 = abstractsDF2[~abstractsDF2.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "turned-retail", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "58" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(abstractsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "heard-freedom", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2 = abstractsDF2.drop(columns=['index']).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "forty-southeast", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
level_0indextrimmedNode2idnode1labelnode2ignoreurlignore2abstractnode1_labelnode1_descabstract_firstSent
000LuxuriesQ10953913-wikipedia_sitelink-538fe3-0Q10953913wikipedia_sitelinkhttp://en.wikipedia.org/wiki/LuxuriesNaNNaNNaNluxuryBehavior, expenses or equipment that far...luxuryBehavior, expenses or equipment that far excee...nan
111PotatoQ10998-wikipedia_sitelink-56b85c-0Q10998wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Potato10709.0<http://dbpedia.org/resource/Potato><http://www.w3.org/2000/01/rdf-schema#comment>The potato is a root vegetable native to the A...potatospecies of plantThe potato is a root vegetable native to the A...
222MarsQ111-wikipedia_sitelink-9ff296-0Q111wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Mars1803088.0<http://dbpedia.org/resource/Mars><http://www.w3.org/2000/01/rdf-schema#comment>Mars is the fourth planet from the Sun and the...Marsfourth planet from the SunMars is the fourth planet from the Sun and the...
333DawnQ11326182-wikipedia_sitelink-ae2918-0Q11326182wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Dawn97544.0<http://dbpedia.org/resource/Dawn><http://www.w3.org/2000/01/rdf-schema#comment>Dawn is the time that marks the beginning of t...dawntime that marks the beginning of the twilight ...Dawn is the time that marks the beginning of t...
444Change_(philosophy)Q1150070-wikipedia_sitelink-81cf5f-0Q1150070wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Change_(philosophy)NaNNaNNaNchangeprocess, event or action that deviates f...changeprocess, event or action that deviates from th...nan
\n", - "
" - ], - "text/plain": [ - " level_0 index trimmedNode2 id \\\n", - "0 0 0 Luxuries Q10953913-wikipedia_sitelink-538fe3-0 \n", - "1 1 1 Potato Q10998-wikipedia_sitelink-56b85c-0 \n", - "2 2 2 Mars Q111-wikipedia_sitelink-9ff296-0 \n", - "3 3 3 Dawn Q11326182-wikipedia_sitelink-ae2918-0 \n", - "4 4 4 Change_(philosophy) Q1150070-wikipedia_sitelink-81cf5f-0 \n", - "\n", - " node1 label \\\n", - "0 Q10953913 wikipedia_sitelink \n", - "1 Q10998 wikipedia_sitelink \n", - "2 Q111 wikipedia_sitelink \n", - "3 Q11326182 wikipedia_sitelink \n", - "4 Q1150070 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "0 http://en.wikipedia.org/wiki/Luxuries NaN \n", - "1 http://en.wikipedia.org/wiki/Potato 10709.0 \n", - "2 http://en.wikipedia.org/wiki/Mars 1803088.0 \n", - "3 http://en.wikipedia.org/wiki/Dawn 97544.0 \n", - "4 http://en.wikipedia.org/wiki/Change_(philosophy) NaN \n", - "\n", - " url \\\n", - "0 NaN \n", - "1 \n", - "2 \n", - "3 \n", - "4 NaN \n", - "\n", - " ignore2 \\\n", - "0 NaN \n", - "1 \n", - "2 \n", - "3 \n", - "4 NaN \n", - "\n", - " abstract node1_label \\\n", - "0 luxuryBehavior, expenses or equipment that far... luxury \n", - "1 The potato is a root vegetable native to the A... potato \n", - "2 Mars is the fourth planet from the Sun and the... Mars \n", - "3 Dawn is the time that marks the beginning of t... dawn \n", - "4 changeprocess, event or action that deviates f... change \n", - "\n", - " node1_desc \\\n", - "0 Behavior, expenses or equipment that far excee... \n", - "1 species of plant \n", - "2 fourth planet from the Sun \n", - "3 time that marks the beginning of the twilight ... \n", - "4 process, event or action that deviates from th... \n", - "\n", - " abstract_firstSent \n", - "0 nan \n", - "1 The potato is a root vegetable native to the A... \n", - "2 Mars is the fourth planet from the Sun and the... \n", - "3 Dawn is the time that marks the beginning of t... \n", - "4 nan " - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "id": "multiple-offer", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getIndSentEmbeddings(sent, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode([sent])\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "id": "sustainable-breakdown", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.6419482231140137 s\n", - "0.5260367393493652 s\n" - ] - } - ], - "source": [ - "abstractsDF2['abs_emb'] = pd.Series(list(getSentEmbeddings(abstractsDF2.abstract, 'bert-base-nli-mean-tokens')))\n", - "abstractsDF2['abs_firstSent_emb'] = pd.Series(list(getSentEmbeddings(abstractsDF2.abstract_firstSent, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "usual-selling", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in abstractsDF2.iterrows():\n", - " masterEmbedDictMaster['abstract'][row['node1']] = row['abs_emb']\n", - " masterEmbedDictMaster['abstract_first_sent'][row['node1']] = row['abs_firstSent_emb']" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "id": "promising-owner", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.37706875801086426 s\n", - "0.3001420497894287 s\n", - "0.370746374130249 s\n", - "0.6896324157714844 s\n", - "0.33779358863830566 s\n", - "0.3965473175048828 s\n", - "0.3200962543487549 s\n", - "0.3489806652069092 s\n", - "0.3413431644439697 s\n", - "0.32114505767822266 s\n", - "0.3811838626861572 s\n", - "0.34630370140075684 s\n", - "0.37790727615356445 s\n", - "0.26860570907592773 s\n", - "0.3601953983306885 s\n", - "0.3713240623474121 s\n", - "0.34137582778930664 s\n", - "0.33736181259155273 s\n", - "0.37023448944091797 s\n", - "0.31382036209106445 s\n", - "0.35136938095092773 s\n", - "0.37309718132019043 s\n", - "0.33543896675109863 s\n", - "0.38199710845947266 s\n", - "0.3740067481994629 s\n", - "0.3278031349182129 s\n", - "0.32283997535705566 s\n", - "0.34000563621520996 s\n", - "0.31502628326416016 s\n", - "0.34996771812438965 s\n", - "0.3871273994445801 s\n", - "0.3487060070037842 s\n", - "0.35172486305236816 s\n", - "0.3280646800994873 s\n", - "0.3519773483276367 s\n", - "0.3354451656341553 s\n", - "0.3633551597595215 s\n", - "0.3226644992828369 s\n", - "0.33882975578308105 s\n", - "0.36072254180908203 s\n", - "0.3833494186401367 s\n", - "0.2929043769836426 s\n", - "0.32875680923461914 s\n", - "0.36334872245788574 s\n", - "0.34148168563842773 s\n", - "0.3569769859313965 s\n", - "0.37468576431274414 s\n", - "0.399524450302124 s\n", - "0.3516504764556885 s\n", - "0.333402156829834 s\n", - "0.3851203918457031 s\n", - "0.34867238998413086 s\n", - "0.3607771396636963 s\n", - "0.38669753074645996 s\n", - "0.33347272872924805 s\n", - "0.36278390884399414 s\n", - "0.3602781295776367 s\n", - "0.3322322368621826 s\n", - "0.36807823181152344 s\n", - "0.3407411575317383 s\n", - "0.3837134838104248 s\n", - "0.38958096504211426 s\n", - "0.3332521915435791 s\n", - "0.3331124782562256 s\n", - "0.35001134872436523 s\n", - "0.32433485984802246 s\n", - "0.36315059661865234 s\n", - "0.34323906898498535 s\n", - "0.3112339973449707 s\n", - "0.30588483810424805 s\n", - "0.30704236030578613 s\n", - "0.31201720237731934 s\n" - ] - } - ], - "source": [ - "for node in masterEmbCorrections_abs_set:\n", - " if node not in masterEmbedDictMaster['abstract']:\n", - " if node in labelsDict and node in descDict:\n", - " masterEmbedDictMaster['abstract'][node] = getIndSentEmbeddings(labelsDict[node] + ' ' + descDict[node], 'bert-base-nli-mean-tokens')[0]\n", - " elif node in labelsDict:\n", - " masterEmbedDictMaster['abstract'][node] = getIndSentEmbeddings(labelsDict[node], 'bert-base-nli-mean-tokens')[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "id": "acquired-manitoba", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.32213783264160156 s\n", - "0.357776403427124 s\n", - "0.37949395179748535 s\n", - "0.35210466384887695 s\n", - "0.28103041648864746 s\n", - "0.3626406192779541 s\n", - "0.35109710693359375 s\n", - "0.34203338623046875 s\n", - "0.32386112213134766 s\n", - "0.3354361057281494 s\n", - "0.3063056468963623 s\n", - "0.3441202640533447 s\n", - "0.32869935035705566 s\n", - "0.42442989349365234 s\n", - "0.37239527702331543 s\n", - "0.38650059700012207 s\n", - "0.3191685676574707 s\n", - "0.3609733581542969 s\n", - "0.3115823268890381 s\n", - "0.36015963554382324 s\n", - "0.3338603973388672 s\n", - "0.3487727642059326 s\n", - "0.3250617980957031 s\n", - "0.35145044326782227 s\n", - "0.33944034576416016 s\n", - "0.31502413749694824 s\n", - "0.3611795902252197 s\n", - "0.35285043716430664 s\n", - "0.3575010299682617 s\n", - "0.304781436920166 s\n", - "0.4003562927246094 s\n", - "0.3315858840942383 s\n", - "0.36008763313293457 s\n", - "0.36187100410461426 s\n", - "0.32981252670288086 s\n", - "0.3378865718841553 s\n", - "0.31662964820861816 s\n", - "0.32143092155456543 s\n", - "0.3152732849121094 s\n", - "0.38222813606262207 s\n", - "0.3846759796142578 s\n", - "0.33153700828552246 s\n", - "0.37013936042785645 s\n", - "0.33272790908813477 s\n", - "0.29526567459106445 s\n", - "0.3218040466308594 s\n", - "0.3795340061187744 s\n", - "0.3576061725616455 s\n", - "0.35764193534851074 s\n", - "0.36867713928222656 s\n", - "0.3807237148284912 s\n", - "0.33266758918762207 s\n", - "0.33878159523010254 s\n", - "0.38289546966552734 s\n", - "0.38695788383483887 s\n", - "0.33074188232421875 s\n", - "0.32749414443969727 s\n", - "0.33860039710998535 s\n", - "0.36585235595703125 s\n", - "0.33011841773986816 s\n", - "0.3293156623840332 s\n", - "0.3491702079772949 s\n", - "0.3720529079437256 s\n", - "0.3078622817993164 s\n", - "0.3844125270843506 s\n", - "0.32468104362487793 s\n", - "0.3186354637145996 s\n", - "0.3438723087310791 s\n", - "0.36643028259277344 s\n", - "0.34279680252075195 s\n", - "0.3625810146331787 s\n", - "0.35865354537963867 s\n", - "0.3503103256225586 s\n", - "0.37160682678222656 s\n", - "0.3268110752105713 s\n", - "0.2564544677734375 s\n", - "0.37343525886535645 s\n", - "0.33298277854919434 s\n" - ] - } - ], - "source": [ - "for node in masterEmbCorrections_abs_set:\n", - " if node not in masterEmbedDictMaster['abstract_first_sent']:\n", - " if node in labelsDict and node in descDict:\n", - " masterEmbedDictMaster['abstract_first_sent'][node] = getIndSentEmbeddings(labelsDict[node] + ' ' + descDict[node], 'bert-base-nli-mean-tokens')[0]\n", - " elif node in labelsDict:\n", - " masterEmbedDictMaster['abstract_first_sent'][node] = getIndSentEmbeddings(labelsDict[node], 'bert-base-nli-mean-tokens')[0]" - ] - }, - { - "cell_type": "markdown", - "id": "veterinary-thailand", - "metadata": {}, - "source": [ - "## Updated coverage details" - ] - }, - { - "cell_type": "code", - "execution_count": 145, - "id": "intimate-campus", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pair Coverage by new text_7_props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by new text_2_props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by new complex embeddings created for 19k retrofitting: 343\n", - "Pair Coverage by new transe embeddings created for 19k retrofitting: 343\n", - "Pair Coverage by new abstract embeddings created for 19k retrofitting: 339\n", - "Pair Coverage by new abstract_first_sent embeddings created for 19k retrofitting: 339\n" - ] - } - ], - "source": [ - "for key1 in masterEmbedKeys:\n", - " print(f\"Pair Coverage by new {key1} embeddings created for 19k retrofitting: {sum([row[0] in masterEmbedDictMaster[key1] and row[1] in masterEmbedDictMaster[key1] for row in wordsim_pairs])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "lovely-token", - "metadata": {}, - "outputs": [], - "source": [ - "for key1 in masterEmbedDictMaster.keys():\n", - " for key2 in masterEmbedDictMaster[key1].keys():\n", - " if type(masterEmbedDictMaster[key1][key2]) != list:\n", - " masterEmbedDictMaster[key1][key2] = masterEmbedDictMaster[key1][key2].tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "exact-surfing", - "metadata": {}, - "outputs": [], - "source": [ - "for key1 in ['complex', 'transe']:\n", - " json.dump(masterEmbedDictMaster[key1], open('../data/Master_P279_dataset/embeddings/'+key1+'_orig_embedding_dict_updated.json', 'w'))" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "behavioral-spain", - "metadata": {}, - "outputs": [], - "source": [ - "def countOverlap(source, target):\n", - " cnt = 0\n", - " for key1 in source:\n", - " if key1 in target:\n", - " cnt += 1\n", - " return cnt\n", - "p279QnodesList = set(json.load(open('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_nodes.json')))" - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "id": "hawaiian-brain", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
embeddingtotal countoverlap countCoverage Percentage
0text_7_props238930238889100.000000
1text_2_props238930238889100.000000
2complex23850023844899.815395
3transe23850023844899.815395
4abstract10596410591644.336910
5abstract_first_sent10596410591644.336910
\n", - "
" - ], - "text/plain": [ - " embedding total count overlap count Coverage Percentage\n", - "0 text_7_props 238930 238889 100.000000\n", - "1 text_2_props 238930 238889 100.000000\n", - "2 complex 238500 238448 99.815395\n", - "3 transe 238500 238448 99.815395\n", - "4 abstract 105964 105916 44.336910\n", - "5 abstract_first_sent 105964 105916 44.336910" - ] - }, - "execution_count": 147, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summArr = []\n", - "for key1 in masterEmbedDictMaster:\n", - " cnt = countOverlap(masterEmbedDictMaster[key1], p279QnodesList)\n", - " summArr.append([key1, len(masterEmbedDictMaster[key1]), cnt, cnt / len(p279QnodesList) * 100])\n", - "pd.DataFrame(summArr, columns=['embedding', 'total count', 'overlap count', 'Coverage Percentage'])" - ] - }, - { - "cell_type": "markdown", - "id": "greater-namibia", - "metadata": {}, - "source": [ - "# Concatenated Embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "fifth-associate", - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "embedDictMaster = {}\n", - "for key1 in ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent']:\n", - " embedDictMaster[key1] = json.load(open('../data/Master_P279_dataset/embeddings/'+key1+'_orig_embedding_dict_updated.json'))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "egyptian-sentence", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "text_7_props : 1024\n", - "text_2_props : 1024\n", - "complex : 200\n", - "transe : 200\n", - "abstract : 768\n", - "abstract_first_sent : 768\n" - ] - } - ], - "source": [ - "def determineEmbeddingLengths(embedDictMaster):\n", - " for key in embedDictMaster.keys():\n", - " embed_size = len(next(iter(embedDictMaster[key].values())))\n", - " print(key,\": \",embed_size)\n", - "determineEmbeddingLengths(embedDictMaster)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "removable-point", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Added 11 corrections\n", - "Added 11 corrections\n", - "Added 0 corrections\n", - "Added 0 corrections\n", - "Added 4 corrections\n", - "Added 4 corrections\n" - ] - } - ], - "source": [ - "for key1 in embedDictMaster.keys():\n", - " embedDictMaster[key1] = deserializeEmbeddingDict(embedDictMaster[key1])\n", - "# Fill Coverage of embedding dictionaries\n", - "for key1 in embedDictMaster.keys():\n", - " embedDictMaster[key1] = fillCoverage(embedDictMaster[key1])" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "productive-indiana", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "text_7_props 238941\n", - "text_2_props 238941\n", - "complex 238941\n", - "transe 238941\n", - "abstract 238941\n", - "abstract_first_sent 238941\n" - ] - } - ], - "source": [ - "for key1 in embedDictMaster.keys():\n", - " print(key1, len(next(iter(embedDictMaster.values()))))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "mechanical-retro", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ready-financing", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "prime-hometown", - "metadata": {}, - "source": [ - "# Retrofitting sample" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "tight-civilization", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchNeighbours(df):\n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row.bert2SentSim))\n", - " \n", - " if row.node2 not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row.bert2SentSim))\n", - " print(max([len(neigh) for neigh in neighboursDict.values()]))\n", - " return neighboursDict" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "exciting-circle", - "metadata": {}, - "outputs": [], - "source": [ - "def retrofit(embedDict, neighDict, weightCase, weightAssignment=False):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - "# assert len(neighbs) == 1\n", - " if weightAssignment:\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " else:\n", - " sumOfSims = sum([1 for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] for neighb in neighbs])\n", - " \n", - " if weightCase == 1:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sumOfEmbs) / ((len(neighbs)) + sumOfSims)\n", - " elif weightCase == 2:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " elif weightCase == 0.5:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sumOfEmbs) / ((len(neighbs))**0.5 + sumOfSims)\n", - " else:\n", - " raise\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "hollywood-prisoner", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import classification_report\n", - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - "LABELS = ['I','U','M']\n", - "def fetchCorrelationResults(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "# print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - "# wordSim353AnnotDF_New2 = wordSim353AnnotDF_New\n", - " wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - " wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - " responseDict = {}\n", - " responseDict['wordSimMissingSet'] = wordSimMissingSet\n", - " responseDict['coveredPairs'] = len(wordSim353AnnotDF_New2)\n", - " responseDict['totalPairs'] = len(wordSim353AnnotDF_New)\n", - " \n", - "# wordSimMissingSet\n", - "# print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textOld'] == -1, 'textOld'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textOld'] != -1]['textOld'].mean()\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textNew'] == -1, 'textNew'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textNew'] != -1]['textNew'].mean()\n", - " \n", - " # Logic 1: Scale min,max value to 1,4 strictly\n", - "# min1, max1 = wordSim353AnnotDF_New['textOld'].min(), wordSim353AnnotDF_New['textOld'].max()\n", - "# min2, max2 = wordSim353AnnotDF_New['textNew'].min(), wordSim353AnnotDF_New['textNew'].max()\n", - "# wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * (p - min1) / (max1 - min1))\n", - "# wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * (p - min2) / (max2 - min2))\n", - " \n", - " # Logic 2: Scale abs value to 1,4 strictly\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * abs(p))\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * abs(p))\n", - "\n", - " \n", - "# print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "# print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " \n", - "# print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - "# print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " responseDict['KT_old_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_new_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_old_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['KT_new_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['old_acc'] = accuracy_score(wordSim353AnnotDF_New['textOld'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " responseDict['new_acc'] = accuracy_score(wordSim353AnnotDF_New['textNew'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " \n", - " responseDict['class_rep_old'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), output_dict=True)\n", - " responseDict['class_rep_new'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), output_dict=True)\n", - " \n", - " cm_old = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), labels=LABELS)\n", - " cm_new = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), labels=LABELS)\n", - " \n", - " responseDict['cm_old'] = cm_old\n", - " responseDict['cm_new'] = cm_new\n", - " \n", - " return responseDict" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "severe-explosion", - "metadata": {}, - "outputs": [], - "source": [ - "neighDictMaster, embedDictMaster = {}, {}" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "decreased-syndication", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "39218\n" - ] - } - ], - "source": [ - "neighDictMaster['19k_childPar'] = fetchNeighbours(p279ChildPar)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "rocky-criterion", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster['complex'] = complexEmb\n", - "embedDictMaster['transe'] = transeEmb" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "apparent-sapphire", - "metadata": {}, - "outputs": [], - "source": [ - "for key1 in embedDictMaster.keys():\n", - " for key2 in embedDictMaster[key1].keys():\n", - " embedDictMaster[key1][key2] = np.array(embedDictMaster[key1][key2])" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "precise-oxygen", - "metadata": {}, - "outputs": [], - "source": [ - "embList = list(embedDictMaster.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "identical-keyboard", - "metadata": {}, - "outputs": [], - "source": [ - "basisList = list(neighDictMaster.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "aging-flavor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['19k_childPar'])" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "neighDictMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "amended-remove", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDictMaster, responsesDictMaster = {}, {}" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "surgical-insurance", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7817a00dcf3c412b92a7c5ac75517168", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/1 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
EmbeddingBasisWeightWeightednessIteration NumOld AccNew AccIncreasePairs CoveredOld I Precision...Old U PrecisionOld U RecallOld U F1-ScoreNew I PrecisionNew I RecallNew I F1-ScoreNew U PrecisionNew U RecallNew U F1-ScoreRank
0complex19k_childPar1True160.75581464.2441863.4883722911.000000...0.4331210.6601940.5230771.0000000.400.5714290.4634150.5533980.5044252
20transe19k_childPar1True162.50000065.6976743.1976742910.888889...0.3970590.2621360.3157890.8333330.500.6250000.4500000.1747570.2517480
1complex19k_childPar1True264.24418667.1511632.9069772911.000000...0.4634150.5533980.5044251.0000000.500.6666670.4950500.4854370.4901964
11complex19k_childPar2True261.91860563.6627911.7441862911.000000...0.4444440.6601940.5312501.0000000.450.6206900.4589040.6504850.53815313
10complex19k_childPar2True160.75581461.9186051.1627912911.000000...0.4331210.6601940.5230771.0000000.400.5714290.4444440.6601940.53125012
2complex19k_childPar1True367.15116367.7325580.5813952911.000000...0.4950500.4854370.4901960.9090910.500.6451610.5119050.4174760.4598931
4complex19k_childPar1True567.15116367.7325580.5813952910.916667...0.4929580.3398060.4022990.9166670.550.6875000.5079370.3106800.3855425
36transe19k_childPar2True762.50000063.0813950.5813952910.846154...0.3518520.1844660.2420380.8461540.550.6666670.3653850.1844660.2451616
30transe19k_childPar2True162.50000063.0813950.5813952910.888889...0.3970590.2621360.3157890.9000000.450.6000000.4000000.2524270.30952417
22transe19k_childPar1True364.82558165.4069770.5813952910.750000...0.3939390.1262140.1911760.7500000.750.7500000.4000000.1165050.1804513
38transe19k_childPar2True963.08139563.3720930.2906982910.785714...0.3725490.1844660.2467530.7857140.550.6470590.3800000.1844660.2483668
33transe19k_childPar2True462.79069863.0813950.2906982910.900000...0.3833330.2233010.2822090.8461540.550.6666670.3750000.2038830.26415114
18complex19k_childPar2True963.08139563.0813950.0000002910.909091...0.4444440.5436890.4890830.9090910.500.6451610.4444440.5436890.48908319
37transe19k_childPar2True863.08139563.0813950.0000002910.846154...0.3653850.1844660.2451610.7857140.550.6470590.3725490.1844660.2467537
32transe19k_childPar2True362.79069862.7906980.0000002910.900000...0.3870970.2330100.2909090.9000000.450.6000000.3833330.2233010.28220912
23transe19k_childPar1True465.40697765.4069770.0000002910.750000...0.4000000.1165050.1804510.6521740.750.6976740.4444440.1165050.1846151
39transe19k_childPar2True1063.37209363.3720930.0000002910.785714...0.3800000.1844660.2483660.7857140.550.6470590.3800000.1844660.2483669
15complex19k_childPar2True663.66279163.6627910.0000002911.000000...0.4552240.5922330.5147681.0000000.450.6206900.4538460.5728160.50643817
14complex19k_childPar2True563.66279163.6627910.0000002911.000000...0.4571430.6213590.5267491.0000000.450.6206900.4552240.5922330.51476816
13complex19k_childPar2True463.66279163.6627910.0000002911.000000...0.4577460.6310680.5306121.0000000.450.6206900.4571430.6213590.52674915
12complex19k_childPar2True363.66279163.6627910.0000002911.000000...0.4589040.6504850.5381531.0000000.450.6206900.4577460.6310680.53061214
17complex19k_childPar2True863.37209363.081395-0.2906982910.909091...0.4488190.5533980.4956520.9090910.500.6451610.4444440.5436890.48908318
16complex19k_childPar2True763.66279163.372093-0.2906982911.000000...0.4538460.5728160.5064380.9090910.500.6451610.4488190.5533980.4956529
35transe19k_childPar2True662.79069862.500000-0.2906982910.846154...0.3636360.1941750.2531650.8461540.550.6666670.3518520.1844660.2420385
34transe19k_childPar2True563.08139562.790698-0.2906982910.846154...0.3750000.2038830.2641510.8461540.550.6666670.3636360.1941750.25316515
31transe19k_childPar2True263.08139562.790698-0.2906982910.900000...0.4000000.2524270.3095240.9000000.450.6000000.3870970.2330100.29090911
28transe19k_childPar1True960.75581460.465116-0.2906982910.394737...0.3684210.0679610.1147540.3658540.750.4918030.3888890.0679610.11570213
19complex19k_childPar2True1063.08139562.790698-0.2906982910.909091...0.4444440.5436890.4890830.9000000.450.6000000.4444440.5436890.48908310
26transe19k_childPar1True762.20930261.627907-0.5813952910.428571...0.4285710.0873790.1451610.4166670.750.5357140.4000000.0776700.1300814
29transe19k_childPar1True1060.46511659.883721-0.5813952910.365854...0.3888890.0679610.1157020.3333330.750.4615380.4117650.0679610.11666716
8complex19k_childPar1True965.11627964.534884-0.5813952910.785714...0.4423080.2233010.2967740.7857140.550.6470590.4166670.1941750.2649010
3complex19k_childPar1True467.73255867.151163-0.5813952910.909091...0.5119050.4174760.4598930.9166670.550.6875000.4929580.3398060.4022993
6complex19k_childPar1True766.56976765.988372-0.5813952910.916667...0.4754100.2815530.3536590.8461540.550.6666670.4642860.2524270.3270447
7complex19k_childPar1True865.98837265.116279-0.8720932910.846154...0.4642860.2524270.3270440.7857140.550.6470590.4423080.2233010.2967748
21transe19k_childPar1True265.69767464.825581-0.8720932910.833333...0.4500000.1747570.2517480.7500000.600.6666670.3939390.1262140.1911762
27transe19k_childPar1True861.62790760.755814-0.8720932910.416667...0.4000000.0776700.1300810.3947370.750.5172410.3684210.0679610.11475410
25transe19k_childPar1True663.37209362.209302-1.1627912910.468750...0.4545450.0970870.1600000.4285710.750.5454550.4285710.0873790.14516119
5complex19k_childPar1True667.73255866.569767-1.1627912910.916667...0.5079370.3106800.3855420.9166670.550.6875000.4754100.2815530.3536596
9complex19k_childPar1True1064.53488463.081395-1.4534882910.785714...0.4166670.1941750.2649010.6875000.550.6111110.3777780.1650490.22973011
24transe19k_childPar1True565.40697763.372093-2.0348842910.652174...0.4444440.1165050.1846150.4687500.750.5769230.4545450.0970870.16000018
\n", - "

40 rows × 22 columns

\n", - "" - ], - "text/plain": [ - " Embedding Basis Weight Weightedness Iteration Num Old Acc \\\n", - "0 complex 19k_childPar 1 True 1 60.755814 \n", - "20 transe 19k_childPar 1 True 1 62.500000 \n", - "1 complex 19k_childPar 1 True 2 64.244186 \n", - "11 complex 19k_childPar 2 True 2 61.918605 \n", - "10 complex 19k_childPar 2 True 1 60.755814 \n", - "2 complex 19k_childPar 1 True 3 67.151163 \n", - "4 complex 19k_childPar 1 True 5 67.151163 \n", - "36 transe 19k_childPar 2 True 7 62.500000 \n", - "30 transe 19k_childPar 2 True 1 62.500000 \n", - "22 transe 19k_childPar 1 True 3 64.825581 \n", - "38 transe 19k_childPar 2 True 9 63.081395 \n", - "33 transe 19k_childPar 2 True 4 62.790698 \n", - "18 complex 19k_childPar 2 True 9 63.081395 \n", - "37 transe 19k_childPar 2 True 8 63.081395 \n", - "32 transe 19k_childPar 2 True 3 62.790698 \n", - "23 transe 19k_childPar 1 True 4 65.406977 \n", - "39 transe 19k_childPar 2 True 10 63.372093 \n", - "15 complex 19k_childPar 2 True 6 63.662791 \n", - "14 complex 19k_childPar 2 True 5 63.662791 \n", - "13 complex 19k_childPar 2 True 4 63.662791 \n", - "12 complex 19k_childPar 2 True 3 63.662791 \n", - "17 complex 19k_childPar 2 True 8 63.372093 \n", - "16 complex 19k_childPar 2 True 7 63.662791 \n", - "35 transe 19k_childPar 2 True 6 62.790698 \n", - "34 transe 19k_childPar 2 True 5 63.081395 \n", - "31 transe 19k_childPar 2 True 2 63.081395 \n", - "28 transe 19k_childPar 1 True 9 60.755814 \n", - "19 complex 19k_childPar 2 True 10 63.081395 \n", - "26 transe 19k_childPar 1 True 7 62.209302 \n", - "29 transe 19k_childPar 1 True 10 60.465116 \n", - "8 complex 19k_childPar 1 True 9 65.116279 \n", - "3 complex 19k_childPar 1 True 4 67.732558 \n", - "6 complex 19k_childPar 1 True 7 66.569767 \n", - "7 complex 19k_childPar 1 True 8 65.988372 \n", - "21 transe 19k_childPar 1 True 2 65.697674 \n", - "27 transe 19k_childPar 1 True 8 61.627907 \n", - "25 transe 19k_childPar 1 True 6 63.372093 \n", - "5 complex 19k_childPar 1 True 6 67.732558 \n", - "9 complex 19k_childPar 1 True 10 64.534884 \n", - "24 transe 19k_childPar 1 True 5 65.406977 \n", - "\n", - " New Acc Increase Pairs Covered Old I Precision ... Old U Precision \\\n", - "0 64.244186 3.488372 291 1.000000 ... 0.433121 \n", - "20 65.697674 3.197674 291 0.888889 ... 0.397059 \n", - "1 67.151163 2.906977 291 1.000000 ... 0.463415 \n", - "11 63.662791 1.744186 291 1.000000 ... 0.444444 \n", - "10 61.918605 1.162791 291 1.000000 ... 0.433121 \n", - "2 67.732558 0.581395 291 1.000000 ... 0.495050 \n", - "4 67.732558 0.581395 291 0.916667 ... 0.492958 \n", - "36 63.081395 0.581395 291 0.846154 ... 0.351852 \n", - "30 63.081395 0.581395 291 0.888889 ... 0.397059 \n", - "22 65.406977 0.581395 291 0.750000 ... 0.393939 \n", - "38 63.372093 0.290698 291 0.785714 ... 0.372549 \n", - "33 63.081395 0.290698 291 0.900000 ... 0.383333 \n", - "18 63.081395 0.000000 291 0.909091 ... 0.444444 \n", - "37 63.081395 0.000000 291 0.846154 ... 0.365385 \n", - "32 62.790698 0.000000 291 0.900000 ... 0.387097 \n", - "23 65.406977 0.000000 291 0.750000 ... 0.400000 \n", - "39 63.372093 0.000000 291 0.785714 ... 0.380000 \n", - "15 63.662791 0.000000 291 1.000000 ... 0.455224 \n", - "14 63.662791 0.000000 291 1.000000 ... 0.457143 \n", - "13 63.662791 0.000000 291 1.000000 ... 0.457746 \n", - "12 63.662791 0.000000 291 1.000000 ... 0.458904 \n", - "17 63.081395 -0.290698 291 0.909091 ... 0.448819 \n", - "16 63.372093 -0.290698 291 1.000000 ... 0.453846 \n", - "35 62.500000 -0.290698 291 0.846154 ... 0.363636 \n", - "34 62.790698 -0.290698 291 0.846154 ... 0.375000 \n", - "31 62.790698 -0.290698 291 0.900000 ... 0.400000 \n", - "28 60.465116 -0.290698 291 0.394737 ... 0.368421 \n", - "19 62.790698 -0.290698 291 0.909091 ... 0.444444 \n", - "26 61.627907 -0.581395 291 0.428571 ... 0.428571 \n", - "29 59.883721 -0.581395 291 0.365854 ... 0.388889 \n", - "8 64.534884 -0.581395 291 0.785714 ... 0.442308 \n", - "3 67.151163 -0.581395 291 0.909091 ... 0.511905 \n", - "6 65.988372 -0.581395 291 0.916667 ... 0.475410 \n", - "7 65.116279 -0.872093 291 0.846154 ... 0.464286 \n", - "21 64.825581 -0.872093 291 0.833333 ... 0.450000 \n", - "27 60.755814 -0.872093 291 0.416667 ... 0.400000 \n", - "25 62.209302 -1.162791 291 0.468750 ... 0.454545 \n", - "5 66.569767 -1.162791 291 0.916667 ... 0.507937 \n", - "9 63.081395 -1.453488 291 0.785714 ... 0.416667 \n", - "24 63.372093 -2.034884 291 0.652174 ... 0.444444 \n", - "\n", - " Old U Recall Old U F1-Score New I Precision New I Recall \\\n", - "0 0.660194 0.523077 1.000000 0.40 \n", - "20 0.262136 0.315789 0.833333 0.50 \n", - "1 0.553398 0.504425 1.000000 0.50 \n", - "11 0.660194 0.531250 1.000000 0.45 \n", - "10 0.660194 0.523077 1.000000 0.40 \n", - "2 0.485437 0.490196 0.909091 0.50 \n", - "4 0.339806 0.402299 0.916667 0.55 \n", - "36 0.184466 0.242038 0.846154 0.55 \n", - "30 0.262136 0.315789 0.900000 0.45 \n", - "22 0.126214 0.191176 0.750000 0.75 \n", - "38 0.184466 0.246753 0.785714 0.55 \n", - "33 0.223301 0.282209 0.846154 0.55 \n", - "18 0.543689 0.489083 0.909091 0.50 \n", - "37 0.184466 0.245161 0.785714 0.55 \n", - "32 0.233010 0.290909 0.900000 0.45 \n", - "23 0.116505 0.180451 0.652174 0.75 \n", - "39 0.184466 0.248366 0.785714 0.55 \n", - "15 0.592233 0.514768 1.000000 0.45 \n", - "14 0.621359 0.526749 1.000000 0.45 \n", - "13 0.631068 0.530612 1.000000 0.45 \n", - "12 0.650485 0.538153 1.000000 0.45 \n", - "17 0.553398 0.495652 0.909091 0.50 \n", - "16 0.572816 0.506438 0.909091 0.50 \n", - "35 0.194175 0.253165 0.846154 0.55 \n", - "34 0.203883 0.264151 0.846154 0.55 \n", - "31 0.252427 0.309524 0.900000 0.45 \n", - "28 0.067961 0.114754 0.365854 0.75 \n", - "19 0.543689 0.489083 0.900000 0.45 \n", - "26 0.087379 0.145161 0.416667 0.75 \n", - "29 0.067961 0.115702 0.333333 0.75 \n", - "8 0.223301 0.296774 0.785714 0.55 \n", - "3 0.417476 0.459893 0.916667 0.55 \n", - "6 0.281553 0.353659 0.846154 0.55 \n", - "7 0.252427 0.327044 0.785714 0.55 \n", - "21 0.174757 0.251748 0.750000 0.60 \n", - "27 0.077670 0.130081 0.394737 0.75 \n", - "25 0.097087 0.160000 0.428571 0.75 \n", - "5 0.310680 0.385542 0.916667 0.55 \n", - "9 0.194175 0.264901 0.687500 0.55 \n", - "24 0.116505 0.184615 0.468750 0.75 \n", - "\n", - " New I F1-Score New U Precision New U Recall New U F1-Score Rank \n", - "0 0.571429 0.463415 0.553398 0.504425 2 \n", - "20 0.625000 0.450000 0.174757 0.251748 0 \n", - "1 0.666667 0.495050 0.485437 0.490196 4 \n", - "11 0.620690 0.458904 0.650485 0.538153 13 \n", - "10 0.571429 0.444444 0.660194 0.531250 12 \n", - "2 0.645161 0.511905 0.417476 0.459893 1 \n", - "4 0.687500 0.507937 0.310680 0.385542 5 \n", - "36 0.666667 0.365385 0.184466 0.245161 6 \n", - "30 0.600000 0.400000 0.252427 0.309524 17 \n", - "22 0.750000 0.400000 0.116505 0.180451 3 \n", - "38 0.647059 0.380000 0.184466 0.248366 8 \n", - "33 0.666667 0.375000 0.203883 0.264151 14 \n", - "18 0.645161 0.444444 0.543689 0.489083 19 \n", - "37 0.647059 0.372549 0.184466 0.246753 7 \n", - "32 0.600000 0.383333 0.223301 0.282209 12 \n", - "23 0.697674 0.444444 0.116505 0.184615 1 \n", - "39 0.647059 0.380000 0.184466 0.248366 9 \n", - "15 0.620690 0.453846 0.572816 0.506438 17 \n", - "14 0.620690 0.455224 0.592233 0.514768 16 \n", - "13 0.620690 0.457143 0.621359 0.526749 15 \n", - "12 0.620690 0.457746 0.631068 0.530612 14 \n", - "17 0.645161 0.444444 0.543689 0.489083 18 \n", - "16 0.645161 0.448819 0.553398 0.495652 9 \n", - "35 0.666667 0.351852 0.184466 0.242038 5 \n", - "34 0.666667 0.363636 0.194175 0.253165 15 \n", - "31 0.600000 0.387097 0.233010 0.290909 11 \n", - "28 0.491803 0.388889 0.067961 0.115702 13 \n", - "19 0.600000 0.444444 0.543689 0.489083 10 \n", - "26 0.535714 0.400000 0.077670 0.130081 4 \n", - "29 0.461538 0.411765 0.067961 0.116667 16 \n", - "8 0.647059 0.416667 0.194175 0.264901 0 \n", - "3 0.687500 0.492958 0.339806 0.402299 3 \n", - "6 0.666667 0.464286 0.252427 0.327044 7 \n", - "7 0.647059 0.442308 0.223301 0.296774 8 \n", - "21 0.666667 0.393939 0.126214 0.191176 2 \n", - "27 0.517241 0.368421 0.067961 0.114754 10 \n", - "25 0.545455 0.428571 0.087379 0.145161 19 \n", - "5 0.687500 0.475410 0.281553 0.353659 6 \n", - "9 0.611111 0.377778 0.165049 0.229730 11 \n", - "24 0.576923 0.454545 0.097087 0.160000 18 \n", - "\n", - "[40 rows x 22 columns]" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "resultsDF.sort_values(by=['Increase'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "utility-globe", - "metadata": {}, - "outputs": [], - "source": [ - "resultsDF.to_csv('../data/retrofitting/masterRetro_Aug20_2021.csv', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "crazy-scene", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv2", - "language": "python", - "name": "kgtkenv2" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "288px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/.ipynb_checkpoints/Master P279-Dataset Generation-checkpoint.ipynb b/.ipynb_checkpoints/Master P279-Dataset Generation-checkpoint.ipynb deleted file mode 100644 index 585ab34..0000000 --- a/.ipynb_checkpoints/Master P279-Dataset Generation-checkpoint.ipynb +++ /dev/null @@ -1,5117 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "individual-diamond", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import scipy.stats as stats\n", - "import json\n", - "from tqdm.notebook import tqdm\n", - "import gzip\n", - "from collections import defaultdict" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "necessary-shopper", - "metadata": {}, - "outputs": [], - "source": [ - "# Filepaths\n", - "\n", - "# DWD Files\n", - "DERIVED_IS_COUNTS_FILE = '../source_dataset_files/wikidata-20210215-dwd-v2/dwd_isa_class_count.compact.tsv.gz'\n", - "LABELS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/labels.en.tsv.gz\"\n", - "DESCRIPTIONS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/descriptions.en.tsv.gz\"\n", - "P279_EDGES_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/derived.P279.tsv.gz\"\n", - "P279STAR_EDGES_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/derived.P279star.tsv.gz\"\n", - "CLASS_COUNTS_FILE = \"../data/supplementary_files/class-counts.tsv\"\n", - "CLASS_TRANSITIVE_P279_COUNTS_FILE = \"../data/supplementary_files/class-counts-P279star.tsv\"" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "chubby-vehicle", - "metadata": {}, - "outputs": [], - "source": [ - "P279_CHILD_PAR_INTERM_FILE = \"../data/basis/intermediate_files/P279_ChildPar.labDesc.csv\"\n", - "P279_CHILD_PAR_DISTILBERT_COSSIM_FILE = \"../data/basis/P279_ChildPar.all-distilroberta-v1.csv\"\n", - "P279_CHILD_PAR_CLASSSIM_FILE = \"../data/basis/P279_ChildPar.classSim.csv\"\n", - "\n", - "P279_SIBLINGS_INTERM_FILE = \"../data/basis/intermediate_files/P279_Siblings.all_combinations.csv\"\n", - "P279_SIBLINGS_DISTILBERT_COSSIM_FILE = \"../data/basis/P279_Siblings.all-distilroberta-v1.csv\"\n", - "P279_SIBLINGS_CLASSSIM_FILE = \"../data/basis/P279_Siblings.classSim.csv\"" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "greek-young", - "metadata": {}, - "outputs": [], - "source": [ - "WORDSIM_DF = '../data/evaluation/wordsim353_with_r3.csv'" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "short-telling", - "metadata": {}, - "outputs": [], - "source": [ - "PROBASE_SOURCE_DIR = \"../source_dataset_files/probase/\"\n", - "PROBASE_INTERM_FILE = \"../data/basis/intermediate_files/probase_WQnodes.csv\"\n", - "PROBASE_FINAL_FILE = '../data/basis/intermediate_files/probase_WQnodes_subset_and_sim.csv'" - ] - }, - { - "cell_type": "markdown", - "id": "secure-gibson", - "metadata": {}, - "source": [ - "# Utilities" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "allied-harmony", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "71f276d6b5b642609801caf1fa94bb41", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/41845781 [00:00 ../data/supplementary_files/class-counts.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "pressed-influence", - "metadata": {}, - "outputs": [], - "source": [ - "class_counts = defaultdict(int)\n", - "with gzip.open(P279STAR_EDGES_FILE, 'r') as f:\n", - " first_line = True\n", - " for line in tqdm(f):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " class_counts[line[2]] += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "centered-school", - "metadata": {}, - "outputs": [], - "source": [ - "class_counts_df = pd.DataFrame.from_dict(class_counts, orient='index',columns=['class_count'])" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "catholic-criminal", - "metadata": {}, - "outputs": [], - "source": [ - "class_counts_df.reset_index().rename(columns={'index': '0'}).to_csv(CLASS_TRANSITIVE_P279_COUNTS_FILE, sep='\\t', header=None, index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "lined-explosion", - "metadata": {}, - "source": [ - "# P279 Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "threatened-pacific", - "metadata": {}, - "source": [ - "## P279 ChildPar Dataset\n", - "\n", - "Use descriptions wherever available, if not use labels, if not skip rows\n", - "\n", - "**Old Version Details:**\n", - "\n", - "[Wikidata OS File (Wikidata 2021-02-15 DWD version)](https://drive.google.com/drive/folders/168j3OfdVGXMTKcs6VyH8rq_p0n6w0GGj?usp=sharing)\n", - "\n", - "There are 721983 rows in P279 dataset, 606996 unique number of nodes in this dataset, 511841 labels and 299844 descriptions\n", - "\n", - "There are 373463 rows in P279 dataset s.t. both nodes have either a label or a description. There are 373463 rows where both nodes have labels. There are 373463 rows where both nodes have descriptions." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "polyphonic-county", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk filter -i ../data/wikidataos.for.text-embedding.tsv.gz -p \";P279;\" -o ../data/P279_dataset/wikidata-P279.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "silent-liver", - "metadata": {}, - "outputs": [], - "source": [ - "p279DF = pd.read_csv(P279_EDGES_FILE,sep='\\t')\n", - "p279DFNodesSet = set(p279DF.node1.to_list() + p279DF.node2.to_list())\n", - "labelsDF = pd.read_csv(LABELS_FILE, sep='\\t')\n", - "descriptionsDF = pd.read_csv(DESCRIPTIONS_FILE, compression='gzip', sep='\\t')\n", - "labelsDF = labelsDF[labelsDF.node1.apply(lambda p: p in p279DFNodesSet)]\n", - "descriptionsDF = descriptionsDF[descriptionsDF.node1.apply(lambda p: p in p279DFNodesSet)]" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "cubic-taxation", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "There are 3077831 rows in P279 dataset, 2503943 unique number of nodes in this dataset, 2406580 labels and 1369514 descriptions\n" - ] - } - ], - "source": [ - "print(f\"There are {len(p279DF)} rows in P279 dataset, {len(p279DFNodesSet)} unique number of nodes in this dataset, {len(labelsDF)} labels and {len(descriptionsDF)} descriptions\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "damaged-driving", - "metadata": {}, - "outputs": [], - "source": [ - "p279DFNew = p279DF\n", - "temp1 = p279DFNew.set_index('node1').join(labelsDF.set_index('node1'), rsuffix='_label')\n", - "temp1 = temp1[['id','label','node2','node2_label']]\n", - "temp2 = temp1.reset_index().set_index('node2').join(labelsDF.set_index('node1'), rsuffix='_label2')\n", - "temp3 = temp2[['id','node1','label','node2', 'node2_label']].rename(columns={'node2_label': 'node1_label', 'node2':'node2_label'}).reset_index().rename(columns={'index':'node2'})\n", - "temp3 = temp3[['id','node1','node1_label','label','node2','node2_label']]\n", - "temp3['node1_label'] = temp3['node1_label'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "temp3['node2_label'] = temp3['node2_label'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "hierDF = temp3.copy()\n", - "\n", - "p279DFNew = hierDF\n", - "temp1 = p279DFNew.set_index('node1').join(descriptionsDF.set_index('node1'), rsuffix='_desc')\n", - "temp1 = temp1[['id','label','node2','node1_label','node2_label', 'node2_desc']]\n", - "temp2 = temp1.reset_index().set_index('node2').join(descriptionsDF.set_index('node1'), rsuffix='_desc2')\n", - "temp3 = temp2[['id','node1','label','node2', 'node1_label', 'node2_label', 'node2_desc']].rename(columns={'node2_desc': 'node1_desc', 'node2':'node2_desc'}).reset_index().rename(columns={'index':'node2'})\n", - "temp3['node1_desc'] = temp3['node1_desc'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "temp3['node2_desc'] = temp3['node2_desc'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "hierDF = temp3.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "dress-yellow", - "metadata": {}, - "outputs": [], - "source": [ - "def combineLabDesc(row, nodeNum):\n", - " if type(row['node'+str(nodeNum)+'_desc']) == str and type(row['node'+str(nodeNum)+'_label']) == str :\n", - " return row['node'+str(nodeNum)+'_label'] + ' ' + row['node'+str(nodeNum)+'_desc']\n", - " else:\n", - " return None\n", - "hierDF['node1_labDesc'] = hierDF.apply(combineLabDesc, axis=1, args=(1,))\n", - "hierDF['node2_labDesc'] = hierDF.apply(combineLabDesc, axis=1, args=(2,))\n", - "hierDF = hierDF[~hierDF['node1_labDesc'].isna()]\n", - "hierDF = hierDF[~hierDF['node2_labDesc'].isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "adaptive-measure", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "There are 1898589 rows in P279 dataset s.t. both nodes have either a label or a description. There are 1898589 rows where both nodes have labels. There are 1898589 rows where both nodes have descriptions.\n" - ] - } - ], - "source": [ - "print(f\"There are {len(hierDF)} rows in P279 dataset s.t. both nodes have either a label or a description. \\\n", - " There are {len(hierDF[(~hierDF.node1_label.isna()) & (~hierDF.node2_label.isna())])} rows where both nodes have labels. \\\n", - " There are {len(hierDF[(~hierDF.node1_desc.isna()) & (~hierDF.node2_desc.isna())])} rows where both nodes have descriptions.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "disturbed-adaptation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDesc
1Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791944 fighter aircraft family by Oberst R. LehmannYF-16F-16initial prototype of the F-16 fighter aircraftYF-16 initial prototype of the F-16 fighter ai...F-16 1944 fighter aircraft family by Oberst R....
2Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791944 fighter aircraft family by Oberst R. LehmannF-16A/B Fighting FalconF-16initial series of the F-16 fighter aircraftF-16A/B Fighting Falcon initial series of the ...F-16 1944 fighter aircraft family by Oberst R....
3Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791944 fighter aircraft family by Oberst R. LehmannF-16C/D Fighting FalconF-16multirole series of the F-16 fighter aircraftF-16C/D Fighting Falcon multirole series of th...F-16 1944 fighter aircraft family by Oberst R....
4Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791944 fighter aircraft family by Oberst R. LehmannF-16E/F Desert FalconF-16export strike fighter series of the F-16 fight...F-16E/F Desert Falcon export strike fighter se...F-16 1944 fighter aircraft family by Oberst R....
5Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791944 fighter aircraft family by Oberst R. LehmannF-16 VISTAF-16experimental aircraftF-16 VISTA experimental aircraftF-16 1944 fighter aircraft family by Oberst R....
\n", - "
" - ], - "text/plain": [ - " node2 id node1 label \\\n", - "1 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "2 Q100026 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 \n", - "3 Q100026 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 \n", - "4 Q100026 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 \n", - "5 Q100026 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 \n", - "\n", - " node2_desc node1_label \\\n", - "1 1944 fighter aircraft family by Oberst R. Lehmann YF-16 \n", - "2 1944 fighter aircraft family by Oberst R. Lehmann F-16A/B Fighting Falcon \n", - "3 1944 fighter aircraft family by Oberst R. Lehmann F-16C/D Fighting Falcon \n", - "4 1944 fighter aircraft family by Oberst R. Lehmann F-16E/F Desert Falcon \n", - "5 1944 fighter aircraft family by Oberst R. Lehmann F-16 VISTA \n", - "\n", - " node2_label node1_desc \\\n", - "1 F-16 initial prototype of the F-16 fighter aircraft \n", - "2 F-16 initial series of the F-16 fighter aircraft \n", - "3 F-16 multirole series of the F-16 fighter aircraft \n", - "4 F-16 export strike fighter series of the F-16 fight... \n", - "5 F-16 experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "1 YF-16 initial prototype of the F-16 fighter ai... \n", - "2 F-16A/B Fighting Falcon initial series of the ... \n", - "3 F-16C/D Fighting Falcon multirole series of th... \n", - "4 F-16E/F Desert Falcon export strike fighter se... \n", - "5 F-16 VISTA experimental aircraft \n", - "\n", - " node2_labDesc \n", - "1 F-16 1944 fighter aircraft family by Oberst R.... \n", - "2 F-16 1944 fighter aircraft family by Oberst R.... \n", - "3 F-16 1944 fighter aircraft family by Oberst R.... \n", - "4 F-16 1944 fighter aircraft family by Oberst R.... \n", - "5 F-16 1944 fighter aircraft family by Oberst R.... " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "markdown", - "id": "plain-jurisdiction", - "metadata": {}, - "source": [ - "### Filter based on transitive P279 counts\n", - "\n", - "6769\n", - "(310053, 303284)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "broken-intermediate", - "metadata": {}, - "outputs": [], - "source": [ - "# hierDF = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "trained-parent", - "metadata": {}, - "outputs": [], - "source": [ - "transitive_P279Counts = pd.read_csv(CLASS_COUNTS_FILE, sep='\\t', header=None)\n", - "transitive_P279Counts = transitive_P279Counts.set_index(0)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "great-engine", - "metadata": {}, - "outputs": [], - "source": [ - "def extract_pairs_with_top_k_class_counts(transitive_P279Counts, k, hierDF):\n", - " transitive_P279Counts = transitive_P279Counts[transitive_P279Counts >= k]\n", - " transitive_P279CountsNeededSet = set(transitive_P279Counts.index.to_list())\n", - " hierDF_transP279_filtered = hierDF[hierDF.node2.apply(lambda p: p in transitive_P279CountsNeededSet)]\n", - "# print(\"No. of pairs with identical desc:\", (hierDF_transP279_filtered.node1_desc == hierDF_transP279_filtered.node2_desc).sum())\n", - " hierDF_transP279_filtered1 = hierDF_transP279_filtered[hierDF_transP279_filtered.node1_desc != hierDF_transP279_filtered.node2_desc]\n", - "# print(len(hierDF_transP279_filtered), len(hierDF_transP279_filtered1))\n", - " hierDF_transP279_filtered1 = hierDF_transP279_filtered1.groupby(\"node2\").apply(lambda g: g if len(g) <= 500 else g.sample(500))\n", - " return hierDF_transP279_filtered1, k, len(hierDF_transP279_filtered1), hierDF_transP279_filtered1.node2.nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "worldwide-designation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(10, 304654, 28511)" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered1, k, cnt, n_pars = extract_pairs_with_top_k_class_counts(transitive_P279Counts, 10, hierDF)\n", - "k, cnt, n_pars" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "medical-hierarchy", - "metadata": {}, - "outputs": [], - "source": [ - "# tempRes = []\n", - "# for k in range(10000,100000,10000):\n", - "# _, k, cnt, n_pars = extract_pairs_with_top_k_class_counts(transitive_P279Counts, k, hierDF)\n", - "# tempRes.append((k, cnt, n_pars))\n", - "# pd.DataFrame(tempRes, columns=['Thresh', 'No. of rows', 'No. of unique parents'])" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "peaceful-protocol", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 28511.000000\n", - "mean 10.685490\n", - "std 28.508339\n", - "min 1.000000\n", - "25% 2.000000\n", - "50% 4.000000\n", - "75% 10.000000\n", - "max 500.000000\n", - "Name: node2, dtype: float64" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered1.node2.value_counts().describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "spiritual-ballot", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered1.to_csv(P279_CHILD_PAR_INTERM_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 145, - "id": "english-alfred", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = pd.read_csv(P279_CHILD_PAR_INTERM_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 146, - "id": "interpreted-institute", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2Unnamed: 1node2.1idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDesc
0Q1000261Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791944 fighter aircraft family by Oberst R. LehmannYF-16F-16initial prototype of the F-16 fighter aircraftYF-16 initial prototype of the F-16 fighter ai...F-16 1944 fighter aircraft family by Oberst R....
1Q1000262Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791944 fighter aircraft family by Oberst R. LehmannF-16A/B Fighting FalconF-16initial series of the F-16 fighter aircraftF-16A/B Fighting Falcon initial series of the ...F-16 1944 fighter aircraft family by Oberst R....
2Q1000263Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791944 fighter aircraft family by Oberst R. LehmannF-16C/D Fighting FalconF-16multirole series of the F-16 fighter aircraftF-16C/D Fighting Falcon multirole series of th...F-16 1944 fighter aircraft family by Oberst R....
3Q1000264Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791944 fighter aircraft family by Oberst R. LehmannF-16E/F Desert FalconF-16export strike fighter series of the F-16 fight...F-16E/F Desert Falcon export strike fighter se...F-16 1944 fighter aircraft family by Oberst R....
4Q1000265Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791944 fighter aircraft family by Oberst R. LehmannF-16 VISTAF-16experimental aircraftF-16 VISTA experimental aircraftF-16 1944 fighter aircraft family by Oberst R....
\n", - "
" - ], - "text/plain": [ - " node2 Unnamed: 1 node2.1 id node1 \\\n", - "0 Q100026 1 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 \n", - "1 Q100026 2 Q100026 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 \n", - "2 Q100026 3 Q100026 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 \n", - "3 Q100026 4 Q100026 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 \n", - "4 Q100026 5 Q100026 Q2029940-P279-Q100026-ceba4380-0 Q2029940 \n", - "\n", - " label node2_desc \\\n", - "0 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "1 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "2 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "3 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "4 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "\n", - " node1_label node2_label \\\n", - "0 YF-16 F-16 \n", - "1 F-16A/B Fighting Falcon F-16 \n", - "2 F-16C/D Fighting Falcon F-16 \n", - "3 F-16E/F Desert Falcon F-16 \n", - "4 F-16 VISTA F-16 \n", - "\n", - " node1_desc \\\n", - "0 initial prototype of the F-16 fighter aircraft \n", - "1 initial series of the F-16 fighter aircraft \n", - "2 multirole series of the F-16 fighter aircraft \n", - "3 export strike fighter series of the F-16 fight... \n", - "4 experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "0 YF-16 initial prototype of the F-16 fighter ai... \n", - "1 F-16A/B Fighting Falcon initial series of the ... \n", - "2 F-16C/D Fighting Falcon multirole series of th... \n", - "3 F-16E/F Desert Falcon export strike fighter se... \n", - "4 F-16 VISTA experimental aircraft \n", - "\n", - " node2_labDesc \n", - "0 F-16 1944 fighter aircraft family by Oberst R.... \n", - "1 F-16 1944 fighter aircraft family by Oberst R.... \n", - "2 F-16 1944 fighter aircraft family by Oberst R.... \n", - "3 F-16 1944 fighter aircraft family by Oberst R.... \n", - "4 F-16 1944 fighter aircraft family by Oberst R.... " - ] - }, - "execution_count": 146, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "id": "committed-diamond", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName, device='cuda:0')\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list(), show_progress_bar=True, batch_size=500)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "id": "alpine-virus", - "metadata": {}, - "outputs": [], - "source": [ - "modelName = 'sentence-transformers/all-distilroberta-v1'" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "funny-asian", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = hierDF.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 150, - "id": "stunning-consolidation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 0)" - ] - }, - "execution_count": 150, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.node1_labDesc.isna().sum(), hierDF.node2_labDesc.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "warming-dinner", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "149.29957628250122 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "103.25607371330261 s\n" - ] - } - ], - "source": [ - "hierDF['node1_emb'] = pd.Series(list(getSentEmbeddings(hierDF.node1_labDesc, modelName)))\n", - "hierDF['node2_emb'] = pd.Series(list(getSentEmbeddings(hierDF.node2_labDesc, modelName)))" - ] - }, - { - "cell_type": "code", - "execution_count": 152, - "id": "noticed-electric", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexnode2Unnamed: 1node2.1idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDescnode1_embnode2_emb
00Q1000261Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791944 fighter aircraft family by Oberst R. LehmannYF-16F-16initial prototype of the F-16 fighter aircraftYF-16 initial prototype of the F-16 fighter ai...F-16 1944 fighter aircraft family by Oberst R....[-0.0003189822, -0.31257084, 0.4071587, 0.4445...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
11Q1000262Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791944 fighter aircraft family by Oberst R. LehmannF-16A/B Fighting FalconF-16initial series of the F-16 fighter aircraftF-16A/B Fighting Falcon initial series of the ...F-16 1944 fighter aircraft family by Oberst R....[-0.066473946, -0.17350475, 0.24638157, 0.4571...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
22Q1000263Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791944 fighter aircraft family by Oberst R. LehmannF-16C/D Fighting FalconF-16multirole series of the F-16 fighter aircraftF-16C/D Fighting Falcon multirole series of th...F-16 1944 fighter aircraft family by Oberst R....[-0.110435985, -0.09184393, 0.24768817, 0.2641...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
33Q1000264Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791944 fighter aircraft family by Oberst R. LehmannF-16E/F Desert FalconF-16export strike fighter series of the F-16 fight...F-16E/F Desert Falcon export strike fighter se...F-16 1944 fighter aircraft family by Oberst R....[-0.40679273, -0.026886985, 0.032887716, 0.641...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
44Q1000265Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791944 fighter aircraft family by Oberst R. LehmannF-16 VISTAF-16experimental aircraftF-16 VISTA experimental aircraftF-16 1944 fighter aircraft family by Oberst R....[-0.18904628, 0.10738095, 0.3032565, 0.6507382...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
\n", - "
" - ], - "text/plain": [ - " index node2 Unnamed: 1 node2.1 id \\\n", - "0 0 Q100026 1 Q100026 Q17372279-P279-Q100026-beba8cd1-0 \n", - "1 1 Q100026 2 Q100026 Q17372377-P279-Q100026-fd42bd71-0 \n", - "2 2 Q100026 3 Q100026 Q17372444-P279-Q100026-ca0fc4bd-0 \n", - "3 3 Q100026 4 Q100026 Q17372455-P279-Q100026-c2b1bf36-0 \n", - "4 4 Q100026 5 Q100026 Q2029940-P279-Q100026-ceba4380-0 \n", - "\n", - " node1 label node2_desc \\\n", - "0 Q17372279 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "1 Q17372377 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "2 Q17372444 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "3 Q17372455 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "4 Q2029940 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "\n", - " node1_label node2_label \\\n", - "0 YF-16 F-16 \n", - "1 F-16A/B Fighting Falcon F-16 \n", - "2 F-16C/D Fighting Falcon F-16 \n", - "3 F-16E/F Desert Falcon F-16 \n", - "4 F-16 VISTA F-16 \n", - "\n", - " node1_desc \\\n", - "0 initial prototype of the F-16 fighter aircraft \n", - "1 initial series of the F-16 fighter aircraft \n", - "2 multirole series of the F-16 fighter aircraft \n", - "3 export strike fighter series of the F-16 fight... \n", - "4 experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "0 YF-16 initial prototype of the F-16 fighter ai... \n", - "1 F-16A/B Fighting Falcon initial series of the ... \n", - "2 F-16C/D Fighting Falcon multirole series of th... \n", - "3 F-16E/F Desert Falcon export strike fighter se... \n", - "4 F-16 VISTA experimental aircraft \n", - "\n", - " node2_labDesc \\\n", - "0 F-16 1944 fighter aircraft family by Oberst R.... \n", - "1 F-16 1944 fighter aircraft family by Oberst R.... \n", - "2 F-16 1944 fighter aircraft family by Oberst R.... \n", - "3 F-16 1944 fighter aircraft family by Oberst R.... \n", - "4 F-16 1944 fighter aircraft family by Oberst R.... \n", - "\n", - " node1_emb \\\n", - "0 [-0.0003189822, -0.31257084, 0.4071587, 0.4445... \n", - "1 [-0.066473946, -0.17350475, 0.24638157, 0.4571... \n", - "2 [-0.110435985, -0.09184393, 0.24768817, 0.2641... \n", - "3 [-0.40679273, -0.026886985, 0.032887716, 0.641... \n", - "4 [-0.18904628, 0.10738095, 0.3032565, 0.6507382... \n", - "\n", - " node2_emb \n", - "0 [-0.074766316, -0.20337783, 0.23880175, 0.4511... \n", - "1 [-0.074766316, -0.20337783, 0.23880175, 0.4511... \n", - "2 [-0.074766316, -0.20337783, 0.23880175, 0.4511... \n", - "3 [-0.074766316, -0.20337783, 0.23880175, 0.4511... \n", - "4 [-0.074766316, -0.20337783, 0.23880175, 0.4511... " - ] - }, - "execution_count": 152, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 153, - "id": "surrounded-thinking", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 0)" - ] - }, - "execution_count": 153, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.node1_emb.isna().sum(), hierDF.node2_emb.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "id": "frozen-console", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF['similarity_value'] = hierDF.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "id": "optimum-sewing", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF[['id', 'node1', 'label', 'node2', 'similarity_value']].to_csv(P279_CHILD_PAR_DISTILBERT_COSSIM_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "id": "selective-nashville", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 304654.000000\n", - "mean 0.499092\n", - "std 0.186887\n", - "min -0.130950\n", - "25% 0.371610\n", - "50% 0.499928\n", - "75% 0.626436\n", - "max 0.989182\n", - "Name: similarity_value, dtype: float64" - ] - }, - "execution_count": 168, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF['similarity_value'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "interior-treat", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ba6879c669da4812919bee809747ece9", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Batches: 0%| | 0/747 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2similarity_value
0Q17372279-P279-Q100026-beba8cd1-0Q17372279P279Q1000260.592530
1Q17372377-P279-Q100026-fd42bd71-0Q17372377P279Q1000260.660948
2Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P279Q1000260.634662
3Q17372455-P279-Q100026-c2b1bf36-0Q17372455P279Q1000260.552555
4Q2029940-P279-Q100026-ceba4380-0Q2029940P279Q1000260.504576
\n", - "" - ], - "text/plain": [ - " id node1 label node2 \\\n", - "0 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 Q100026 \n", - "1 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 Q100026 \n", - "2 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 Q100026 \n", - "3 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 Q100026 \n", - "4 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 Q100026 \n", - "\n", - " similarity_value \n", - "0 0.592530 \n", - "1 0.660948 \n", - "2 0.634662 \n", - "3 0.552555 \n", - "4 0.504576 " - ] - }, - "execution_count": 169, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered = pd.read_csv(P279_CHILD_PAR_DISTILBERT_COSSIM_FILE)\n", - "hierDF_transP279_filtered.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "id": "normal-playback", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_left = hierDF_transP279_filtered.set_index('node2')\n", - "hierDF_transP279_filtered_right = hierDF_transP279_filtered.copy().set_index('node2')" - ] - }, - { - "cell_type": "code", - "execution_count": 171, - "id": "interpreted-elimination", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 2.04 s, sys: 684 ms, total: 2.72 s\n", - "Wall time: 2.72 s\n" - ] - } - ], - "source": [ - "%%time\n", - "hierDF_transP279_filtered_sibs = hierDF_transP279_filtered_left.join(hierDF_transP279_filtered_right, rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 172, - "id": "consolidated-hampshire", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "26426178" - ] - }, - "execution_count": 172, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_transP279_filtered_sibs)" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "id": "blessed-microwave", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelsimilarity_valueid_rightnode1_rightlabel_rightsimilarity_value_right
node2
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.592530
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372377-P279-Q100026-fd42bd71-0Q17372377P2790.660948
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2790.634662
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2790.552555
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q2029940-P279-Q100026-ceba4380-0Q2029940P2790.504576
\n", - "
" - ], - "text/plain": [ - " id node1 label similarity_value \\\n", - "node2 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "\n", - " id_right node1_right label_right \\\n", - "node2 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "Q100026 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 \n", - "Q100026 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 \n", - "Q100026 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 \n", - "Q100026 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 \n", - "\n", - " similarity_value_right \n", - "node2 \n", - "Q100026 0.592530 \n", - "Q100026 0.660948 \n", - "Q100026 0.634662 \n", - "Q100026 0.552555 \n", - "Q100026 0.504576 " - ] - }, - "execution_count": 173, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 175, - "id": "compliant-measure", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs.drop(columns=['label_right']).reset_index().rename(columns={'node2': 'par_node', 'node1_right': 'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 176, - "id": "anticipated-occasion", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
par_nodeidnode1labelsimilarity_valueid_rightnode2similarity_value_right
0Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372279-P279-Q100026-beba8cd1-0Q173722790.592530
1Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372377-P279-Q100026-fd42bd71-0Q173723770.660948
2Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372444-P279-Q100026-ca0fc4bd-0Q173724440.634662
3Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372455-P279-Q100026-c2b1bf36-0Q173724550.552555
4Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q2029940-P279-Q100026-ceba4380-0Q20299400.504576
\n", - "
" - ], - "text/plain": [ - " par_node id node1 label \\\n", - "0 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "1 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "2 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "3 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "4 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "\n", - " similarity_value id_right node2 \\\n", - "0 0.59253 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 \n", - "1 0.59253 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 \n", - "2 0.59253 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 \n", - "3 0.59253 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 \n", - "4 0.59253 Q2029940-P279-Q100026-ceba4380-0 Q2029940 \n", - "\n", - " similarity_value_right \n", - "0 0.592530 \n", - "1 0.660948 \n", - "2 0.634662 \n", - "3 0.552555 \n", - "4 0.504576 " - ] - }, - "execution_count": 176, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "steady-jacket", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "26426178" - ] - }, - "execution_count": 177, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_transP279_filtered_sibs1)" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "id": "italian-slovak", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs1[hierDF_transP279_filtered_sibs1.node1 != hierDF_transP279_filtered_sibs1.node2]" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "id": "digital-oxygen", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "26121338" - ] - }, - "execution_count": 179, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_transP279_filtered_sibs1)" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "fewer-rebel", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1.to_csv(P279_SIBLINGS_INTERM_FILE, index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "failing-accent", - "metadata": {}, - "source": [ - "### Add labels + descs" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "id": "controlled-width", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.utils.random import sample_without_replacement\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 193, - "id": "prompt-grade", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1000000\n" - ] - } - ], - "source": [ - "hierDF_transP279_filtered_sibs = pd.read_csv(P279_SIBLINGS_INTERM_FILE)\n", - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs.iloc[sample_without_replacement(len(hierDF_transP279_filtered_sibs), 1000000, random_state=13)]\n", - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs1.reset_index()\n", - "print(len(hierDF_transP279_filtered_sibs1))\n", - "labelsDF = pd.read_csv(LABELS_FILE, compression='gzip', sep='\\t')\n", - "hierDF_transP279_filtered_set = set(hierDF_transP279_filtered_sibs1.node1.to_list() + hierDF_transP279_filtered_sibs1.node2.to_list() + hierDF_transP279_filtered_sibs1.par_node.to_list())\n", - "labelsDF = labelsDF[labelsDF.node1.apply(lambda p: p in hierDF_transP279_filtered_set)]\n", - "labelsDict = {row['node1']: row['node2'] for _, row in labelsDF.iterrows() if row['node1'] in hierDF_transP279_filtered_set}\n", - "descriptionsDF = pd.read_csv(DESCRIPTIONS_FILE, compression='gzip', sep='\\t')\n", - "descriptionsDF = descriptionsDF[descriptionsDF.node1.apply(lambda p: p in hierDF_transP279_filtered_set)]\n", - "descDict = {row['node1']: row['node2'] for _, row in descriptionsDF.iterrows() if row['node1'] in hierDF_transP279_filtered_set}" - ] - }, - { - "cell_type": "code", - "execution_count": 194, - "id": "american-porter", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1['node1_label'] = hierDF_transP279_filtered_sibs1.node1.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else None)\n", - "hierDF_transP279_filtered_sibs1['node2_label'] = hierDF_transP279_filtered_sibs1.node2.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else None)\n", - "hierDF_transP279_filtered_sibs1['par_label'] = hierDF_transP279_filtered_sibs1.par_node.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else None)\n", - "hierDF_transP279_filtered_sibs1['node1_desc'] = hierDF_transP279_filtered_sibs1.node1.apply(lambda p: descDict[p][1:-4] if p in descDict else None)\n", - "hierDF_transP279_filtered_sibs1['node2_desc'] = hierDF_transP279_filtered_sibs1.node2.apply(lambda p: descDict[p][1:-4] if p in descDict else None)\n", - "hierDF_transP279_filtered_sibs1['node1_sent'] = hierDF_transP279_filtered_sibs1.apply(lambda p: p['node1_label'] + ' ' + p['node1_desc'] + ' is ' + p['par_label'],axis=1)\n", - "hierDF_transP279_filtered_sibs1['node2_sent'] = hierDF_transP279_filtered_sibs1.apply(lambda p: p['node2_label'] + ' ' + p['node2_desc'] + ' is ' + p['par_label'],axis=1)\n", - "hierDF_transP279_filtered_sibs2 = hierDF_transP279_filtered_sibs1[hierDF_transP279_filtered_sibs1.node1_desc != hierDF_transP279_filtered_sibs1.node2_desc]" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "id": "official-separation", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset reduced from 1000000 to 785418 by eliminating rows where node1_desc == node2_desc\n" - ] - } - ], - "source": [ - "print(f\"Dataset reduced from {len(hierDF_transP279_filtered_sibs1)} to {len(hierDF_transP279_filtered_sibs2)} by eliminating rows where node1_desc == node2_desc\")" - ] - }, - { - "cell_type": "code", - "execution_count": 196, - "id": "weighted-mirror", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexpar_nodeidnode1labelsimilarity_valueid_rightnode2similarity_value_rightnode1_labelnode2_labelpar_labelnode1_descnode2_descnode1_sentnode2_sent
024998287Q89Q96627253-P279-Q89-51483924-0Q96627253P2790.460166Q595003-P279-Q89-ddc59387-0Q5950030.553182Sevillana (manzana)Calville Blanc d\\'hiverappleapple cultivarapple cultivarSevillana (manzana) apple cultivar is appleCalville Blanc d\\'hiver apple cultivar is apple
16348351Q17589470Q56942-P279-Q17589470-d0932570-0Q56942P2790.527086Q69974281-P279-Q17589470-ed5eb339-0Q699742810.466616Wii UGamatic 7600home video game consoleeight-generation home video game console by Ni...Pong console. The same of Otron Gamatic 7600Wii U eight-generation home video game console...Gamatic 7600 Pong console. The same of Otron G...
23244723Q13357858Q63845311-P279-Q13357858-c40a679c-0Q63845311P2790.695520Q79132633-P279-Q13357858-4ccf52ce-0Q791326330.6797672013 World Senior Badminton Championships O35Slovak Badminton Championships U17badminton tournamentbadminton championshipsbadminton championships2013 World Senior Badminton Championships O35 ...Slovak Badminton Championships U17 badminton c...
35923963Q174736Q583164-P279-Q174736-262a2fe0-0Q583164P2790.459580Q2692256-P279-Q174736-e1333ac9-0Q26922560.592024Project 30bisBagley-class destroyerdestroyer1949 Soviet destroyer classclass of U.S. destroyersProject 30bis 1949 Soviet destroyer class is d...Bagley-class destroyer class of U.S. destroyer...
410867070Q215627Q19840821-P279-Q215627-eb7ec03a-0Q19840821P2790.201813Q40554819-P279-Q215627-95d720c4-0Q405548190.104633SingaporeansSicilianspersoncitizens or residents of Singaporeethnic group indigenous to the island of Sicil...Singaporeans citizens or residents of Singapor...Sicilians ethnic group indigenous to the islan...
...................................................
99999515478058Q3382119Q75086913-P279-Q3382119-a9ff163a-0Q75086913P2790.769255Q75828417-P279-Q3382119-59b8950c-0Q758284170.621310Sub-prefect of Nogent-le-RotrouSub-prefect of Pont-Audemersub-prefectFrench official positionformer French official position (1800-1926)Sub-prefect of Nogent-le-Rotrou French officia...Sub-prefect of Pont-Audemer former French offi...
99999623394433Q785745Q23022056-P279-Q785745-f48ca89b-0Q23022056P2790.405016Q3511974-P279-Q785745-42da354d-0Q35119740.306730Tasmanian Government Railways J classAlsace-Lorraine E 6tank locomotiveclass of 1 Australian 2-6-4-0T locomotiveclass of 13 German (later French) metre-gauge ...Tasmanian Government Railways J class class of...Alsace-Lorraine E 6 class of 13 German (later ...
99999719035228Q483373Q682971-P279-Q483373-6ff4adf5-0Q682971P2790.314112Q4598091-P279-Q483373-fd15b986-0Q45980910.213652Rhaetian Railway ABe 4/16CTA 2000 serieselectric multiple unitmultiple unitclass of Chicago Transit Authority carsRhaetian Railway ABe 4/16 multiple unit is ele...CTA 2000 series class of Chicago Transit Autho...
99999820618370Q625151Q841350-P279-Q625151-bd2c0728-0Q841350P2790.459560Q463577-P279-Q625151-4cfe245b-0Q4635770.466203OSE class 120BLS Re 4/4electric locomotiveclass of Greek electric locomotivesclass of 35 Swiss electric locomotiesOSE class 120 class of Greek electric locomoti...BLS Re 4/4 class of 35 Swiss electric locomoti...
9999992023217Q11513337Q13382122-P279-Q11513337-2d44cd4f-0Q13382122P2790.559249Q13854733-P279-Q11513337-8c2aca91-0Q138547330.626328high jumpersteeplechase runnerathletics competitorsportsperson taking part in high jump competit...sportsperson taking part in steeplechasing com...high jumper sportsperson taking part in high j...steeplechase runner sportsperson taking part i...
\n", - "

1000000 rows × 16 columns

\n", - "
" - ], - "text/plain": [ - " index par_node id node1 \\\n", - "0 24998287 Q89 Q96627253-P279-Q89-51483924-0 Q96627253 \n", - "1 6348351 Q17589470 Q56942-P279-Q17589470-d0932570-0 Q56942 \n", - "2 3244723 Q13357858 Q63845311-P279-Q13357858-c40a679c-0 Q63845311 \n", - "3 5923963 Q174736 Q583164-P279-Q174736-262a2fe0-0 Q583164 \n", - "4 10867070 Q215627 Q19840821-P279-Q215627-eb7ec03a-0 Q19840821 \n", - "... ... ... ... ... \n", - "999995 15478058 Q3382119 Q75086913-P279-Q3382119-a9ff163a-0 Q75086913 \n", - "999996 23394433 Q785745 Q23022056-P279-Q785745-f48ca89b-0 Q23022056 \n", - "999997 19035228 Q483373 Q682971-P279-Q483373-6ff4adf5-0 Q682971 \n", - "999998 20618370 Q625151 Q841350-P279-Q625151-bd2c0728-0 Q841350 \n", - "999999 2023217 Q11513337 Q13382122-P279-Q11513337-2d44cd4f-0 Q13382122 \n", - "\n", - " label similarity_value id_right \\\n", - "0 P279 0.460166 Q595003-P279-Q89-ddc59387-0 \n", - "1 P279 0.527086 Q69974281-P279-Q17589470-ed5eb339-0 \n", - "2 P279 0.695520 Q79132633-P279-Q13357858-4ccf52ce-0 \n", - "3 P279 0.459580 Q2692256-P279-Q174736-e1333ac9-0 \n", - "4 P279 0.201813 Q40554819-P279-Q215627-95d720c4-0 \n", - "... ... ... ... \n", - "999995 P279 0.769255 Q75828417-P279-Q3382119-59b8950c-0 \n", - "999996 P279 0.405016 Q3511974-P279-Q785745-42da354d-0 \n", - "999997 P279 0.314112 Q4598091-P279-Q483373-fd15b986-0 \n", - "999998 P279 0.459560 Q463577-P279-Q625151-4cfe245b-0 \n", - "999999 P279 0.559249 Q13854733-P279-Q11513337-8c2aca91-0 \n", - "\n", - " node2 similarity_value_right \\\n", - "0 Q595003 0.553182 \n", - "1 Q69974281 0.466616 \n", - "2 Q79132633 0.679767 \n", - "3 Q2692256 0.592024 \n", - "4 Q40554819 0.104633 \n", - "... ... ... \n", - "999995 Q75828417 0.621310 \n", - "999996 Q3511974 0.306730 \n", - "999997 Q4598091 0.213652 \n", - "999998 Q463577 0.466203 \n", - "999999 Q13854733 0.626328 \n", - "\n", - " node1_label \\\n", - "0 Sevillana (manzana) \n", - "1 Wii U \n", - "2 2013 World Senior Badminton Championships O35 \n", - "3 Project 30bis \n", - "4 Singaporeans \n", - "... ... \n", - "999995 Sub-prefect of Nogent-le-Rotrou \n", - "999996 Tasmanian Government Railways J class \n", - "999997 Rhaetian Railway ABe 4/16 \n", - "999998 OSE class 120 \n", - "999999 high jumper \n", - "\n", - " node2_label par_label \\\n", - "0 Calville Blanc d\\'hiver apple \n", - "1 Gamatic 7600 home video game console \n", - "2 Slovak Badminton Championships U17 badminton tournament \n", - "3 Bagley-class destroyer destroyer \n", - "4 Sicilians person \n", - "... ... ... \n", - "999995 Sub-prefect of Pont-Audemer sub-prefect \n", - "999996 Alsace-Lorraine E 6 tank locomotive \n", - "999997 CTA 2000 series electric multiple unit \n", - "999998 BLS Re 4/4 electric locomotive \n", - "999999 steeplechase runner athletics competitor \n", - "\n", - " node1_desc \\\n", - "0 apple cultivar \n", - "1 eight-generation home video game console by Ni... \n", - "2 badminton championships \n", - "3 1949 Soviet destroyer class \n", - "4 citizens or residents of Singapore \n", - "... ... \n", - "999995 French official position \n", - "999996 class of 1 Australian 2-6-4-0T locomotive \n", - "999997 multiple unit \n", - "999998 class of Greek electric locomotives \n", - "999999 sportsperson taking part in high jump competit... \n", - "\n", - " node2_desc \\\n", - "0 apple cultivar \n", - "1 Pong console. The same of Otron Gamatic 7600 \n", - "2 badminton championships \n", - "3 class of U.S. destroyers \n", - "4 ethnic group indigenous to the island of Sicil... \n", - "... ... \n", - "999995 former French official position (1800-1926) \n", - "999996 class of 13 German (later French) metre-gauge ... \n", - "999997 class of Chicago Transit Authority cars \n", - "999998 class of 35 Swiss electric locomoties \n", - "999999 sportsperson taking part in steeplechasing com... \n", - "\n", - " node1_sent \\\n", - "0 Sevillana (manzana) apple cultivar is apple \n", - "1 Wii U eight-generation home video game console... \n", - "2 2013 World Senior Badminton Championships O35 ... \n", - "3 Project 30bis 1949 Soviet destroyer class is d... \n", - "4 Singaporeans citizens or residents of Singapor... \n", - "... ... \n", - "999995 Sub-prefect of Nogent-le-Rotrou French officia... \n", - "999996 Tasmanian Government Railways J class class of... \n", - "999997 Rhaetian Railway ABe 4/16 multiple unit is ele... \n", - "999998 OSE class 120 class of Greek electric locomoti... \n", - "999999 high jumper sportsperson taking part in high j... \n", - "\n", - " node2_sent \n", - "0 Calville Blanc d\\'hiver apple cultivar is apple \n", - "1 Gamatic 7600 Pong console. The same of Otron G... \n", - "2 Slovak Badminton Championships U17 badminton c... \n", - "3 Bagley-class destroyer class of U.S. destroyer... \n", - "4 Sicilians ethnic group indigenous to the islan... \n", - "... ... \n", - "999995 Sub-prefect of Pont-Audemer former French offi... \n", - "999996 Alsace-Lorraine E 6 class of 13 German (later ... \n", - "999997 CTA 2000 series class of Chicago Transit Autho... \n", - "999998 BLS Re 4/4 class of 35 Swiss electric locomoti... \n", - "999999 steeplechase runner sportsperson taking part i... \n", - "\n", - "[1000000 rows x 16 columns]" - ] - }, - "execution_count": 196, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1" - ] - }, - { - "cell_type": "code", - "execution_count": 197, - "id": "third-canon", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ff153c8a9ba8458a8c4edf70cee2648d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Batches: 0%| | 0/786 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1_labelnode2_labelno_of_relations
0factorage35167
1free rich company datumsize33222
2free rich company datumrevenue33185
3statecalifornia18062
4supplementmsm glucosamine sulfate15942
\n", - "" - ], - "text/plain": [ - " node1_label node2_label no_of_relations\n", - "0 factor age 35167\n", - "1 free rich company datum size 33222\n", - "2 free rich company datum revenue 33185\n", - "3 state california 18062\n", - "4 supplement msm glucosamine sulfate 15942" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF = pd.read_csv(PROBASE_SOURCE_DIR + 'data-concept/data-concept-instance-relations.txt',header=None, sep='\\t')\n", - "probDF.columns=['node1_label', 'node2_label', 'no_of_relations']\n", - "probDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "alternative-eagle", - "metadata": {}, - "outputs": [], - "source": [ - "probDF['node1'] = probDF.node1_label.apply(lambda p: labels_to_qnodes_dict[p] if p in labels_to_qnodes_dict else None)\n", - "probDF['node2'] = probDF.node2_label.apply(lambda p: labels_to_qnodes_dict[p] if p in labels_to_qnodes_dict else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "spare-terror", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "acc4b8e178af4e5ebb4358c8d92fb7b4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/33377320 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1_labelnode2_labelno_of_relationsnode1node2
0factorage35167Q103858669Q100343219
1free rich company datumsize33222NoneQ322481
2free rich company datumrevenue33185NoneQ850210
3statecalifornia18062P1310None
4supplementmsm glucosamine sulfate15942Q2915731None
..................
33377315popular legacy datum structurebinary search tree1NoneNone
33377316norwegian foodlefse1NoneNone
33377317freeze skillnew fot1NoneNone
33377318enhanced enforcement initiativemonthly impact inspections of problem mine1NoneNone
33377319enhanced enforcement initiativepattern of violation notification1NoneNone
\n", - "

33377320 rows × 5 columns

\n", - "" - ], - "text/plain": [ - " node1_label \\\n", - "0 factor \n", - "1 free rich company datum \n", - "2 free rich company datum \n", - "3 state \n", - "4 supplement \n", - "... ... \n", - "33377315 popular legacy datum structure \n", - "33377316 norwegian food \n", - "33377317 freeze skill \n", - "33377318 enhanced enforcement initiative \n", - "33377319 enhanced enforcement initiative \n", - "\n", - " node2_label no_of_relations \\\n", - "0 age 35167 \n", - "1 size 33222 \n", - "2 revenue 33185 \n", - "3 california 18062 \n", - "4 msm glucosamine sulfate 15942 \n", - "... ... ... \n", - "33377315 binary search tree 1 \n", - "33377316 lefse 1 \n", - "33377317 new fot 1 \n", - "33377318 monthly impact inspections of problem mine 1 \n", - "33377319 pattern of violation notification 1 \n", - "\n", - " node1 node2 \n", - "0 Q103858669 Q100343219 \n", - "1 None Q322481 \n", - "2 None Q850210 \n", - "3 P1310 None \n", - "4 Q2915731 None \n", - "... ... ... \n", - "33377315 None None \n", - "33377316 None None \n", - "33377317 None None \n", - "33377318 None None \n", - "33377319 None None \n", - "\n", - "[33377320 rows x 5 columns]" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF1" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "empty-manner", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "33377320" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(probDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "peripheral-atmosphere", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "955210" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "((~probDF1.node1.isna()) & (~probDF1.node2.isna())).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "intellectual-mitchell", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "factor 364111\n", - "feature 203549\n", - "issue 201986\n", - "product 172106\n", - "item 158829\n", - " ... \n", - "non opec supplier 1\n", - "proactive industry group 1\n", - "car s important information 1\n", - "mesofronts 1\n", - "bucket related offer 1\n", - "Name: node1_label, Length: 5376524, dtype: int64" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF1.node1_label.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "outstanding-shadow", - "metadata": {}, - "outputs": [], - "source": [ - "probDF1.to_csv(PROBASE_INTERM_FILE,index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "alert-announcement", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes = pd.read_csv(PROBASE_INTERM_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "suspected-freight", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = probDF_Qnodes_DF_WQnodes[(~probDF_Qnodes_DF_WQnodes.node1.isna()) & (~probDF_Qnodes_DF_WQnodes.node2.isna())]" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "hazardous-healing", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 955210.000000\n", - "mean 10.028577\n", - "std 85.410631\n", - "min 1.000000\n", - "25% 1.000000\n", - "50% 2.000000\n", - "75% 5.000000\n", - "max 35167.000000\n", - "Name: no_of_relations, dtype: float64" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['no_of_relations'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "upper-guitar", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " probDF_Qnodes_DF_WQnodes1_subset['similarity_value'] = probDF_Qnodes_DF_WQnodes1_subset['no_of_relations'].apply(np.log10) / np.log10(maxNR)\n" - ] - }, - { - "data": { - "text/plain": [ - "count 955210.000000\n", - "mean 0.091717\n", - "std 0.112667\n", - "min 0.000000\n", - "25% 0.000000\n", - "50% 0.066217\n", - "75% 0.153750\n", - "max 1.000000\n", - "Name: similarity_value, dtype: float64" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "maxNR = probDF_Qnodes_DF_WQnodes1_subset['no_of_relations'].max()\n", - "probDF_Qnodes_DF_WQnodes1_subset['similarity_value'] = probDF_Qnodes_DF_WQnodes1_subset['no_of_relations'].apply(np.log10) / np.log10(maxNR)\n", - "probDF_Qnodes_DF_WQnodes1_subset.similarity_value.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "attached-medication", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset.to_csv(PROBASE_FINAL_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "exciting-capitol", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "neither-consumer", - "metadata": {}, - "source": [ - "# Class Similarity Datasets\n", - "\n", - "`zcat derived.dwd_isa_class_count.compact.tsv.gz | cut -f 3 | tail -n +2 | sed -e 's/|/\\n/g' -e 's/:/\\t/g' | sort | uniq > class-counts.tsv`" - ] - }, - { - "cell_type": "code", - "execution_count": 201, - "id": "short-heritage", - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "from tqdm.notebook import tqdm\n", - "import json\n", - "from joblib import Parallel, delayed\n", - "import sys\n", - "\n", - "hierDF_transP279_filtered2_class_arr = []\n", - "\n", - "def fetchClassSim(row, similarity_type):\n", - " resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=\"+similarity_type)\n", - " try:\n", - " row['similarity_value'] = float(resp.json()['similarity']) if resp else -1\n", - " except Exception as exc:\n", - " print(exc)\n", - " print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - " row['similarity_value'] = None\n", - " return row" - ] - }, - { - "cell_type": "code", - "execution_count": 200, - "id": "interested-boxing", - "metadata": {}, - "outputs": [], - "source": [ - "P279childPar_class = pd.read_csv(P279_CHILD_PAR_DISTILBERT_COSSIM_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 205, - "id": "alternate-trance", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e5667a15f08d470ca3907d5200ca13e7", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/304654 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpandas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mP279childPar_class_new\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mP279childPar_class\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprogress_apply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfetchClassSim\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'class'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/tqdm/std.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(df, func, *args, **kwargs)\u001b[0m\n\u001b[1;32m 808\u001b[0m \u001b[0;31m# on the df using our wrapper (which provides bar updating)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 809\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 810\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdf_function\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwrapper\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 811\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 812\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, func, axis, raw, result_type, args, **kwds)\u001b[0m\n\u001b[1;32m 7763\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7764\u001b[0m )\n\u001b[0;32m-> 7765\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7766\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7767\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapplymap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mna_action\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mDataFrame\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mget_result\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 183\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_raw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 184\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 185\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 186\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapply_empty_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mapply_standard\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 276\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres_index\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_series_generator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 277\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 278\u001b[0m \u001b[0;31m# wrap results\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mapply_series_generator\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 288\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseries_gen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 289\u001b[0m \u001b[0;31m# ignore SettingWithCopy here in case the user mutates\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 290\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 291\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mABCSeries\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 292\u001b[0m \u001b[0;31m# If we have a view on v, we need to make a copy because\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mf\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 110\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 111\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 112\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/tqdm/std.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 803\u001b[0m \u001b[0;31m# take a fast or slow code path; so stop when t.total==t.n\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 804\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 805\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 806\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 807\u001b[0m \u001b[0;31m# Apply the provided function (in **kwargs)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36mfetchClassSim\u001b[0;34m(row, similarity_type)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfetchClassSim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msimilarity_type\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mresp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"https://kgtk.isi.edu/similarity_api?q1=\"\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'node1'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m\"&q2=\"\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'node2'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m\"&embedding_type=\"\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0msimilarity_type\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mrow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'similarity_value'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjson\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'similarity'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mresp\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/api.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 75\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'allow_redirects'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 76\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'get'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 77\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/api.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0;31m# cases, and look like a memory leak in others.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0msessions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSession\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 61\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 540\u001b[0m }\n\u001b[1;32m 541\u001b[0m \u001b[0msend_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msettings\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 542\u001b[0;31m \u001b[0mresp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0msend_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 543\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 544\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 653\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 654\u001b[0m \u001b[0;31m# Send the request\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 655\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0madapter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 656\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 657\u001b[0m \u001b[0;31m# Total elapsed time of the request (approximately)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 437\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 438\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mchunked\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 439\u001b[0;31m resp = conn.urlopen(\n\u001b[0m\u001b[1;32m 440\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 441\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 697\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 698\u001b[0m \u001b[0;31m# Make the request on the httplib connection object.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 699\u001b[0;31m httplib_response = self._make_request(\n\u001b[0m\u001b[1;32m 700\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 701\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_make_request\u001b[0;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001b[0m\n\u001b[1;32m 380\u001b[0m \u001b[0;31m# Trigger any extra validation we need to do.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 381\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 382\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_conn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 383\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mSocketTimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBaseSSLError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 384\u001b[0m \u001b[0;31m# Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;31m# Force connect early to allow us to validate the connection.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1009\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"sock\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# AppEngine might not have `.sock`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1010\u001b[0;31m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1011\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1012\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_verified\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/connection.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 409\u001b[0m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_default_certs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 411\u001b[0;31m self.sock = ssl_wrap_socket(\n\u001b[0m\u001b[1;32m 412\u001b[0m \u001b[0msock\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 413\u001b[0m \u001b[0mkeyfile\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkey_file\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/util/ssl_.py\u001b[0m in \u001b[0;36mssl_wrap_socket\u001b[0;34m(sock, keyfile, certfile, cert_reqs, ca_certs, server_hostname, ssl_version, ciphers, ssl_context, ca_cert_dir, key_password, ca_cert_data, tls_in_tls)\u001b[0m\n\u001b[1;32m 379\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mca_certs\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mca_cert_dir\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mca_cert_data\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 380\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 381\u001b[0;31m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_verify_locations\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mca_certs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mca_cert_dir\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mca_cert_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 382\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mIOError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mOSError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 383\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mSSLError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "tqdm.pandas()\n", - "P279childPar_class_new = P279childPar_class.progress_apply(fetchClassSim, axis=1, args=('class',))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "adolescent-nurse", - "metadata": {}, - "outputs": [], - "source": [ - "P279childPar_class_new.to_csv(P279_CHILD_PAR_CLASSSIM_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "warming-vertical", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 202, - "id": "imported-mounting", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c0f3c043918e4634a2dc5bdc7f767c7a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/304654 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mP279childPar_class_arr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParallel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_jobs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdelayed\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfetchClassSim\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'class'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mP279childPar_class\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterrows\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtotal\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mP279childPar_class\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/joblib/parallel.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, iterable)\u001b[0m\n\u001b[1;32m 1052\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1053\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_backend\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieval_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1054\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1055\u001b[0m \u001b[0;31m# Make sure that we get a last message telling us we are done\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1056\u001b[0m \u001b[0melapsed_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_start_time\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/joblib/parallel.py\u001b[0m in \u001b[0;36mretrieve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 931\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 932\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_backend\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'supports_timeout'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 933\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 934\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 935\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/joblib/_parallel_backends.py\u001b[0m in \u001b[0;36mwrap_future_result\u001b[0;34m(future, timeout)\u001b[0m\n\u001b[1;32m 540\u001b[0m AsyncResults.get from multiprocessing.\"\"\"\n\u001b[1;32m 541\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 542\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfuture\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 543\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mCfTimeoutError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 544\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTimeoutError\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/concurrent/futures/_base.py\u001b[0m in \u001b[0;36mresult\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 432\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__get_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 434\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_condition\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 435\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_state\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mCANCELLED\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mCANCELLED_AND_NOTIFIED\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/threading.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 300\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# restore state no matter what (e.g., KeyboardInterrupt)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 301\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 302\u001b[0;31m \u001b[0mwaiter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macquire\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 303\u001b[0m \u001b[0mgotit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 304\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "P279childPar_class_arr = Parallel(n_jobs=5)(delayed(fetchClassSim)(row, 'class') for _, row in tqdm(P279childPar_class.iterrows(), total=len(P279childPar_class)))\n", - " " - ] - }, - { - "cell_type": "markdown", - "id": "spread-snapshot", - "metadata": {}, - "source": [ - "## ChildPar" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "supposed-newport", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2 = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "reliable-publisher", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2[['node1', 'node2']].rename(columns={'node1':'q1', 'node2':'q2'}).to_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_min_cols_FOR_CLASS.tsv', sep='\\t', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 212, - "id": "fifty-garden", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "21f6e6799b7d425fa5c2d3d79d6ae2dc", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "215bbc5968f94456a3a50e8d182f06d5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "class_dict = {}\n", - "hierDF_transP279_filtered = pd.read_csv(P279_CHILD_PAR_DISTILBERT_COSSIM_FILE)\n", - "p279QnodesList = set(hierDF_transP279_filtered.node1.to_list() + hierDF_transP279_filtered.node2.to_list())\n", - "with gzip.open(DERIVED_IS_COUNTS_FILE) as class_file:\n", - " for line in tqdm(class_file):\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " if line[0] in p279QnodesList:\n", - " class_dict[line[0]] = line[2].strip()\n", - "all_class_count_dict = {}\n", - "with open(CLASS_COUNTS_FILE) as class_file:\n", - " for line in tqdm(class_file):\n", - " line = line.split('\\t')\n", - " if line[0] in p279QnodesList:\n", - " all_class_count_dict[line[0]] = line[1].strip()\n", - "\n", - "\n", - "class SemanticSimilarity(object):\n", - " def __init__(self):\n", - "# self.config = config\n", - "# self.embeddings_type = ['class']\n", - " self.N = float(52546967)\n", - " self.all_class_count_dict = all_class_count_dict\n", - " \n", - " def get_qnode_details(self, qnodes: list):\n", - " global class_dict\n", - " qnodes_dict = {}\n", - " qnodes_dict[qnodes[0]] = class_dict.get(qnodes[0],'')\n", - " qnodes_dict[qnodes[1]] = class_dict.get(qnodes[1],'')\n", - " return qnodes_dict\n", - " \n", - " def compute_class_similarity(self, q1, q2):\n", - " qnodes_dict = self.get_qnode_details([q1, q2])\n", - "# print(qnodes_dict)\n", - " feature_dict, feature_count_dict = self.build_qnode_feature_dict(qnodes_dict)\n", - "# print(feature_dict, feature_count_dict)\n", - " normalized_classes_idf = self.normalize_idf_classes(feature_dict, feature_count_dict)\n", - " if q1 in feature_dict and q2 in feature_dict:\n", - " q1_cl = set(feature_dict[q1])\n", - " q2_cl = set(feature_dict[q2])\n", - " q1_q2_intersection = q1_cl.intersection(q2_cl)\n", - "\n", - " _similarity = sum([normalized_classes_idf.get(c) for c in q1_q2_intersection])\n", - " return {\n", - " 'similarity': _similarity\n", - " }\n", - " return {\n", - " 'similarity': None\n", - " }\n", - "\n", - " def build_qnode_feature_dict(self, qnodes_dict: dict) -> (dict, dict):\n", - " feature_dict = {}\n", - " feature_count_dict = {}\n", - "\n", - " for qnode in qnodes_dict:\n", - " feature_val = []\n", - " \n", - " if '|' in qnodes_dict[qnode]:\n", - " cl = qnodes_dict[qnode].split(\"|\")\n", - "\n", - " for c in cl:\n", - " vals = c.split(\":\")\n", - " feature_val.append(vals[0])\n", - " feature_count_dict[vals[0]] = float(vals[1])\n", - " if qnode not in feature_val:\n", - " feature_val.append(qnode)\n", - " if qnode not in feature_count_dict:\n", - " feature_count_dict[qnode] = float(self.all_class_count_dict.get(qnode, 1.0))\n", - " feature_dict[qnode] = feature_val\n", - "\n", - " return feature_dict, feature_count_dict\n", - "\n", - " def normalize_idf_classes(self, feature_dict, feature_count_dict):\n", - "\n", - " classes_count = {}\n", - " for qnode in feature_dict:\n", - "\n", - " classes = feature_dict[qnode]\n", - " for c in classes:\n", - " if c not in classes_count:\n", - " classes_count[c] = 0\n", - " classes_count[c] += 1\n", - "\n", - " classes_idf = self.calculate_idf_features(feature_count_dict)\n", - "\n", - " # multiply class count with idf\n", - " for c in classes_idf:\n", - " classes_idf[c] = classes_count[c] * classes_idf[c]\n", - "\n", - " # normalize the idf scores so that they sum to 1\n", - " classes_idf_sum = sum([classes_idf[x] for x in classes_idf])\n", - " for c in classes_idf:\n", - " classes_idf[c] = classes_idf[c] / classes_idf_sum\n", - "\n", - " return classes_idf\n", - "\n", - " def calculate_idf_features(self, feature_count_dict):\n", - " _ = {}\n", - " for c in feature_count_dict:\n", - " _[c] = math.log(self.N / feature_count_dict[c])\n", - " return _" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "streaming-match", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "flying-perception", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# from tqdm.notebook import tqdm\n", - "# import json\n", - "# from joblib import Parallel, delayed\n", - "# import sys\n", - "\n", - "# hierDF_transP279_filtered2_class_arr = []\n", - "\n", - "# def fetchClassSim(row):\n", - "# resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\")\n", - "# try:\n", - "# row['classSim'] = float(resp.json()['similarity']) if resp else -1\n", - "# except Exception as exc:\n", - "# print(exc)\n", - "# print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - "# row['classSim'] = None\n", - "# row['Resp_code'] = resp\n", - "# return row\n", - "\n", - "# hierDF_transP279_filtered2_class_arr = Parallel(n_jobs=5)(delayed(fetchClassSim)(row) for _, row in tqdm(hierDF_transP279_filtered2.iloc[:100].iterrows(), total=len(hierDF_transP279_filtered2)))\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "empirical-suspect", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2_class_arr" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "helpful-medline", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2_class = pd.DataFrame(hierDF_transP279_filtered2_class_arr)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "activated-excuse", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: []\n", - "Index: []" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "baking-input", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "302108" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.classSim.isna().sum()" - ] - }, - { - "cell_type": "markdown", - "id": "cognitive-decade", - "metadata": {}, - "source": [ - "## Siblings" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "pacific-warehouse", - "metadata": {}, - "outputs": [], - "source": [ - "P279_3M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')\n", - "P279_10M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outdoor-sense", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# from tqdm.notebook import tqdm\n", - "# import json\n", - "# from joblib import Parallel, delayed\n", - "\n", - "# P279_3M_data_class_arr = []\n", - "\n", - "# def fetchClassSim(row):\n", - "# try:\n", - "# resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - "# row['classSim'] = float(resp) if resp else -1\n", - "# except:\n", - "# print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - "# row['classSim'] = None\n", - "# return row\n", - "\n", - "# P279_3M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_3M_data.iterrows(), total=len(P279_3M_data)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "handy-coral", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# from tqdm.notebook import tqdm\n", - "# import json\n", - "# from joblib import Parallel, delayed\n", - "\n", - "# P279_10M_data_class_arr = []\n", - "\n", - "# def fetchClassSim(row):\n", - "# try:\n", - "# resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - "# row['classSim'] = float(resp) if resp else -1\n", - "# except:\n", - "# print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - "# row['classSim'] = None\n", - "# return row\n", - "\n", - "# P279_10M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_10M_data.iterrows(), total=len(P279_10M_data)))" - ] - }, - { - "cell_type": "markdown", - "id": "wired-treatment", - "metadata": {}, - "source": [ - "# JC Similarity Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "textile-productivity", - "metadata": {}, - "source": [ - "## ChildPar" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "aggregate-tiger", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2 = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "cardiac-fence", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "978c7892341342029d881b0bf31a6f66", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/303284 [00:00\n", - " Name: 0, dtype: object,\n", - " Unnamed: 0 1\n", - " id Q17372377-P279-Q100026-fd42bd71-0\n", - " node1 Q17372377\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.700515\n", - " classSim 0.94674\n", - " Resp_code \n", - " Name: 1, dtype: object,\n", - " Unnamed: 0 2\n", - " id Q17372444-P279-Q100026-ca0fc4bd-0\n", - " node1 Q17372444\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.683245\n", - " classSim 0.946647\n", - " Resp_code \n", - " Name: 2, dtype: object,\n", - " Unnamed: 0 3\n", - " id Q17372455-P279-Q100026-c2b1bf36-0\n", - " node1 Q17372455\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.689516\n", - " classSim 0.943256\n", - " Resp_code \n", - " Name: 3, dtype: object,\n", - " Unnamed: 0 4\n", - " id Q2029940-P279-Q100026-ceba4380-0\n", - " node1 Q2029940\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.603161\n", - " classSim 0.809487\n", - " Resp_code \n", - " Name: 4, dtype: object,\n", - " Unnamed: 0 5\n", - " id Q209480-P279-Q100026-a218e96b-0\n", - " node1 Q209480\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.61352\n", - " classSim 0.975716\n", - " Resp_code \n", - " Name: 5, dtype: object,\n", - " Unnamed: 0 6\n", - " id Q77929250-P279-Q100026-964ec021-0\n", - " node1 Q77929250\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.76767\n", - " classSim 0.961308\n", - " Resp_code \n", - " Name: 6, dtype: object,\n", - " Unnamed: 0 7\n", - " id Q1087043-P279-Q1000371-945e7797-0\n", - " node1 Q1087043\n", - " label P279\n", - " node2 Q1000371\n", - " bert2SentSim 0.699843\n", - " classSim 0.671266\n", - " Resp_code \n", - " Name: 7, dtype: object,\n", - " Unnamed: 0 8\n", - " id Q384656-P279-Q100047-6147b9a8-0\n", - " node1 Q384656\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 8, dtype: object,\n", - " Unnamed: 0 9\n", - " id Q471089-P279-Q100047-473b504b-0\n", - " node1 Q471089\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.679593\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 9, dtype: object,\n", - " Unnamed: 0 10\n", - " id Q471094-P279-Q100047-14b1b1df-0\n", - " node1 Q471094\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 10, dtype: object,\n", - " Unnamed: 0 11\n", - " id Q471102-P279-Q100047-886a847c-0\n", - " node1 Q471102\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 11, dtype: object,\n", - " Unnamed: 0 12\n", - " id Q471127-P279-Q100047-6738fc46-0\n", - " node1 Q471127\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 12, dtype: object,\n", - " Unnamed: 0 13\n", - " id Q471144-P279-Q100047-766e1fa3-0\n", - " node1 Q471144\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.811462\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 13, dtype: object,\n", - " Unnamed: 0 14\n", - " id Q471158-P279-Q100047-7955aa40-0\n", - " node1 Q471158\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 14, dtype: object,\n", - " Unnamed: 0 15\n", - " id Q100052562-P279-Q100052008-1a4fa432-0\n", - " node1 Q100052562\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.515993\n", - " classSim 0.913344\n", - " Resp_code \n", - " Name: 15, dtype: object,\n", - " Unnamed: 0 16\n", - " id Q100052791-P279-Q100052008-1d15b1ae-0\n", - " node1 Q100052791\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.478483\n", - " classSim 0.907455\n", - " Resp_code \n", - " Name: 16, dtype: object,\n", - " Unnamed: 0 17\n", - " id Q100119502-P279-Q100052008-d2c330a4-0\n", - " node1 Q100119502\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.51221\n", - " classSim 0.913229\n", - " Resp_code \n", - " Name: 17, dtype: object,\n", - " Unnamed: 0 18\n", - " id Q88594442-P279-Q100052008-badba21b-0\n", - " node1 Q88594442\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.424672\n", - " classSim 0.91916\n", - " Resp_code \n", - " Name: 18, dtype: object,\n", - " Unnamed: 0 19\n", - " id Q1133024-P279-Q1000660-6d8a1a17-0\n", - " node1 Q1133024\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.556017\n", - " classSim 0.96031\n", - " Resp_code \n", - " Name: 19, dtype: object,\n", - " Unnamed: 0 20\n", - " id Q1231309-P279-Q1000660-656bad41-0\n", - " node1 Q1231309\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.473025\n", - " classSim 0.987153\n", - " Resp_code \n", - " Name: 20, dtype: object,\n", - " Unnamed: 0 21\n", - " id Q1892554-P279-Q1000660-b60addd4-0\n", - " node1 Q1892554\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.710084\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 21, dtype: object,\n", - " Unnamed: 0 22\n", - " id Q2835946-P279-Q1000660-ff0a5cf9-0\n", - " node1 Q2835946\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.69158\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 22, dtype: object,\n", - " Unnamed: 0 23\n", - " id Q3413373-P279-Q1000660-9d565f5e-0\n", - " node1 Q3413373\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.676028\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 23, dtype: object,\n", - " Unnamed: 0 24\n", - " id Q5611316-P279-Q1000660-6b051008-0\n", - " node1 Q5611316\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.652025\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 24, dtype: object,\n", - " Unnamed: 0 25\n", - " id Q649977-P279-Q1000660-cc4475c9-0\n", - " node1 Q649977\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.548393\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 25, dtype: object,\n", - " Unnamed: 0 26\n", - " id Q7269432-P279-Q1000660-8976e0ff-0\n", - " node1 Q7269432\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.439381\n", - " classSim 0.989483\n", - " Resp_code \n", - " Name: 26, dtype: object,\n", - " Unnamed: 0 27\n", - " id Q844980-P279-Q1000660-5f020e98-0\n", - " node1 Q844980\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.678084\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 27, dtype: object,\n", - " Unnamed: 0 28\n", - " id Q1051606-P279-Q1000809-995e5221-0\n", - " node1 Q1051606\n", - " label P279\n", - " node2 Q1000809\n", - " bert2SentSim 0.740599\n", - " classSim 0.912943\n", - " Resp_code \n", - " Name: 28, dtype: object,\n", - " Unnamed: 0 29\n", - " id Q4984171-P279-Q1000809-95749f41-0\n", - " node1 Q4984171\n", - " label P279\n", - " node2 Q1000809\n", - " bert2SentSim 0.808338\n", - " classSim 0.957835\n", - " Resp_code \n", - " Name: 29, dtype: object,\n", - " Unnamed: 0 30\n", - " id Q2047562-P279-Q1001041-45feee81-0\n", - " node1 Q2047562\n", - " label P279\n", - " node2 Q1001041\n", - " bert2SentSim 0.359032\n", - " classSim 0.707243\n", - " Resp_code \n", - " Name: 30, dtype: object,\n", - " Unnamed: 0 31\n", - " id Q8069073-P279-Q1001041-3f13f5bb-0\n", - " node1 Q8069073\n", - " label P279\n", - " node2 Q1001041\n", - " bert2SentSim 0.769952\n", - " classSim 0.849692\n", - " Resp_code \n", - " Name: 31, dtype: object,\n", - " Unnamed: 0 32\n", - " id Q1070955-P279-Q1001051-5df03dac-0\n", - " node1 Q1070955\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.800508\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 32, dtype: object,\n", - " Unnamed: 0 33\n", - " id Q1153367-P279-Q1001051-34783d55-0\n", - " node1 Q1153367\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.837581\n", - " classSim 0.876525\n", - " Resp_code \n", - " Name: 33, dtype: object,\n", - " Unnamed: 0 34\n", - " id Q1958065-P279-Q1001051-d6eb5968-0\n", - " node1 Q1958065\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.848892\n", - " classSim 0.707989\n", - " Resp_code \n", - " Name: 34, dtype: object,\n", - " Unnamed: 0 35\n", - " id Q209680-P279-Q1001051-072eeb1b-0\n", - " node1 Q209680\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.656872\n", - " classSim 0.724838\n", - " Resp_code \n", - " Name: 35, dtype: object,\n", - " Unnamed: 0 36\n", - " id Q2986204-P279-Q1001051-7b21695a-0\n", - " node1 Q2986204\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.816212\n", - " classSim 0.796208\n", - " Resp_code \n", - " Name: 36, dtype: object,\n", - " Unnamed: 0 37\n", - " id Q385530-P279-Q1001051-17db3704-0\n", - " node1 Q385530\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.75061\n", - " classSim 0.780191\n", - " Resp_code \n", - " Name: 37, dtype: object,\n", - " Unnamed: 0 38\n", - " id Q41795401-P279-Q1001051-5747dcc4-0\n", - " node1 Q41795401\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.787191\n", - " classSim 0.88381\n", - " Resp_code \n", - " Name: 38, dtype: object,\n", - " Unnamed: 0 39\n", - " id Q612405-P279-Q1001051-bb6fa17c-0\n", - " node1 Q612405\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.72366\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 39, dtype: object,\n", - " Unnamed: 0 40\n", - " id Q668439-P279-Q1001051-bbba9ea3-0\n", - " node1 Q668439\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.698926\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 40, dtype: object,\n", - " Unnamed: 0 41\n", - " id Q7133779-P279-Q1001051-4fc71627-0\n", - " node1 Q7133779\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.576617\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 41, dtype: object,\n", - " Unnamed: 0 42\n", - " id Q7630946-P279-Q1001051-2e78f5b5-0\n", - " node1 Q7630946\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.632298\n", - " classSim 0.796208\n", - " Resp_code \n", - " Name: 42, dtype: object,\n", - " Unnamed: 0 43\n", - " id Q1056352-P279-Q1001059-c1976180-0\n", - " node1 Q1056352\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.717131\n", - " classSim 0.886053\n", - " Resp_code \n", - " Name: 43, dtype: object,\n", - " Unnamed: 0 44\n", - " id Q2123051-P279-Q1001059-18b4564b-0\n", - " node1 Q2123051\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.606046\n", - " classSim 0.465094\n", - " Resp_code \n", - " Name: 44, dtype: object,\n", - " Unnamed: 0 45\n", - " id Q444278-P279-Q1001059-0c74af28-0\n", - " node1 Q444278\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.481163\n", - " classSim 0.881922\n", - " Resp_code \n", - " Name: 45, dtype: object,\n", - " Unnamed: 0 46\n", - " id Q7240696-P279-Q1001059-31dfa177-0\n", - " node1 Q7240696\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.752948\n", - " classSim 0.881922\n", - " Resp_code \n", - " Name: 46, dtype: object,\n", - " Unnamed: 0 47\n", - " id Q85776190-P279-Q1001059-b7a4aad6-0\n", - " node1 Q85776190\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.747289\n", - " classSim 0.53963\n", - " Resp_code \n", - " Name: 47, dtype: object,\n", - " Unnamed: 0 48\n", - " id Q100052008-P279-Q100116222-d1597eca-0\n", - " node1 Q100052008\n", - " label P279\n", - " node2 Q100116222\n", - " bert2SentSim 0.725062\n", - " classSim 0.909364\n", - " Resp_code \n", - " Name: 48, dtype: object,\n", - " Unnamed: 0 49\n", - " id Q27303706-P279-Q100116222-526530c6-0\n", - " node1 Q27303706\n", - " label P279\n", - " node2 Q100116222\n", - " bert2SentSim 0.537653\n", - " classSim 0.917887\n", - " Resp_code \n", - " Name: 49, dtype: object,\n", - " Unnamed: 0 50\n", - " id Q99565932-P279-Q100116222-139f958c-0\n", - " node1 Q99565932\n", - " label P279\n", - " node2 Q100116222\n", - " bert2SentSim 0.691907\n", - " classSim 0.892978\n", - " Resp_code \n", - " Name: 50, dtype: object,\n", - " Unnamed: 0 51\n", - " id Q1416523-P279-Q1001329-2b6d0c1e-0\n", - " node1 Q1416523\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.160931\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 51, dtype: object,\n", - " Unnamed: 0 52\n", - " id Q2963918-P279-Q1001329-c85a352f-0\n", - " node1 Q2963918\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.469497\n", - " classSim 0.878703\n", - " Resp_code \n", - " Name: 52, dtype: object,\n", - " Unnamed: 0 53\n", - " id Q56756850-P279-Q1001329-6cb334b1-0\n", - " node1 Q56756850\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.412103\n", - " classSim 0.363595\n", - " Resp_code \n", - " Name: 53, dtype: object,\n", - " Unnamed: 0 54\n", - " id Q60782200-P279-Q1001329-0b4da903-0\n", - " node1 Q60782200\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.239958\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 54, dtype: object,\n", - " Unnamed: 0 55\n", - " id Q78841106-P279-Q1001329-d474c822-0\n", - " node1 Q78841106\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.496099\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 55, dtype: object,\n", - " Unnamed: 0 56\n", - " id Q798863-P279-Q1001329-c284c2ec-0\n", - " node1 Q798863\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.597623\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 56, dtype: object,\n", - " Unnamed: 0 57\n", - " id Q96337569-P279-Q1001329-b8b30fb9-0\n", - " node1 Q96337569\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.210435\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 57, dtype: object,\n", - " Unnamed: 0 58\n", - " id Q3403683-P279-Q100135295-fd0a0a92-0\n", - " node1 Q3403683\n", - " label P279\n", - " node2 Q100135295\n", - " bert2SentSim 0.371629\n", - " classSim 0.811291\n", - " Resp_code \n", - " Name: 58, dtype: object,\n", - " Unnamed: 0 59\n", - " id Q100095237-P279-Q100136951-a7f6f753-0\n", - " node1 Q100095237\n", - " label P279\n", - " node2 Q100136951\n", - " bert2SentSim 0.883361\n", - " classSim 0.909817\n", - " Resp_code \n", - " Name: 59, dtype: object,\n", - " Unnamed: 0 60\n", - " id Q100136066-P279-Q100136951-1e2368cd-0\n", - " node1 Q100136066\n", - " label P279\n", - " node2 Q100136951\n", - " bert2SentSim 0.883361\n", - " classSim 0.843155\n", - " Resp_code \n", - " Name: 60, dtype: object,\n", - " Unnamed: 0 61\n", - " id Q235041-P279-Q100136951-07d30679-0\n", - " node1 Q235041\n", - " label P279\n", - " node2 Q100136951\n", - " bert2SentSim 0.607752\n", - " classSim 0.719618\n", - " Resp_code \n", - " Name: 61, dtype: object,\n", - " Unnamed: 0 62\n", - " id Q22006653-P279-Q1001378-98eddb62-0\n", - " node1 Q22006653\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.366579\n", - " classSim 0.5263\n", - " Resp_code \n", - " Name: 62, dtype: object,\n", - " Unnamed: 0 63\n", - " id Q2895476-P279-Q1001378-9d15228e-0\n", - " node1 Q2895476\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.682378\n", - " classSim 0.75066\n", - " Resp_code \n", - " Name: 63, dtype: object,\n", - " Unnamed: 0 64\n", - " id Q2918907-P279-Q1001378-39c09697-0\n", - " node1 Q2918907\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.813292\n", - " classSim 0.775328\n", - " Resp_code \n", - " Name: 64, dtype: object,\n", - " Unnamed: 0 65\n", - " id Q3516833-P279-Q1001378-30384a7c-0\n", - " node1 Q3516833\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.684669\n", - " classSim 0.916831\n", - " Resp_code \n", - " Name: 65, dtype: object,\n", - " Unnamed: 0 66\n", - " id Q4129855-P279-Q1001378-3ad464f7-0\n", - " node1 Q4129855\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.740775\n", - " classSim 0.905545\n", - " Resp_code \n", - " Name: 66, dtype: object,\n", - " Unnamed: 0 67\n", - " id Q5197004-P279-Q1001378-513f9939-0\n", - " node1 Q5197004\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.642596\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 67, dtype: object,\n", - " Unnamed: 0 68\n", - " id Q7237336-P279-Q1001378-55e73e1a-0\n", - " node1 Q7237336\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.58928\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 68, dtype: object,\n", - " Unnamed: 0 69\n", - " id Q738160-P279-Q1001378-b69af0cb-0\n", - " node1 Q738160\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.813292\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 69, dtype: object,\n", - " Unnamed: 0 70\n", - " id Q8317-P279-Q1001378-a56c669f-0\n", - " node1 Q8317\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.636886\n", - " classSim 0.541961\n", - " Resp_code \n", - " Name: 70, dtype: object,\n", - " Unnamed: 0 71\n", - " id Q86908314-P279-Q1001378-7a81e91b-0\n", - " node1 Q86908314\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.421366\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 71, dtype: object,\n", - " Unnamed: 0 72\n", - " id Q86910224-P279-Q1001378-b427331c-0\n", - " node1 Q86910224\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.584772\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 72, dtype: object,\n", - " Unnamed: 0 73\n", - " id Q100148346-P279-Q100148352-003654ac-0\n", - " node1 Q100148346\n", - " label P279\n", - " node2 Q100148352\n", - " bert2SentSim 0.872339\n", - " classSim 0.951283\n", - " Resp_code \n", - " Name: 73, dtype: object,\n", - " Unnamed: 0 74\n", - " id Q27147769-P279-Q100148352-8254b7c4-0\n", - " node1 Q27147769\n", - " label P279\n", - " node2 Q100148352\n", - " bert2SentSim 0.886007\n", - " classSim 0.924902\n", - " Resp_code \n", - " Name: 74, dtype: object,\n", - " Unnamed: 0 75\n", - " id Q14747611-P279-Q100159-567e45a7-0\n", - " node1 Q14747611\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.50114\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 75, dtype: object,\n", - " Unnamed: 0 76\n", - " id Q17089549-P279-Q100159-3247e0d4-0\n", - " node1 Q17089549\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.705335\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 76, dtype: object,\n", - " Unnamed: 0 77\n", - " id Q18923049-P279-Q100159-04db261f-0\n", - " node1 Q18923049\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.861815\n", - " classSim 0.719858\n", - " Resp_code \n", - " Name: 77, dtype: object,\n", - " Unnamed: 0 78\n", - " id Q2056084-P279-Q100159-94d1b7b8-0\n", - " node1 Q2056084\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.782052\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 78, dtype: object,\n", - " Unnamed: 0 79\n", - " id Q5097845-P279-Q100159-c2bd0b24-0\n", - " node1 Q5097845\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.551256\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 79, dtype: object,\n", - " Unnamed: 0 80\n", - " id Q6061403-P279-Q100159-d5101564-0\n", - " node1 Q6061403\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.565718\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 80, dtype: object,\n", - " Unnamed: 0 81\n", - " id Q652653-P279-Q100159-bd6c5d3a-0\n", - " node1 Q652653\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.501037\n", - " classSim 0.837687\n", - " Resp_code \n", - " Name: 81, dtype: object,\n", - " Unnamed: 0 82\n", - " id Q66293226-P279-Q100159-ad4b8016-0\n", - " node1 Q66293226\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.8089\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 82, dtype: object,\n", - " Unnamed: 0 83\n", - " id Q100166380-P279-Q100166391-4684ea65-0\n", - " node1 Q100166380\n", - " label P279\n", - " node2 Q100166391\n", - " bert2SentSim 0.752609\n", - " classSim 0.799499\n", - " Resp_code \n", - " Name: 83, dtype: object,\n", - " Unnamed: 0 84\n", - " id Q244326-P279-Q100166391-35359099-0\n", - " node1 Q244326\n", - " label P279\n", - " node2 Q100166391\n", - " bert2SentSim 0.522545\n", - " classSim 0.470975\n", - " Resp_code \n", - " Name: 84, dtype: object,\n", - " Unnamed: 0 85\n", - " id Q40551-P279-Q100166391-7242baf9-0\n", - " node1 Q40551\n", - " label P279\n", - " node2 Q100166391\n", - " bert2SentSim 0.74986\n", - " classSim 0.781795\n", - " Resp_code \n", - " Name: 85, dtype: object,\n", - " Unnamed: 0 86\n", - " id Q102108504-P279-Q100171002-7ccf3934-0\n", - " node1 Q102108504\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.680867\n", - " classSim None\n", - " Resp_code \n", - " Name: 86, dtype: object,\n", - " Unnamed: 0 87\n", - " id Q1150647-P279-Q100171002-fb1cad26-0\n", - " node1 Q1150647\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.664551\n", - " classSim 0.795416\n", - " Resp_code \n", - " Name: 87, dtype: object,\n", - " Unnamed: 0 88\n", - " id Q1503443-P279-Q100171002-8282ae74-0\n", - " node1 Q1503443\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.748802\n", - " classSim 0.822611\n", - " Resp_code \n", - " Name: 88, dtype: object,\n", - " Unnamed: 0 89\n", - " id Q2616305-P279-Q100171002-49dc8346-0\n", - " node1 Q2616305\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.646817\n", - " classSim 0.887266\n", - " Resp_code \n", - " Name: 89, dtype: object,\n", - " Unnamed: 0 90\n", - " id Q24050179-P279-Q100195948-90966900-0\n", - " node1 Q24050179\n", - " label P279\n", - " node2 Q100195948\n", - " bert2SentSim 0.652214\n", - " classSim 0.698738\n", - " Resp_code \n", - " Name: 90, dtype: object,\n", - " Unnamed: 0 91\n", - " id Q29479539-P279-Q100195948-e222789a-0\n", - " node1 Q29479539\n", - " label P279\n", - " node2 Q100195948\n", - " bert2SentSim 0.689148\n", - " classSim 0.681145\n", - " Resp_code \n", - " Name: 91, dtype: object,\n", - " Unnamed: 0 92\n", - " id Q308859-P279-Q100195948-a5841742-0\n", - " node1 Q308859\n", - " label P279\n", - " node2 Q100195948\n", - " bert2SentSim 0.750328\n", - " classSim 0.279686\n", - " Resp_code \n", - " Name: 92, dtype: object,\n", - " Unnamed: 0 93\n", - " id Q100251305-P279-Q100251275-02ddd08e-0\n", - " node1 Q100251305\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.486286\n", - " classSim 0.94603\n", - " Resp_code \n", - " Name: 93, dtype: object,\n", - " Unnamed: 0 94\n", - " id Q100251705-P279-Q100251275-fa0c89c7-0\n", - " node1 Q100251705\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.370606\n", - " classSim 0.94603\n", - " Resp_code \n", - " Name: 94, dtype: object,\n", - " Unnamed: 0 95\n", - " id Q16007968-P279-Q100251275-318d5598-0\n", - " node1 Q16007968\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.478886\n", - " classSim 0.9303\n", - " Resp_code \n", - " Name: 95, dtype: object,\n", - " Unnamed: 0 96\n", - " id Q3310017-P279-Q100251275-772909ea-0\n", - " node1 Q3310017\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.57202\n", - " classSim 0.929488\n", - " Resp_code \n", - " Name: 96, dtype: object,\n", - " Unnamed: 0 97\n", - " id Q4855428-P279-Q100251275-fbf2100a-0\n", - " node1 Q4855428\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.545835\n", - " classSim 0.931676\n", - " Resp_code \n", - " Name: 97, dtype: object,\n", - " Unnamed: 0 98\n", - " id Q862086-P279-Q100251275-faf57342-0\n", - " node1 Q862086\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.630551\n", - " classSim 0.948207\n", - " Resp_code \n", - " Name: 98, dtype: object,\n", - " Unnamed: 0 99\n", - " id Q15209696-P279-Q100257358-c4b60f40-0\n", - " node1 Q15209696\n", - " label P279\n", - " node2 Q100257358\n", - " bert2SentSim 0.484455\n", - " classSim 0.610338\n", - " Resp_code \n", - " Name: 99, dtype: object]" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class_arr" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "worth-croatia", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2_class = pd.DataFrame(hierDF_transP279_filtered2_class_arr)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "changing-burning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: []\n", - "Index: []" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "portuguese-practitioner", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "302108" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.classSim.isna().sum()" - ] - }, - { - "cell_type": "markdown", - "id": "breathing-bicycle", - "metadata": {}, - "source": [ - "## Siblings" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "historic-maria", - "metadata": {}, - "outputs": [], - "source": [ - "P279_3M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')\n", - "P279_10M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "spanish-killer", - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "from tqdm.notebook import tqdm\n", - "import json\n", - "from joblib import Parallel, delayed\n", - "\n", - "P279_3M_data_class_arr = []\n", - "\n", - "def fetchClassSim(row):\n", - " try:\n", - " resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['classSim'] = float(resp) if resp else -1\n", - " except:\n", - " print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - " row['classSim'] = None\n", - " return row\n", - "\n", - "P279_3M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_3M_data.iterrows(), total=len(P279_3M_data)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "collectible-modern", - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "from tqdm.notebook import tqdm\n", - "import json\n", - "from joblib import Parallel, delayed\n", - "\n", - "P279_10M_data_class_arr = []\n", - "\n", - "def fetchClassSim(row):\n", - " try:\n", - " resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['classSim'] = float(resp) if resp else -1\n", - " except:\n", - " print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - " row['classSim'] = None\n", - " return row\n", - "\n", - "P279_10M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_10M_data.iterrows(), total=len(P279_10M_data)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "removable-watershed", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fossil-psychiatry", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "rapid-drink", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "liquid-symphony", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "intellectual-rainbow", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "integrated-intention", - "metadata": {}, - "source": [ - "# Wiki-CS" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "functioning-scholarship", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import os\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from matplotlib import pyplot" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "unique-weekend", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF = pd.read_csv('../data/wikidata-cs-20200504.tsv',sep='\\t')\n", - "mapper1 = {'/r/DistinctFrom': 'distinctness',\n", - " '/r/Antonym': 'antonymy',\n", - " '/r/Synonym': 'synonymy',\n", - " '/r/SimilarTo': 'similarity',\n", - " '/r/DerivedFrom': 'derivation',\n", - " '/r/IsA': 'inheritance',\n", - " '/r/PartOf': 'meronymy',\n", - " '/r/MadeOf': 'material',\n", - " '/r/CreatedBy': 'attribution',\n", - " '/r/UsedFor': 'utility',\n", - " '/r/HasProperty': 'properties',\n", - " '/r/Causes': 'causation',\n", - " '/r/HasPrerequisite': 'ordering',\n", - " '/r/HasContext': 'context',\n", - " '/r/RelatedTo': 'other'}\n", - "\n", - "wikiDF['dim'] = wikiDF['relation'].apply(lambda p: mapper1[p])\n", - "wikiDF['category'] = wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' or p == 'similarity' else 'M')\n", - "wikiDF['dim'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "located-swaziland", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' else 'M').value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sharing-scientist", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF[wikiDF.apply(lambda p: p['node1'].startswith('Q') and p['node2'].startswith('Q'), axis=1)]\n", - "wikiDF1.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fewer-place", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF1.rename(columns={'node1':'word1_kg_id', 'node2':'word2_kg_id'})\n", - "wikiDF1[['word1_kg_id', 'word2_kg_id', 'category', 'node1;label', 'node2;label']].to_csv('../data/wikidata-cs_categorized.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "better-planet", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "enhanced-insured", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF = pd.read_csv('../data/wikidata-cs_categorized.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "complex-character", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 100110\n", - "I 1415\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "exciting-anderson", - "metadata": {}, - "outputs": [], - "source": [ - "I_set_size = len(wikiDF[wikiDF.category == 'I'])\n", - "M_sampled_set = wikiDF[wikiDF.category == 'M'].sample(I_set_size, random_state=13)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "thrown-graham", - "metadata": {}, - "outputs": [], - "source": [ - "from itertools import combinations\n", - "\n", - "def find_relation_mapping(mainset, subset, needed_size):\n", - " nodes = set([row['word1_kg_id'] for _,row in subset.iterrows()] \n", - " + [row['word2_kg_id'] for _,row in subset.iterrows()])\n", - " node_label_mappings = {row['word1_kg_id']: row['node1;label'] for _, row in subset.iterrows()}.update(\n", - " {row['word2_kg_id']: row['node2;label'] for _, row in subset.iterrows()}\n", - " )\n", - " mainset_pairs = set([(row['word1_kg_id'], row['word2_kg_id']) for _,row in mainset.iterrows()])\n", - "\n", - " all_pairs = set([pair for pair in list(combinations(list(nodes), 2))[10*needed_size]])\n", - " \n", - " removed_pairs = set()\n", - " \n", - " first_line = True\n", - " with gzip.open('../data/wikidata-20210215-dwd/claims.tsv.gz', 'r') as claims_file:\n", - " for line in tqdm(claims_file,total=98482585):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.decode(\"utf-8\").strip().split('\\t')\n", - " curr_pair = (line[1], line[3])\n", - " if curr_pair in all_pairs:\n", - " removed_pairs.add(curr_pair)\n", - " newDF = []\n", - " for pair in all_pairs - removed_pairs - mainset_pairs:\n", - " try:\n", - " if pair[0] is None or pair[1] is None:\n", - " continue\n", - " newDF.append(pair[0], pair[1], 'U', node_label_mappings[pair[0]], node_label_mappings[pair[1]])\n", - " except:\n", - " print(pair)\n", - " return pd.DataFrame(newDF, columns=subset.columns)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "immune-jesus", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3df524d9d4fd47e6864fe57299e1f8e5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/98482585 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1idnode1_labellabelnode2_labelsentnode1_embnode2_embbert2SentSim...BERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
0Q100171002Q1503443Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+...[ 3.61319035e-01 1.03393383e-01 1.50166345e+...0.901134...NaNNaN[0.87660795, 0.4991357, -0.39552155, 0.7046891...[0.36156428, -0.015657336, -0.14483449, -0.253...[0.79082793, 0.53679967, -0.3825465, 0.6778466...[0.36156428, -0.015657336, -0.14483449, -0.253...0.8326020.823419-1.000000-1.000000
1Q1002697Q49850Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+...[-2.23196611e-01 -4.97725368e-01 2.20271492e+...0.863449...[-0.28667202591896057, -0.4099476933479309, 0....[-0.25435054302215576, -0.92085862159729, 1.68...[1.256428, 0.3254261, -0.26960722, 0.101883665...[0.92698413, 0.32396156, -0.7647308, 0.6973268...[1.256428, 0.3254261, -0.26960722, 0.101883665...[1.0344226, 0.39984593, -0.76180136, 0.8256311...0.7426380.734428-1.000000-1.000000
2Q101998Q4421Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+...[ 5.09670794e-01 -4.42380428e-01 1.53245163e+...0.507148...[0.12320789694786072, 0.2723684310913086, 0.05...[0.5991100072860718, 0.15195603668689728, 0.59...[0.8141036, 0.14491142, -0.59703183, 0.335001,...[-0.16750671, -0.17960861, -0.58211946, -0.687...[0.91628444, 0.104261845, -0.49683735, 0.21296...[-0.13534825, -0.23398273, -0.5165668, -0.7297...0.6470310.7076110.5080600.455747
3Q102165Q2294Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+...[-6.87960759e-02 -1.65659860e-01 9.53789592e-...0.798707...[0.17410606145858765, 0.6839145421981812, -0.8...[-0.04499293863773346, 0.6921464204788208, -0....[0.469377, 0.7162001, -0.36740896, 0.76742333,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...[0.4080446, 0.7498908, -0.2665757, 0.74437106,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...0.8365310.8475910.8559590.770030
4Q102205Q11435Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+...[ 1.30038410e-01 -8.53226840e-01 2.37821031e+...0.934246...[0.4393930733203888, 0.7159943580627441, 0.647...[0.5091343522071838, -0.05845202878117561, 1.0...[-0.19995248, 0.65605164, -0.14234662, 0.43931...[0.4293771, 1.1976917, 0.04422909, 0.5975481, ...[-0.45549682, 0.73478854, -0.1980287, 0.436793...[0.33631665, 1.1661042, 0.13744242, 0.6776439,...0.7655890.7803420.7526930.515319
\n", - "

5 rows × 26 columns

\n", - "" - ], - "text/plain": [ - " node2 node1 id node1_label \\\n", - "0 Q100171002 Q1503443 Q1503443-P279-Q100171002-8282ae74-0 secrecy \n", - "1 Q1002697 Q49850 Q49850-P279-Q1002697-0c52cf68-0 journal \n", - "2 Q101998 Q4421 Q4421-P279-Q101998-d0983886-0 forest \n", - "3 Q102165 Q2294 Q2294-P279-Q102165-0893a180-0 proton \n", - "4 Q102205 Q11435 Q11435-P279-Q102205-7b448d05-0 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " node1_emb \\\n", - "0 [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " node2_emb bert2SentSim ... \\\n", - "0 [ 3.61319035e-01 1.03393383e-01 1.50166345e+... 0.901134 ... \n", - "1 [-2.23196611e-01 -4.97725368e-01 2.20271492e+... 0.863449 ... \n", - "2 [ 5.09670794e-01 -4.42380428e-01 1.53245163e+... 0.507148 ... \n", - "3 [-6.87960759e-02 -1.65659860e-01 9.53789592e-... 0.798707 ... \n", - "4 [ 1.30038410e-01 -8.53226840e-01 2.37821031e+... 0.934246 ... \n", - "\n", - " BERT_abstract_emb_right \\\n", - "0 NaN \n", - "1 [-0.28667202591896057, -0.4099476933479309, 0.... \n", - "2 [0.12320789694786072, 0.2723684310913086, 0.05... \n", - "3 [0.17410606145858765, 0.6839145421981812, -0.8... \n", - "4 [0.4393930733203888, 0.7159943580627441, 0.647... \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 [-0.25435054302215576, -0.92085862159729, 1.68... \n", - "2 [0.5991100072860718, 0.15195603668689728, 0.59... \n", - "3 [-0.04499293863773346, 0.6921464204788208, -0.... \n", - "4 [0.5091343522071838, -0.05845202878117561, 1.0... \n", - "\n", - " textEmb_7props_left \\\n", - "0 [0.87660795, 0.4991357, -0.39552155, 0.7046891... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.8141036, 0.14491142, -0.59703183, 0.335001,... \n", - "3 [0.469377, 0.7162001, -0.36740896, 0.76742333,... \n", - "4 [-0.19995248, 0.65605164, -0.14234662, 0.43931... \n", - "\n", - " textEmb_7props_right \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... \n", - "1 [0.92698413, 0.32396156, -0.7647308, 0.6973268... \n", - "2 [-0.16750671, -0.17960861, -0.58211946, -0.687... \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... \n", - "4 [0.4293771, 1.1976917, 0.04422909, 0.5975481, ... \n", - "\n", - " textEmb_2props_left \\\n", - "0 [0.79082793, 0.53679967, -0.3825465, 0.6778466... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.91628444, 0.104261845, -0.49683735, 0.21296... \n", - "3 [0.4080446, 0.7498908, -0.2665757, 0.74437106,... \n", - "4 [-0.45549682, 0.73478854, -0.1980287, 0.436793... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... 0.832602 \n", - "1 [1.0344226, 0.39984593, -0.76180136, 0.8256311... 0.742638 \n", - "2 [-0.13534825, -0.23398273, -0.5165668, -0.7297... 0.647031 \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... 0.836531 \n", - "4 [0.33631665, 1.1661042, 0.13744242, 0.6776439,... 0.765589 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \n", - "0 0.823419 -1.000000 -1.000000 \n", - "1 0.734428 -1.000000 -1.000000 \n", - "2 0.707611 0.508060 0.455747 \n", - "3 0.847591 0.855959 0.770030 \n", - "4 0.780342 0.752693 0.515319 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "random-france", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.602876\n", - "std 0.146181\n", - "min 0.064503\n", - "25% 0.493110\n", - "50% 0.597949\n", - "75% 0.711631\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "incorporated-ambassador", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['node2', 'node1', 'id', 'node1_label', 'label', 'node2_label', 'sent',\n", - " 'node1_emb', 'node2_emb', 'bert2SentSim', 'abstract',\n", - " 'abstract_firstSent', 'BERT_abstract_emb',\n", - " 'BERT_abstract_firstSent_emb', 'abstract_right',\n", - " 'abstract_firstSent_right', 'BERT_abstract_emb_right',\n", - " 'BERT_abstract_firstSent_emb_right', 'textEmb_7props_left',\n", - " 'textEmb_7props_right', 'textEmb_2props_left', 'textEmb_2props_right',\n", - " 'textEmb_7props_cosSim', 'textEmb_2props_cosSim',\n", - " 'BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim'],\n", - " dtype='object')" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "original-grass", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.772184\n", - "std 0.122326\n", - "min 0.120480\n", - "25% 0.684141\n", - "50% 0.793718\n", - "75% 0.874284\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "under-rabbit", - "metadata": {}, - "source": [ - "# Embeddings Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "annoying-intake", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## Complex, Transe Embeddings Datasets generation" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "tamil-activity", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353LatestAnnot.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "immune-nashville", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "residential-cleaners", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "current-great", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_id
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id \n", - "0 Q454 \n", - "1 Q13648784 \n", - "2 Q178022 \n", - "3 Q21004260 \n", - "4 Q49112 " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "valued-progressive", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# wordSimSet = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "different-vancouver", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSimSet = set(p279WordSimSeededDF_wabs_text.node1.to_list() + p279WordSimSeededDF_wabs_text.node2.to_list() + p279Seeded_SiblingsDF3_wabs_text.node1.to_list() + p279Seeded_SiblingsDF3_wabs_text.node2.to_list() + wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quick-lewis", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "19166" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "collected-regular", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1499717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64763437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17144564\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4765290\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16000518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6423382\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2177259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q100448831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2857578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13577338\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q96158854\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7892\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29053864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7675683\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2380954\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77527200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21083881\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q211521\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66368425\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16023742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q97627995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16721350\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q32979618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4553362\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q98232491\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66194218\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5372\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42559432\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25481995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61466331\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6983403\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84105477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11002\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30107768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56753514\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91927989\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12047900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2144951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11698973\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q517386\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17097928\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5281737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27983054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19838691\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q101541623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17376918\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5193377\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23013268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66363580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55693905\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68131879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85803433\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29053744\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82785806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21406831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29957548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78710574\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6462051\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1042920\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7925\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56297152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2515879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28324850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28132458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2849391\n" - ] - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "compEmbeddings = {}\n", - "transeEmbeddings = {}\n", - "\n", - "for wordID in wordSimSet:\n", - " try:\n", - " resp = requests.get(\"http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID).json()['_source']\n", - " compEmbeddings[wordID] = resp['graph_embedding_complex']\n", - " transeEmbeddings[wordID] = resp['graph_embeddings_transe']\n", - " except:\n", - " print(\"Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "elect-gothic", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.DataFrame(compEmbeddings.items(), columns=['node', 'complex_embedding']).to_csv('../data/wordsim353_complex_embeddings.csv', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "combined-theme", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.DataFrame(transeEmbeddings.items(), columns=['node', 'transe_embedding']).to_csv('../data/wordsim353_transe_embeddings.csv', index=False)" - ] - }, - { - "cell_type": "markdown", - "id": "suffering-extraction", - "metadata": {}, - "source": [ - "# Basis Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "hairy-tuition", - "metadata": {}, - "source": [ - "## Probase Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "opened-quarter", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = pd.read_csv('../data/probase/probase_WQnodes_subset_and_sim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "major-peter", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0node1_labelnode2_labelno_of_relationsnode1_qnodenode2_qnoden1_final_qnoden2_final_qnodesim
00factorage35167NaNNaNQ15061738Q1003432191.000000
15factorgender14230NaNQ48277Q15061738Q482770.913568
26factortemperature13660NaNNaNQ15061738P20760.909663
37metalcopper11142Q11426NaNQ11426Q158305000.890199
49variableage9375NaNNaNQ10954303Q1003432190.873703
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 node1_label node2_label no_of_relations node1_qnode \\\n", - "0 0 factor age 35167 NaN \n", - "1 5 factor gender 14230 NaN \n", - "2 6 factor temperature 13660 NaN \n", - "3 7 metal copper 11142 Q11426 \n", - "4 9 variable age 9375 NaN \n", - "\n", - " node2_qnode n1_final_qnode n2_final_qnode sim \n", - "0 NaN Q15061738 Q100343219 1.000000 \n", - "1 Q48277 Q15061738 Q48277 0.913568 \n", - "2 NaN Q15061738 P2076 0.909663 \n", - "3 NaN Q11426 Q15830500 0.890199 \n", - "4 NaN Q10954303 Q100343219 0.873703 " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "photographic-character", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = probDF_Qnodes_DF_WQnodes1_subset.rename(columns={'n1_final_qnode': 'node1', 'n2_final_qnode': 'node2', 'sim': 'bert2SentSim'})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "russian-proceeding", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim'] = 0.5 + 0.5 * probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "painted-selection", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim'].describe()" - ] - }, - { - "cell_type": "markdown", - "id": "alpine-portsmouth", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## 19k+19k dataset with class similarity scores generation" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "id": "sublime-girlfriend", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "classSim = []\n", - "\n", - "for _, row in tqdm(p279WordSimSeededDF_wabs_text.iterrows()):\n", - " resp = requests.get(\"https://dsbox02.isi.edu:8888/qnode-similarity?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['bert2SentSim'] = float(resp) if resp else -1\n", - " classSim.append(row)" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "id": "optional-bracelet", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ff86112887254e7f950c4586072a22f5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "for _, row in tqdm(p279Seeded_SiblingsDF3_wabs_text.iterrows()):\n", - " resp = requests.get(\"https://dsbox02.isi.edu:8888/qnode-similarity?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['bert2SentSim'] = float(resp) if resp else -1\n", - " classSim.append(row)" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "interior-yield", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "classSimT = []\n", - "for class1 in classSim:\n", - " classSimT.append(pd.DataFrame(class1).transpose())" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "id": "single-ethiopia", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "classSimDF = pd.concat(classSimT, ignore_index=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "stuck-formation", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "classSimDF['bert2SentSim'] = classSimDF.bert2SentSim.astype(float)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "enclosed-plenty", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "classSimDF.loc[classSimDF['bert2SentSim'] == -1, ['bert2SentSim']] = 0.621981" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "public-thesis", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 38790.000000\n", - "mean 0.621981\n", - "std 0.248664\n", - "min -0.035900\n", - "25% 0.426818\n", - "50% 0.720367\n", - "75% 0.840006\n", - "max 0.985841\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 135, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "classSimDF[classSimDF['bert2SentSim'] != -1]['bert2SentSim'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "becoming-thomson", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "max1 = classSimDF['bert2SentSim'].max()\n", - "min1 = classSimDF['bert2SentSim'].min()\n", - "classSimDF['bert2SentSim'] = classSimDF['bert2SentSim'].apply(lambda p: (p - min1) / (max1 - min1))" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "coastal-edition", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1idnode1_labellabelnode2_labelsentnode1_embnode2_embbert2SentSim...textEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSimparentpar_labelnode1_sentnode2_sentcomb_sent
0Q100171002Q1503443Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+...[ 3.61319035e-01 1.03393383e-01 1.50166345e+...0.840243...[0.36156428, -0.015657336, -0.14483449, -0.253...0.8326020.823419-1.0-1.0NaNNaNNaNNaNNaN
1Q1002697Q49850Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+...[-2.23196611e-01 -4.97725368e-01 2.20271492e+...0.672269...[1.0344226, 0.39984593, -0.76180136, 0.8256311...0.7426380.734428-1.0-1.0NaNNaNNaNNaNNaN
2Q101998Q4421Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+...[ 5.09670794e-01 -4.42380428e-01 1.53245163e+...0.613978...[-0.13534825, -0.23398273, -0.5165668, -0.7297...0.6470310.7076110.508060.455747NaNNaNNaNNaNNaN
3Q102165Q2294Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+...[-6.87960759e-02 -1.65659860e-01 9.53789592e-...0.798362...[-0.11307852, 0.65730673, -0.13959256, 1.46633...0.8365310.8475910.8559590.77003NaNNaNNaNNaNNaN
4Q102205Q11435Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+...[ 1.30038410e-01 -8.53226840e-01 2.37821031e+...0.320911...[0.33631665, 1.1661042, 0.13744242, 0.6776439,...0.7655890.7803420.7526930.515319NaNNaNNaNNaNNaN
\n", - "

5 rows × 31 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 id node1_label \\\n", - "0 Q100171002 Q1503443 Q1503443-P279-Q100171002-8282ae74-0 secrecy \n", - "1 Q1002697 Q49850 Q49850-P279-Q1002697-0c52cf68-0 journal \n", - "2 Q101998 Q4421 Q4421-P279-Q101998-d0983886-0 forest \n", - "3 Q102165 Q2294 Q2294-P279-Q102165-0893a180-0 proton \n", - "4 Q102205 Q11435 Q11435-P279-Q102205-7b448d05-0 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " node1_emb \\\n", - "0 [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " node2_emb bert2SentSim ... \\\n", - "0 [ 3.61319035e-01 1.03393383e-01 1.50166345e+... 0.840243 ... \n", - "1 [-2.23196611e-01 -4.97725368e-01 2.20271492e+... 0.672269 ... \n", - "2 [ 5.09670794e-01 -4.42380428e-01 1.53245163e+... 0.613978 ... \n", - "3 [-6.87960759e-02 -1.65659860e-01 9.53789592e-... 0.798362 ... \n", - "4 [ 1.30038410e-01 -8.53226840e-01 2.37821031e+... 0.320911 ... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... 0.832602 \n", - "1 [1.0344226, 0.39984593, -0.76180136, 0.8256311... 0.742638 \n", - "2 [-0.13534825, -0.23398273, -0.5165668, -0.7297... 0.647031 \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... 0.836531 \n", - "4 [0.33631665, 1.1661042, 0.13744242, 0.6776439,... 0.765589 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \\\n", - "0 0.823419 -1.0 -1.0 \n", - "1 0.734428 -1.0 -1.0 \n", - "2 0.707611 0.50806 0.455747 \n", - "3 0.847591 0.855959 0.77003 \n", - "4 0.780342 0.752693 0.515319 \n", - "\n", - " parent par_label node1_sent node2_sent comb_sent \n", - "0 NaN NaN NaN NaN NaN \n", - "1 NaN NaN NaN NaN NaN \n", - "2 NaN NaN NaN NaN NaN \n", - "3 NaN NaN NaN NaN NaN \n", - "4 NaN NaN NaN NaN NaN \n", - "\n", - "[5 rows x 31 columns]" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "classSimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 143, - "id": "governing-detector", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "classSimDF[:19454].to_csv('../data/P279_ChildPar_19k_WEmbAndClassSim.csv', index=None)\n", - "classSimDF[19454:].to_csv('../data/P279_Siblings_19k_WEmbAndClassSim.csv', index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "compact-bridges", - "metadata": {}, - "source": [ - "## 19k+19k dataset with class similarity scores fetch" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "nominated-blogger", - "metadata": {}, - "outputs": [], - "source": [ - "classSimTargetChildPar = pd.read_csv('../data/P279_ChildPar_19k_WEmbAndClassSim.csv')\n", - "classSimTargetSiblings = pd.read_csv('../data/P279_Siblings_19k_WEmbAndClassSim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "korean-guitar", - "metadata": {}, - "outputs": [], - "source": [ - "(classSimTargetSiblings['bert2SentSim'] == 0.5).sum()" - ] - }, - { - "cell_type": "markdown", - "id": "hundred-virus", - "metadata": {}, - "source": [ - "# Ground Truth Datasets" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "limited-hormone", - "metadata": {}, - "outputs": [], - "source": [ - "bioDF = pd.read_csv('../data/pedersen2007measures_table1.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "alien-happiness", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Term1Term1_kg_idTerm1_kg_labelTerm1_descriptionTerm2Term2_kg_idTerm2_kg_labelTerm2_descriptionPhysicianCoder
0Renal failureQ476921kidney failuredisease where the kidneys fail to adequately f...Kidney failureQ476921kidney failuredisease where the kidneys fail to adequately f...4.04.0
1HeartQ1072heartorgan for the circulation of blood in animal c...MyocardiumQ84133myocardiummiddle layer of the heart wall, which consists...3.33.0
2StrokeQ12202strokeproblem with the arteries supplying blood to t...InfarctQ207550infarctiontissue death caused by a local lack of oxygen,...3.02.8
3AbortionQ8452abortionintentional ending of a pregnancyMiscarriageQ28693miscarriagenatural death of an embryo or fetus before it ...3.03.3
4DelusionQ189643delusionfirm and fixed belief based on inadequate grou...SchizophreniaQ41112schizophreniapsychotic disorder characterized by emotional ...3.02.2
\n", - "
" - ], - "text/plain": [ - " Term1 Term1_kg_id Term1_kg_label \\\n", - "0 Renal failure Q476921 kidney failure \n", - "1 Heart Q1072 heart \n", - "2 Stroke Q12202 stroke \n", - "3 Abortion Q8452 abortion \n", - "4 Delusion Q189643 delusion \n", - "\n", - " Term1_description Term2 \\\n", - "0 disease where the kidneys fail to adequately f... Kidney failure \n", - "1 organ for the circulation of blood in animal c... Myocardium \n", - "2 problem with the arteries supplying blood to t... Infarct \n", - "3 intentional ending of a pregnancy Miscarriage \n", - "4 firm and fixed belief based on inadequate grou... Schizophrenia \n", - "\n", - " Term2_kg_id Term2_kg_label \\\n", - "0 Q476921 kidney failure \n", - "1 Q84133 myocardium \n", - "2 Q207550 infarction \n", - "3 Q28693 miscarriage \n", - "4 Q41112 schizophrenia \n", - "\n", - " Term2_description Physician Coder \n", - "0 disease where the kidneys fail to adequately f... 4.0 4.0 \n", - "1 middle layer of the heart wall, which consists... 3.3 3.0 \n", - "2 tissue death caused by a local lack of oxygen,... 3.0 2.8 \n", - "3 natural death of an embryo or fetus before it ... 3.0 3.3 \n", - "4 psychotic disorder characterized by emotional ... 3.0 2.2 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bioDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "parental-event", - "metadata": {}, - "outputs": [], - "source": [ - "bioDFNodesSet = set(bioDF.Term1_kg_id.to_list() + bioDF.Term2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "wicked-proportion", - "metadata": {}, - "outputs": [], - "source": [ - "P279childParNodesSet = set(p279WordSimSeededDF_wabs_text.node1.to_list() + p279WordSimSeededDF_wabs_text.node2.to_list())\n", - "P279siblingsNodesSet = set(p279Seeded_SiblingsDF3_wabs_text.node1.to_list() + p279Seeded_SiblingsDF3_wabs_text.node2.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "pediatric-tomato", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 1)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sum(bioDF.Term1_kg_id.apply(lambda p: p in P279childParNodesSet or p in P279siblingsNodesSet)), \\\n", - "sum(bioDF.Term2_kg_id.apply(lambda p: p in P279childParNodesSet or p in P279siblingsNodesSet))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "transparent-diversity", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(23, 25)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probaseNodesSet = set(probDF_Qnodes_DF_WQnodes1_subset.node1.to_list() + probDF_Qnodes_DF_WQnodes1_subset.node2.to_list())\n", - "\n", - "sum(bioDF.Term1_kg_id.apply(lambda p: p in probaseNodesSet)), \\\n", - "sum(bioDF.Term2_kg_id.apply(lambda p: p in probaseNodesSet))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "uniform-civilian", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "voluntary-logic", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "removed-occupation", - "metadata": {}, - "source": [ - "# Retrofitting Setup" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "consolidated-investigation", - "metadata": {}, - "outputs": [], - "source": [ - "def normalize(embedDict):\n", - " for key, val in embedDict.items():\n", - " temp = np.array([float(val1) for val1 in val])\n", - " temp2 = temp**2\n", - " embedDict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - " return embedDict" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "irish-disposal", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchEmbeddings(df):\n", - " embedDict = {}\n", - " for _, row in df.iterrows():\n", - " embedDict[row.node] = row.value\n", - " return normalize(embedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "orange-person", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchNeighbours(df):\n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row.bert2SentSim))\n", - " \n", - " if row.node2 not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row.bert2SentSim))\n", - " print(max([len(neigh) for neigh in neighboursDict.values()]))\n", - " return neighboursDict" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "joined-kazakhstan", - "metadata": {}, - "outputs": [], - "source": [ - "def retrofit(embedDict, neighDict, weightCase, weightAssignment=False):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - "# assert len(neighbs) == 1\n", - " if weightAssignment:\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " else:\n", - " sumOfSims = sum([1 for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] for neighb in neighbs])\n", - " \n", - " if weightCase == 1:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sumOfEmbs) / ((len(neighbs)) + sumOfSims)\n", - " elif weightCase == 2:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " elif weightCase == 0.5:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sumOfEmbs) / ((len(neighbs))**0.5 + sumOfSims)\n", - " else:\n", - " raise\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "collected-performance", - "metadata": {}, - "outputs": [], - "source": [ - "def determineDistances(embedDict, newEmbedDict):\n", - " dist = []\n", - " for word in embedDict.keys():\n", - " dist.append(euclidean_distances([embedDict[word]], [newEmbedDict[word]])[0][0])\n", - " return dist" - ] - }, - { - "cell_type": "markdown", - "id": "later-dimension", - "metadata": {}, - "source": [ - "# Attempts" - ] - }, - { - "cell_type": "markdown", - "id": "serious-milan", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## Sample attempt" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "substantial-aggregate", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text_sample = p279WordSimSeededDF_wabs_text[:1000]" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "id": "analyzed-passion", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "id": "japanese-defense", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "dying-nigeria", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "reduced-avenue", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1034" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "advised-hollywood", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "authentic-greene", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 1034.000000\n", - "mean 0.281990\n", - "std 0.054759\n", - "min 0.069792\n", - "25% 0.244698\n", - "50% 0.278019\n", - "75% 0.319656\n", - "max 0.450444\n", - "dtype: float64" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "variable-transportation", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## ChildPar dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "central-spyware", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "white-genesis", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "id": "registered-original", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "id": "experienced-conspiracy", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "18860" - ] - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "id": "every-interface", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 131, - "id": "specified-berry", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 18860.000000\n", - "mean 0.283712\n", - "std 0.056573\n", - "min 0.050719\n", - "25% 0.246137\n", - "50% 0.281897\n", - "75% 0.319687\n", - "max 0.564922\n", - "dtype: float64" - ] - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "incoming-calvin", - "metadata": {}, - "source": [ - "# Correlation Code" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "answering-exhaust", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import classification_report\n", - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - "LABELS = ['I','U','M']\n", - "def fetchCorrelationResults(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "# print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - "# wordSim353AnnotDF_New2 = wordSim353AnnotDF_New\n", - " wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - " wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - " responseDict = {}\n", - " responseDict['wordSimMissingSet'] = wordSimMissingSet\n", - " responseDict['coveredPairs'] = len(wordSim353AnnotDF_New2)\n", - " responseDict['totalPairs'] = len(wordSim353AnnotDF_New)\n", - " \n", - "# wordSimMissingSet\n", - "# print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textOld'] == -1, 'textOld'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textOld'] != -1]['textOld'].mean()\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textNew'] == -1, 'textNew'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textNew'] != -1]['textNew'].mean()\n", - " \n", - " # Logic 1: Scale min,max value to 1,4 strictly\n", - "# min1, max1 = wordSim353AnnotDF_New['textOld'].min(), wordSim353AnnotDF_New['textOld'].max()\n", - "# min2, max2 = wordSim353AnnotDF_New['textNew'].min(), wordSim353AnnotDF_New['textNew'].max()\n", - "# wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * (p - min1) / (max1 - min1))\n", - "# wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * (p - min2) / (max2 - min2))\n", - " \n", - " # Logic 2: Scale abs value to 1,4 strictly\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * abs(p))\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * abs(p))\n", - "\n", - " \n", - "# print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "# print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " \n", - "# print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - "# print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " responseDict['KT_old_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_new_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_old_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['KT_new_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['old_acc'] = accuracy_score(wordSim353AnnotDF_New['textOld'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " responseDict['new_acc'] = accuracy_score(wordSim353AnnotDF_New['textNew'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " \n", - " responseDict['class_rep_old'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), output_dict=True)\n", - " responseDict['class_rep_new'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), output_dict=True)\n", - " \n", - " cm_old = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), labels=LABELS)\n", - " cm_new = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), labels=LABELS)\n", - " \n", - " responseDict['cm_old'] = cm_old\n", - " responseDict['cm_new'] = cm_new\n", - " \n", - " return responseDict" - ] - }, - { - "cell_type": "markdown", - "id": "sacred-bacon", - "metadata": {}, - "source": [ - "# Dataset-Target Combinations" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "premier-crisis", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster = {}\n", - "newEmbedDictMaster = {}\n", - "confusionMatrixMaster = {}\n", - "neighDictMaster = {}\n", - "responsesDictMaster = {}" - ] - }, - { - "cell_type": "markdown", - "id": "previous-applicant", - "metadata": {}, - "source": [ - "## Input Datasets Processing and Parsing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "spoken-buying", - "metadata": {}, - "outputs": [], - "source": [ - "# Text 7 props Embeddings\n", - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-7-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_7props'] = embedDict\n", - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "closing-biotechnology", - "metadata": {}, - "outputs": [], - "source": [ - "# Text 2 props Embeddings\n", - "textEmb_2props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-2-props-all.tsv', sep='\\t')\n", - "textEmb_2props_DF['value'] = textEmb_2props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "embedDict = fetchEmbeddings(textEmb_2props_DF)\n", - "embedDictMaster['text_2props'] = embedDict\n", - "len(textEmb_2props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "oriented-brush", - "metadata": {}, - "outputs": [], - "source": [ - "# Complex Embeddings\n", - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')\n", - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "compEmbeddings = {}\n", - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "absolute-brazil", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster['complex'] = normalize(compEmbeddings)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "transsexual-lender", - "metadata": {}, - "outputs": [], - "source": [ - "# Transe Embeddings\n", - "transeEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')\n", - "transeEmbeddingsDF['transe_embedding'] = transeEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "transeEmbeddings = {}\n", - "for _, row in transeEmbeddingsDF.iterrows():\n", - " transeEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "printable-trinity", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster['transe'] = normalize(transeEmbeddings)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "federal-conservation", - "metadata": {}, - "outputs": [], - "source": [ - "import re\n", - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - "# print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "narrative-security", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "choice-discipline", - "metadata": {}, - "outputs": [], - "source": [ - "descriptions = pd.read_csv('../../wd-correctness/gdrive-kgtk-dump-2020-12-07/descriptions.en.tsv.gz', compression='gzip', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "quick-insulin", - "metadata": {}, - "outputs": [], - "source": [ - "list_of_nodes = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "objective-pendant", - "metadata": {}, - "outputs": [], - "source": [ - "descriptions1 = descriptions[descriptions.node1.apply(lambda p: p in list_of_nodes)]" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "headed-cheese", - "metadata": {}, - "outputs": [], - "source": [ - "desc_dict = {row['node1']: row['node2'][1:-4] for _, row in descriptions1.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "mature-folder", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f13d01b193b1463fb947c4a1b0f71dcb", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/38908 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
EmbeddingBasisWeightWeightednessOld AccNew AccIncreasePairs CoveredOld I PrecisionOld I Recall...Old U PrecisionOld U RecallOld U F1-ScoreNew I PrecisionNew I RecallNew I F1-ScoreNew U PrecisionNew U RecallNew U F1-ScoreRank
16s_emb19k_21True38.95348862.50000023.5465121940.8571430.30...0.320690.9029130.4732820.5333330.400.4571430.3666670.1067960.1654140
136s_emb19k_class_childPar1True38.95348862.20930223.2558141940.8571430.30...0.320690.9029130.4732820.5000000.400.4444440.3666670.1067960.1654140
184s_emb19k_2_class1True38.95348862.20930223.2558141940.8571430.30...0.320690.9029130.4732820.5000000.400.4444440.3666670.1067960.1654140
88s_emb19k_childPar1True38.95348862.20930223.2558141940.8571430.30...0.320690.9029130.4732820.5000000.400.4444440.3666670.1067960.1654140
64s_embprobase+19k_21True38.95348858.43023319.4767441940.8571430.30...0.320690.9029130.4732820.1578950.300.2068970.0000000.0000000.0000000
..................................................................
170text_2props19k_2_class1True59.88372150.000000-9.8837213260.2926830.60...1.000000.0097090.0192310.1785710.750.2884620.0000000.0000000.0000001
48text_7propsprobase+19k_21True60.46511640.988372-19.4767443260.3250000.65...1.000000.0097090.0192310.1240310.800.2147650.0000000.0000000.0000001
50text_2propsprobase+19k_21True59.88372140.406977-19.4767443260.2926830.60...1.000000.0097090.0192310.1194030.800.2077920.0000000.0000000.0000001
24text_7propsprobase1True60.46511638.953488-21.5116283260.3250000.65...1.000000.0097090.0192310.1214290.850.2125000.0000000.0000000.0000001
26text_2propsprobase1True59.88372136.627907-23.2558143260.2926830.60...1.000000.0097090.0192310.1073830.800.1893490.0000000.0000000.0000001
\n", - "

192 rows × 21 columns

\n", - "" - ], - "text/plain": [ - " Embedding Basis Weight Weightedness Old Acc \\\n", - "16 s_emb 19k_2 1 True 38.953488 \n", - "136 s_emb 19k_class_childPar 1 True 38.953488 \n", - "184 s_emb 19k_2_class 1 True 38.953488 \n", - "88 s_emb 19k_childPar 1 True 38.953488 \n", - "64 s_emb probase+19k_2 1 True 38.953488 \n", - ".. ... ... ... ... ... \n", - "170 text_2props 19k_2_class 1 True 59.883721 \n", - "48 text_7props probase+19k_2 1 True 60.465116 \n", - "50 text_2props probase+19k_2 1 True 59.883721 \n", - "24 text_7props probase 1 True 60.465116 \n", - "26 text_2props probase 1 True 59.883721 \n", - "\n", - " New Acc Increase Pairs Covered Old I Precision Old I Recall ... \\\n", - "16 62.500000 23.546512 194 0.857143 0.30 ... \n", - "136 62.209302 23.255814 194 0.857143 0.30 ... \n", - "184 62.209302 23.255814 194 0.857143 0.30 ... \n", - "88 62.209302 23.255814 194 0.857143 0.30 ... \n", - "64 58.430233 19.476744 194 0.857143 0.30 ... \n", - ".. ... ... ... ... ... ... \n", - "170 50.000000 -9.883721 326 0.292683 0.60 ... \n", - "48 40.988372 -19.476744 326 0.325000 0.65 ... \n", - "50 40.406977 -19.476744 326 0.292683 0.60 ... \n", - "24 38.953488 -21.511628 326 0.325000 0.65 ... \n", - "26 36.627907 -23.255814 326 0.292683 0.60 ... \n", - "\n", - " Old U Precision Old U Recall Old U F1-Score New I Precision \\\n", - "16 0.32069 0.902913 0.473282 0.533333 \n", - "136 0.32069 0.902913 0.473282 0.500000 \n", - "184 0.32069 0.902913 0.473282 0.500000 \n", - "88 0.32069 0.902913 0.473282 0.500000 \n", - "64 0.32069 0.902913 0.473282 0.157895 \n", - ".. ... ... ... ... \n", - "170 1.00000 0.009709 0.019231 0.178571 \n", - "48 1.00000 0.009709 0.019231 0.124031 \n", - "50 1.00000 0.009709 0.019231 0.119403 \n", - "24 1.00000 0.009709 0.019231 0.121429 \n", - "26 1.00000 0.009709 0.019231 0.107383 \n", - "\n", - " New I Recall New I F1-Score New U Precision New U Recall \\\n", - "16 0.40 0.457143 0.366667 0.106796 \n", - "136 0.40 0.444444 0.366667 0.106796 \n", - "184 0.40 0.444444 0.366667 0.106796 \n", - "88 0.40 0.444444 0.366667 0.106796 \n", - "64 0.30 0.206897 0.000000 0.000000 \n", - ".. ... ... ... ... \n", - "170 0.75 0.288462 0.000000 0.000000 \n", - "48 0.80 0.214765 0.000000 0.000000 \n", - "50 0.80 0.207792 0.000000 0.000000 \n", - "24 0.85 0.212500 0.000000 0.000000 \n", - "26 0.80 0.189349 0.000000 0.000000 \n", - "\n", - " New U F1-Score Rank \n", - "16 0.165414 0 \n", - "136 0.165414 0 \n", - "184 0.165414 0 \n", - "88 0.165414 0 \n", - "64 0.000000 0 \n", - ".. ... ... \n", - "170 0.000000 1 \n", - "48 0.000000 1 \n", - "50 0.000000 1 \n", - "24 0.000000 1 \n", - "26 0.000000 1 \n", - "\n", - "[192 rows x 21 columns]" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "resultsDF.sort_values(by=['Increase'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "reasonable-occasion", - "metadata": {}, - "outputs": [], - "source": [ - "resultsDF.to_csv('../data/retrofitting/retro_Aug16_2021.csv', index=False)" - ] - }, - { - "cell_type": "markdown", - "id": "strong-singer", - "metadata": {}, - "source": [ - "## Analyze Results" - ] - }, - { - "cell_type": "code", - "execution_count": 211, - "id": "baking-ranking", - "metadata": {}, - "outputs": [], - "source": [ - "def addColumnToGroundTruth(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "# print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textOld'] == -1, 'textOld'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textOld'] != -1]['textOld'].mean()\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textNew'] == -1, 'textNew'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textNew'] != -1]['textNew'].mean()\n", - " min1, max1 = wordSim353AnnotDF_New['textOld'].min(), wordSim353AnnotDF_New['textOld'].max()\n", - " min2, max2 = wordSim353AnnotDF_New['textNew'].min(), wordSim353AnnotDF_New['textNew'].max()\n", - "# assert wordSim353AnnotDF_New['textOld'].min() >= 0, wordSim353AnnotDF_New['textOld'].min()\n", - "# assert wordSim353AnnotDF_New['textNew'].min() >= 0, wordSim353AnnotDF_New['textNew'].min()\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * (p - min1) / (max1 - min1))\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * (p - min2) / (max2 - min2))\n", - " wordSim353AnnotDF_New['old_class'] = wordSim353AnnotDF_New['textOld'].apply(labelSamples)\n", - " wordSim353AnnotDF_New['new_class'] = wordSim353AnnotDF_New['textNew'].apply(labelSamples)\n", - " wordSim353AnnotDF_New['retro_worked'] = ((wordSim353AnnotDF_New['new_class'] == wordSim353AnnotDF_New['category']) & (wordSim353AnnotDF_New['old_class'] != wordSim353AnnotDF_New['category']))\n", - " return wordSim353AnnotDF_New\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 215, - "id": "fatty-secretary", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = addColumnToGroundTruth(embedDictMaster['three_emb'], newEmbedDictMaster['three_emb_19k_2_class_1_weighted'])" - ] - }, - { - "cell_type": "code", - "execution_count": 219, - "id": "antique-moscow", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = addColumnToGroundTruth(embedDictMaster['six_emb'], newEmbedDictMaster['six_emb_19k_2_class_1_weighted'])" - ] - }, - { - "cell_type": "code", - "execution_count": 220, - "id": "defined-sense", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idWord 1word2_kg_idWord 2AvgcategorytextOldtextNewold_classnew_class
2Q8333FBIQ178022fingerprint3.6U3.2606383.557514MU
28Q5369baseballQ1539532season3.2M3.5845453.246840UM
41Q622821calculationQ12525525computation1.0I2.1731121.663656MI
47Q578centuryQ6266nation4.0U3.4557423.616025MU
56Q93352coastQ468756shore1.6I1.9259051.667819MI
57Q6881511companyQ1196314stock3.0M3.5081463.224211UM
126Q2095foodQ2216236rooster3.2M3.8287303.393004UM
133Q11410gameQ11499267defeat3.0M3.6998013.245156UM
170Q798505listingQ21146257category3.2M3.5545063.300242UM
173Q61864890lobsterQ282wine3.2M3.5340903.345835UM
190Q1368moneyQ693464cash1.0I1.9145541.497877MI
209Q132821murderQ3882220manslaughter1.6I2.0230821.646781MI
227Q17285planeQ1420car2.6M3.6465833.394859UM
295Q529711startQ577year3.4M3.5308993.088973UM
303Q79007streetQ7543083avenue1.4I2.5138241.561554MI
\n", - "
" - ], - "text/plain": [ - " word1_kg_id Word 1 word2_kg_id Word 2 Avg category \\\n", - "2 Q8333 FBI Q178022 fingerprint 3.6 U \n", - "28 Q5369 baseball Q1539532 season 3.2 M \n", - "41 Q622821 calculation Q12525525 computation 1.0 I \n", - "47 Q578 century Q6266 nation 4.0 U \n", - "56 Q93352 coast Q468756 shore 1.6 I \n", - "57 Q6881511 company Q1196314 stock 3.0 M \n", - "126 Q2095 food Q2216236 rooster 3.2 M \n", - "133 Q11410 game Q11499267 defeat 3.0 M \n", - "170 Q798505 listing Q21146257 category 3.2 M \n", - "173 Q61864890 lobster Q282 wine 3.2 M \n", - "190 Q1368 money Q693464 cash 1.0 I \n", - "209 Q132821 murder Q3882220 manslaughter 1.6 I \n", - "227 Q17285 plane Q1420 car 2.6 M \n", - "295 Q529711 start Q577 year 3.4 M \n", - "303 Q79007 street Q7543083 avenue 1.4 I \n", - "\n", - " textOld textNew old_class new_class \n", - "2 3.260638 3.557514 M U \n", - "28 3.584545 3.246840 U M \n", - "41 2.173112 1.663656 M I \n", - "47 3.455742 3.616025 M U \n", - "56 1.925905 1.667819 M I \n", - "57 3.508146 3.224211 U M \n", - "126 3.828730 3.393004 U M \n", - "133 3.699801 3.245156 U M \n", - "170 3.554506 3.300242 U M \n", - "173 3.534090 3.345835 U M \n", - "190 1.914554 1.497877 M I \n", - "209 2.023082 1.646781 M I \n", - "227 3.646583 3.394859 U M \n", - "295 3.530899 3.088973 U M \n", - "303 2.513824 1.561554 M I " - ] - }, - "execution_count": 220, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp1[temp1['retro_worked']][['word1_kg_id', 'Word 1', 'word2_kg_id', 'Word 2', 'Avg', 'category', 'textOld', 'textNew', 'old_class','new_class']]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "renewable-stylus", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "leading-frontier", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "extensive-forty", - "metadata": {}, - "source": [ - "## Confusion Matrices" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "maritime-director", - "metadata": {}, - "outputs": [], - "source": [ - "confusionMatrixMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "qualified-empty", - "metadata": {}, - "outputs": [], - "source": [ - "embedDict = embedDictMaster['text_7props_19k']\n", - "newEmbedDict = newEmbedDictMaster['text_7props_19k_2']\n", - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - "assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - "assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - "wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - "wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - "wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - "# wordSimMissingSet\n", - "print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n", - "print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "\n", - "print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - "print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "id": "distinct-timothy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 210\n", - "U 101\n", - "I 20\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 154, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New2['category'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "antique-infrastructure", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.subplots(figsize=(20,20))\n", - "for num, key1 in enumerate(['text_7props_19k_old_2', 'text_7props_19k_new_2', 'text_2props_19k_old_2', 'text_2props_19k_new_2', \n", - " 'transe_19k_old_1', 'transe_19k_new_1', 'complex_19k_old_1', 'complex_19k_new_1']):\n", - " plt.subplot(4, 2, num+1)\n", - " sns.heatmap(pd.DataFrame(confusionMatrixMaster[key1], LABELS, LABELS), annot=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ahead-letters", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "micro-phrase", - "metadata": {}, - "source": [ - "# Save all embeddings and similarity scores" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "boring-campus", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDictMaster['concat_probase_19k_v1_2'] = newEmbedDictMaster['concat_probase_19k__v1_2']" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "automatic-update", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Length of wordsim dataset: 344\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d97162bbb58542999eb317ede34a3300", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.0067204430541292475, 0.008331487632641807, ...[-0.004515859562266559, -0.011723668837741234,...3.4683703.384407[0.006720440253943506, 0.00833148416118722, 0....[-0.0050116109222357935, -0.013383541509188317...[0.006720440253943506, 0.00833148416118722, 0....[-0.004971298302113362, -0.013254267455943004,...3.4683703.463734
1Arafatterror93D4NaN3U4...[0.0067204430541292475, 0.008331487632641807, ...[-0.004862257036458548, 0.014077170447753274, ...3.0355342.991152[0.006720440253943506, 0.00833148416118722, 0....[-0.005805280378137928, 0.015115419540555773, ...[0.006720440253943506, 0.00833148416118722, 0....[-0.004862255010517295, 0.01407716458226321, 0...3.0355342.991152
2FBIfingerprint1093D4NaN4NaN3...[0.006466897046995817, 0.014694837513784692, -...[0.01523113313292473, 0.005271417432183582, -0...2.9023562.850218[0.0064668943524542844, 0.014694831390933237, ...[0.013922101038066187, 0.0023911841962956006, ...[0.0064668943524542844, 0.014694831390933237, ...[0.01381456413075283, 0.0024352598782685863, -...2.9023562.895993
3FBIinvestigation1103U3U3U3...[0.006466897046995817, 0.014694837513784692, -...[0.013016090555331788, 0.01114268765690899, -0...2.9952062.962306[0.0064668943524542844, 0.014694831390933237, ...[0.013274960537868754, 0.010965634834463656, -...[0.0064668943524542844, 0.014694831390933237, ...[0.013242882478240212, 0.010953106140234146, -...2.9952062.993596
4HarvardYale1372S3S2S2...[0.01322626153814759, 0.005047111609608307, -0...[0.010410829355084429, 0.014776997941327313, -...1.6893151.689315[0.013226256027203037, 0.00504710950664428, -0...[0.010410825017237097, 0.01477699178424233, -0...[0.013226256027203037, 0.00504710950664428, -0...[0.010410825017237097, 0.01477699178424233, -0...1.6893151.689315
\n", - "

5 rows × 104 columns

\n", - "" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.0067204430541292475, 0.008331487632641807, ... \n", - "1 ... [0.0067204430541292475, 0.008331487632641807, ... \n", - "2 ... [0.006466897046995817, 0.014694837513784692, -... \n", - "3 ... [0.006466897046995817, 0.014694837513784692, -... \n", - "4 ... [0.01322626153814759, 0.005047111609608307, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859562266559, -0.011723668837741234,... 3.468370 \n", - "1 [-0.004862257036458548, 0.014077170447753274, ... 3.035534 \n", - "2 [0.01523113313292473, 0.005271417432183582, -0... 2.902356 \n", - "3 [0.013016090555331788, 0.01114268765690899, -0... 2.995206 \n", - "4 [0.010410829355084429, 0.014776997941327313, -... 1.689315 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.384407 \n", - "1 2.991152 \n", - "2 2.850218 \n", - "3 2.962306 \n", - "4 1.689315 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "1 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "2 [0.0064668943524542844, 0.014694831390933237, ... \n", - "3 [0.0064668943524542844, 0.014694831390933237, ... \n", - "4 [0.013226256027203037, 0.00504710950664428, -0... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.0050116109222357935, -0.013383541509188317... \n", - "1 [-0.005805280378137928, 0.015115419540555773, ... \n", - "2 [0.013922101038066187, 0.0023911841962956006, ... \n", - "3 [0.013274960537868754, 0.010965634834463656, -... \n", - "4 [0.010410825017237097, 0.01477699178424233, -0... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "1 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "2 [0.0064668943524542844, 0.014694831390933237, ... \n", - "3 [0.0064668943524542844, 0.014694831390933237, ... \n", - "4 [0.013226256027203037, 0.00504710950664428, -0... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.004971298302113362, -0.013254267455943004,... \n", - "1 [-0.004862255010517295, 0.01407716458226321, 0... \n", - "2 [0.01381456413075283, 0.0024352598782685863, -... \n", - "3 [0.013242882478240212, 0.010953106140234146, -... \n", - "4 [0.010410825017237097, 0.01477699178424233, -0... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.468370 3.463734 \n", - "1 3.035534 2.991152 \n", - "2 2.902356 2.895993 \n", - "3 2.995206 2.993596 \n", - "4 1.689315 1.689315 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 212, - "id": "connected-limit", - "metadata": {}, - "outputs": [], - "source": [ - "cons_ann_3 = pd.read_csv('../data/consolidated_annotation_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 213, - "id": "trying-authorization", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2H_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversed
0toolimplement1NaN3U1NaN2i1NaN1.60.8945.3134.688
1arrangementaccommodation1NaN4NaN2I1NaN1NaN1.81.3045.1254.875
2woodforest3H1NaN1NaN1NaN3l1.81.0957.9382.063
3benchmarkindex2I2I2I4NaN4NaN2.81.0955.5004.500
4practiceinstitution2I3L,I3I3i3i2.80.4473.5636.438
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 tool implement 1 NaN 3 U 1 NaN 2 \n", - "1 arrangement accommodation 1 NaN 4 NaN 2 I 1 \n", - "2 wood forest 3 H 1 NaN 1 NaN 1 \n", - "3 benchmark index 2 I 2 I 2 I 4 \n", - "4 practice institution 2 I 3 L,I 3 I 3 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed \n", - "0 i 1 NaN 1.6 0.894 5.313 4.688 \n", - "1 NaN 1 NaN 1.8 1.304 5.125 4.875 \n", - "2 NaN 3 l 1.8 1.095 7.938 2.063 \n", - "3 NaN 4 NaN 2.8 1.095 5.500 4.500 \n", - "4 i 3 i 2.8 0.447 3.563 6.438 " - ] - }, - "execution_count": 213, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cons_ann_3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "id": "political-laptop", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "15" - ] - }, - "execution_count": 222, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(cons_ann_3)" - ] - }, - { - "cell_type": "code", - "execution_count": 300, - "id": "improved-relaxation", - "metadata": {}, - "outputs": [], - "source": [ - "ca_cols = cons_ann_3.columns\n", - "for _,row in cons_ann_3.iterrows():\n", - "# if ((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])).sum() == 2:\n", - "# print(row['Word 1'], row['Word 2'])\n", - "# print(wordSim353AnnotDF_New_Merged_DF[((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2']))])\n", - "# print (((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])).sum())\n", - " for col in ca_cols:\n", - " if col in ['Word 1', 'Word 2']:\n", - " continue\n", - " \n", - " wordSim353AnnotDF_New_Merged_DF.at[wordSim353AnnotDF_New_Merged_DF.index[(wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])], col] = row[col]\n", - "# print(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])][col])\n", - "# " - ] - }, - { - "cell_type": "code", - "execution_count": 301, - "id": "relevant-dodge", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[~wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2']].duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outside-letters", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "pretty-scholar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv', index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "gorgeous-syndrome", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'ID',\n", - " 'H_Sim',\n", - " 'H_Dim',\n", - " 'F_Sim',\n", - " 'F_Dim',\n", - " 'N_Sim',\n", - " 'N_Dim',\n", - " 'D_Sim',\n", - " 'D_Dim',\n", - " 'P_Sim',\n", - " 'P_Dim',\n", - " 'Avg',\n", - " 'Stdev',\n", - " 'H_orig',\n", - " 'H_reversed',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].to_csv('../data/wordsim353_all_embeddings_with_retrofits_scores_only_new.csv', index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "alpha-department", - "metadata": {}, - "source": [ - "# Determine Differences" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ahead-syndication", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "suspended-beach", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "racial-behalf", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "another-mississippi", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "metallic-smith", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.580594\n", - "std 0.457960\n", - "min 0.000000\n", - "25% 0.222619\n", - "50% 0.495179\n", - "75% 0.852326\n", - "max 5.000000\n", - "Name: transe_19k_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['transe_19k_old_cosSim_Diff'],ascending=False)['transe_19k_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "designed-vacuum", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.645644\n", - "std 0.526932\n", - "min 0.000000\n", - "25% 0.250461\n", - "50% 0.562808\n", - "75% 0.927608\n", - "max 5.000000\n", - "Name: transe_19k_1_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['transe_19k_1_new_cosSim_Diff'],ascending=False)['transe_19k_1_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "facial-second", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.495179:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 0.562808:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "lightweight-average", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'transe_19k_old_cosSim', 'transe_19k_1_new_cosSim', 'transe_19k_old_cosSim_Diff', 'transe_19k_1_new_cosSim_Diff', 'transe_19k_old_cosSim_Diff_Cat', 'transe_19k_1_new_cosSim_Diff_Cat']]" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "american-egypt", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgtranse_19k_old_cosSimtranse_19k_1_new_cosSimtranse_19k_old_cosSim_Difftranse_19k_1_new_cosSim_Difftranse_19k_old_cosSim_Diff_Cattranse_19k_1_new_cosSim_Diff_Cat
0Arafatpeace3.603.0763033.4776650.5236970.12233510
1Arafatterror3.603.1036682.9521810.4963320.64781911
2FBIfingerprint3.602.9113343.1262090.6886660.47379110
3FBIinvestigation3.002.8817632.9437500.1182370.05625000
4HarvardYale2.202.1350422.0800220.0649580.11997800
..............................
339wartroops3.002.8075393.1619370.1924610.16193700
340weaponsecret3.803.3102612.7938320.4897391.00616801
341weatherforecast3.002.4496022.7392800.5503980.26072010
342woodforest1.802.9316103.5417541.1316101.74175411
343wordsimilarity3.752.6484272.7581561.1015730.99184411
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg transe_19k_old_cosSim \\\n", - "0 Arafat peace 3.60 3.076303 \n", - "1 Arafat terror 3.60 3.103668 \n", - "2 FBI fingerprint 3.60 2.911334 \n", - "3 FBI investigation 3.00 2.881763 \n", - "4 Harvard Yale 2.20 2.135042 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.807539 \n", - "340 weapon secret 3.80 3.310261 \n", - "341 weather forecast 3.00 2.449602 \n", - "342 wood forest 1.80 2.931610 \n", - "343 word similarity 3.75 2.648427 \n", - "\n", - " transe_19k_1_new_cosSim transe_19k_old_cosSim_Diff \\\n", - "0 3.477665 0.523697 \n", - "1 2.952181 0.496332 \n", - "2 3.126209 0.688666 \n", - "3 2.943750 0.118237 \n", - "4 2.080022 0.064958 \n", - ".. ... ... \n", - "339 3.161937 0.192461 \n", - "340 2.793832 0.489739 \n", - "341 2.739280 0.550398 \n", - "342 3.541754 1.131610 \n", - "343 2.758156 1.101573 \n", - "\n", - " transe_19k_1_new_cosSim_Diff transe_19k_old_cosSim_Diff_Cat \\\n", - "0 0.122335 1 \n", - "1 0.647819 1 \n", - "2 0.473791 1 \n", - "3 0.056250 0 \n", - "4 0.119978 0 \n", - ".. ... ... \n", - "339 0.161937 0 \n", - "340 1.006168 0 \n", - "341 0.260720 1 \n", - "342 1.741754 1 \n", - "343 0.991844 1 \n", - "\n", - " transe_19k_1_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 1 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 0 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "automotive-trouble", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "123" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "compressed-emergency", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['old_cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "alert-holmes", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['new_cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "psychological-walter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['cat'] = wordSim353AnnotDF_New_Merged_DF['Avg'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "arabic-binding", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['old_cat'] != wordSim353AnnotDF_New_Merged_DF['cat']].to_csv('../data/transEmb/badBefore.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "acoustic-holocaust", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['new_cat'] != wordSim353AnnotDF_New_Merged_DF['cat']].to_csv('../data/transEmb/badAfter.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "accompanied-spyware", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/transEmb/entireSet.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "reverse-cincinnati", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "consistent-difference", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "breathing-footage", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "chief-chance", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "shaped-letter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "adolescent-monte", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "swiss-bridal", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "current-mirror", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "placed-identity", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "stopped-daisy", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "deadly-forwarding", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "southeast-canal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.567297\n", - "std 0.435379\n", - "min 0.000000\n", - "25% 0.250130\n", - "50% 0.508725\n", - "75% 0.835197\n", - "max 5.000000\n", - "Name: concat_19k_v1_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_old_cosSim_Diff'],ascending=False)['concat_19k_v1_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "adequate-terminology", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 3.440000e+02\n", - "mean 5.938081e-01\n", - "std 4.503200e-01\n", - "min 4.440892e-16\n", - "25% 2.665817e-01\n", - "50% 5.349785e-01\n", - "75% 8.528840e-01\n", - "max 5.000000e+00\n", - "Name: concat_19k_v1_2_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_2_new_cosSim_Diff'],ascending=False)['concat_19k_v1_2_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "wired-shoot", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.508725:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 5.349785e-01:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "operating-senegal", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'concat_19k_v1_old_cosSim', 'concat_19k_v1_2_new_cosSim', 'concat_19k_v1_old_cosSim_Diff', 'concat_19k_v1_2_new_cosSim_Diff', 'concat_19k_v1_old_cosSim_Diff_Cat', 'concat_19k_v1_2_new_cosSim_Diff_Cat']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quantitative-money", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_19k_v1_old_cosSim_Diffconcat_19k_v1_2_new_cosSim_Diffconcat_19k_v1_old_cosSim_Diff_Catconcat_19k_v1_2_new_cosSim_Diff_Cat
0Arafatpeace3.603.2511983.1932710.3488020.40672900
1Arafatterror3.603.2314093.1572290.3685910.44277100
2FBIfingerprint3.602.9484872.8530480.6515130.74695211
3FBIinvestigation3.002.9303652.8956040.0696350.10439600
4HarvardYale2.201.9910541.9910540.2089460.20894600
..............................
339wartroops3.002.9139312.7872130.0860690.21278700
340weaponsecret3.803.1525133.1190650.6474870.68093511
341weatherforecast3.002.4927652.4623890.5072350.53761101
342woodforest1.802.6126812.6069410.8126810.80694111
343wordsimilarity3.752.6782762.6528291.0717241.09717111
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg concat_19k_v1_old_cosSim \\\n", - "0 Arafat peace 3.60 3.251198 \n", - "1 Arafat terror 3.60 3.231409 \n", - "2 FBI fingerprint 3.60 2.948487 \n", - "3 FBI investigation 3.00 2.930365 \n", - "4 Harvard Yale 2.20 1.991054 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.913931 \n", - "340 weapon secret 3.80 3.152513 \n", - "341 weather forecast 3.00 2.492765 \n", - "342 wood forest 1.80 2.612681 \n", - "343 word similarity 3.75 2.678276 \n", - "\n", - " concat_19k_v1_2_new_cosSim concat_19k_v1_old_cosSim_Diff \\\n", - "0 3.193271 0.348802 \n", - "1 3.157229 0.368591 \n", - "2 2.853048 0.651513 \n", - "3 2.895604 0.069635 \n", - "4 1.991054 0.208946 \n", - ".. ... ... \n", - "339 2.787213 0.086069 \n", - "340 3.119065 0.647487 \n", - "341 2.462389 0.507235 \n", - "342 2.606941 0.812681 \n", - "343 2.652829 1.071724 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff concat_19k_v1_old_cosSim_Diff_Cat \\\n", - "0 0.406729 0 \n", - "1 0.442771 0 \n", - "2 0.746952 1 \n", - "3 0.104396 0 \n", - "4 0.208946 0 \n", - ".. ... ... \n", - "339 0.212787 0 \n", - "340 0.680935 1 \n", - "341 0.537611 0 \n", - "342 0.806941 1 \n", - "343 1.097171 1 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 0 \n", - "2 1 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 1 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "attractive-annex", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "164" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "proof-registrar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "elder-harmony", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "magnetic-marina", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "satisfied-increase", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "surprising-milan", - "metadata": {}, - "source": [ - "# SVM Models" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "worldwide-genius", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting datacompy\n", - " Downloading datacompy-0.7.2-py3-none-any.whl (27 kB)\n", - "Requirement already satisfied: numpy>=1.11.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.20.1)\n", - "Requirement already satisfied: pandas>=0.25.0 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.2.2)\n", - "Requirement already satisfied: pytz>=2017.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2021.1)\n", - "Requirement already satisfied: python-dateutil>=2.7.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2.8.1)\n", - "Requirement already satisfied: six>=1.5 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas>=0.25.0->datacompy) (1.15.0)\n", - "Installing collected packages: datacompy\n", - "Successfully installed datacompy-0.7.2\n" - ] - } - ], - "source": [ - "!pip install datacompy" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "overhead-board", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "developing-option", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "catholic-compensation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004515859576248157, -0.01172366887295375, ...3.2445393.175157[0.006720440291834372, 0.008331484208161396, 0...[-0.005011610937734838, -0.013383541550578623,...[0.006720440291834372, 0.008331484208161396, 0...[-0.00497129831746384, -0.01325426749683971, -...3.2445393.240270
1Arafatterror93D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004862257088069111, 0.014077170590128979, ...3.0850833.013958[0.006720440291834372, 0.008331484208161396, 0...[-0.005805280438126139, 0.015115419696749257, ...[0.006720440291834372, 0.008331484208161396, 0...[-0.004862255062129871, 0.014077164724644747, ...3.0850833.013958
2FBIfingerprint1093D4NaN4NaN3...[0.006466897059812569, 0.014694837542908411, -...[0.01523113309590259, 0.005271417380511587, -0...2.8230932.745230[0.006466894365273728, 0.014694831420063071, -...[0.013922101136130544, 0.0023911842131386003, ...[0.006466894365273728, 0.014694831420063071, -...[0.013814564227839972, 0.0024352598952305004, ...2.8230932.816176
3FBIinvestigation1103U3U3U3...[0.006466897059812569, 0.014694837542908411, -...[0.013016090623183913, 0.01114268771757639, -0...2.9209862.886161[0.006466894365273728, 0.014694831420063071, -...[0.01327496060589727, 0.010965634890657862, -0...[0.006466894365273728, 0.014694831420063071, -...[0.013242882546106787, 0.010953106196386554, -...2.9209862.919120
4HarvardYale1372S3S2S2...[0.01322626159341165, 0.005047111630696947, -0...[0.010410829393995813, 0.014776997996557633, -...1.7076551.707655[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...1.7076551.707655
\n", - "

5 rows × 104 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "1 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "2 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "3 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "4 ... [0.01322626159341165, 0.005047111630696947, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859576248157, -0.01172366887295375, ... 3.244539 \n", - "1 [-0.004862257088069111, 0.014077170590128979, ... 3.085083 \n", - "2 [0.01523113309590259, 0.005271417380511587, -0... 2.823093 \n", - "3 [0.013016090623183913, 0.01114268771757639, -0... 2.920986 \n", - "4 [0.010410829393995813, 0.014776997996557633, -... 1.707655 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.175157 \n", - "1 3.013958 \n", - "2 2.745230 \n", - "3 2.886161 \n", - "4 1.707655 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.005011610937734838, -0.013383541550578623,... \n", - "1 [-0.005805280438126139, 0.015115419696749257, ... \n", - "2 [0.013922101136130544, 0.0023911842131386003, ... \n", - "3 [0.01327496060589727, 0.010965634890657862, -0... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.00497129831746384, -0.01325426749683971, -... \n", - "1 [-0.004862255062129871, 0.014077164724644747, ... \n", - "2 [0.013814564227839972, 0.0024352598952305004, ... \n", - "3 [0.013242882546106787, 0.010953106196386554, -... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.244539 3.240270 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.816176 \n", - "3 2.920986 2.919120 \n", - "4 1.707655 1.707655 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "id": "expanded-uniform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
text_7props_19k_old_cosSimtext_7props_19k_2_new_cosSimtext_2props_19k_old_cosSimtext_2props_19k_2_new_cosSimcomplex_19k_old_cosSimcomplex_19k_2_new_cosSimtranse_19k_old_cosSimtranse_19k_1_new_cosSimabstract_19k_old_cosSimabstract_19k_2_new_cosSim...transe_probase_19k_old_cosSimtranse_probase_19k_1_new_cosSimconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_probase_19k_v1_old_cosSimconcat_probase_19k_v1_2_new_cosSimconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
count344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000...344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000
mean2.5110332.4648762.4822542.4351612.9833022.6848182.9833022.6800022.6528662.593916...2.9833022.5658862.8753812.8264932.8753812.8651012.8680662.8166852.8680662.856603
std1.1488211.1529111.1510601.1554270.6459110.5390920.6459110.6192390.6805250.653512...0.6459110.5967500.5739020.5755850.5739020.5744101.0971211.1063621.0971211.099179
min1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000...1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
25%2.0050971.9632291.9934241.9498692.5885912.4554312.5885912.3118182.1809122.137568...2.5885912.1836862.5779382.5510332.5779382.5838112.3843372.3506452.3843372.377672
50%2.3282762.2736742.2746682.2321563.0390872.7085693.0390872.7222782.6168102.591640...3.0390872.6080412.9505782.9120982.9505782.9339842.7164712.6570782.7164712.704941
75%2.6369072.5761552.5804822.5275543.3592432.9592593.3592433.0905633.2089193.060782...3.3592432.9352263.2087353.1644263.2087353.1962702.9922652.8996262.9922652.977770
max7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000004.3400894.327902...7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.000000
\n", - "

8 rows × 28 columns

\n", - "
" - ], - "text/plain": [ - " text_7props_19k_old_cosSim text_7props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.511033 2.464876 \n", - "std 1.148821 1.152911 \n", - "min 1.000000 1.000000 \n", - "25% 2.005097 1.963229 \n", - "50% 2.328276 2.273674 \n", - "75% 2.636907 2.576155 \n", - "max 7.000000 7.000000 \n", - "\n", - " text_2props_19k_old_cosSim text_2props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.482254 2.435161 \n", - "std 1.151060 1.155427 \n", - "min 1.000000 1.000000 \n", - "25% 1.993424 1.949869 \n", - "50% 2.274668 2.232156 \n", - "75% 2.580482 2.527554 \n", - "max 7.000000 7.000000 \n", - "\n", - " complex_19k_old_cosSim complex_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.684818 \n", - "std 0.645911 0.539092 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.455431 \n", - "50% 3.039087 2.708569 \n", - "75% 3.359243 2.959259 \n", - "max 7.000000 7.000000 \n", - "\n", - " transe_19k_old_cosSim transe_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.680002 \n", - "std 0.645911 0.619239 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.311818 \n", - "50% 3.039087 2.722278 \n", - "75% 3.359243 3.090563 \n", - "max 7.000000 7.000000 \n", - "\n", - " abstract_19k_old_cosSim abstract_19k_2_new_cosSim ... \\\n", - "count 344.000000 344.000000 ... \n", - "mean 2.652866 2.593916 ... \n", - "std 0.680525 0.653512 ... \n", - "min 1.000000 1.000000 ... \n", - "25% 2.180912 2.137568 ... \n", - "50% 2.616810 2.591640 ... \n", - "75% 3.208919 3.060782 ... \n", - "max 4.340089 4.327902 ... \n", - "\n", - " transe_probase_19k_old_cosSim transe_probase_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.565886 \n", - "std 0.645911 0.596750 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.183686 \n", - "50% 3.039087 2.608041 \n", - "75% 3.359243 2.935226 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v1_old_cosSim concat_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.826493 \n", - "std 0.573902 0.575585 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.551033 \n", - "50% 2.950578 2.912098 \n", - "75% 3.208735 3.164426 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v1_old_cosSim concat_probase_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.865101 \n", - "std 0.573902 0.574410 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.583811 \n", - "50% 2.950578 2.933984 \n", - "75% 3.208735 3.196270 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v2_old_cosSim concat_19k_v2_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.816685 \n", - "std 1.097121 1.106362 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.350645 \n", - "50% 2.716471 2.657078 \n", - "75% 2.992265 2.899626 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.856603 \n", - "std 1.097121 1.099179 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.377672 \n", - "50% 2.716471 2.704941 \n", - "75% 2.992265 2.977770 \n", - "max 7.000000 7.000000 \n", - "\n", - "[8 rows x 28 columns]" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "id": "indian-embassy", - "metadata": {}, - "outputs": [], - "source": [ - "import datacompy\n", - "compare = datacompy.Compare(\n", - " wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))],\n", - " wordSim353AnnotDF_New_Merged_DF_old[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF_old.columns.to_list()))],\n", - " join_columns = ['Word 1', 'Word 2'])" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "id": "vocational-nurse", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DataComPy Comparison\n", - "--------------------\n", - "\n", - "DataFrame Summary\n", - "-----------------\n", - "\n", - " DataFrame Columns Rows\n", - "0 df1 34 344\n", - "1 df2 34 344\n", - "\n", - "Column Summary\n", - "--------------\n", - "\n", - "Number of columns in common: 32\n", - "Number of columns in df1 but not in df2: 2\n", - "Number of columns in df2 but not in df1: 2\n", - "\n", - "Row Summary\n", - "-----------\n", - "\n", - "Matched on: word 1, word 2\n", - "Any duplicates on match values: No\n", - "Absolute Tolerance: 0\n", - "Relative Tolerance: 0\n", - "Number of rows in common: 344\n", - "Number of rows in df1 but not in df2: 0\n", - "Number of rows in df2 but not in df1: 0\n", - "\n", - "Number of rows with some compared columns unequal: 343\n", - "Number of rows with all compared columns equal: 1\n", - "\n", - "Column Comparison\n", - "-----------------\n", - "\n", - "Number of columns compared with some values unequal: 27\n", - "Number of columns compared with all values equal: 5\n", - "Total number of values which compare unequal: 5,136\n", - "\n", - "Columns with Unequal Values or Types\n", - "------------------------------------\n", - "\n", - " Column df1 dtype df2 dtype # Unequal Max Diff # Null Diff\n", - "25 abstract_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "17 abstract_19k_old_cossim float64 float64 9 4.440892e-16 0\n", - "8 abstract_firstsent_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "19 abstract_firstsent_19k_old_cossim float64 float64 8 4.440892e-16 0\n", - "6 category object object 4 0.000000e+00 0\n", - "12 complex_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "21 complex_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "11 complex_probase_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "18 complex_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "1 concat_19k_v1_2_new_cossim float64 float64 343 9.656675e-01 0\n", - "22 concat_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "2 concat_19k_v2_2_new_cossim float64 float64 325 4.810998e-01 0\n", - "3 concat_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "10 concat_probase_19k_v1_2_new_cossim float64 float64 341 9.673423e-01 0\n", - "7 concat_probase_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "26 concat_probase_19k_v2_2_new_cossim float64 float64 324 4.828636e-01 0\n", - "9 concat_probase_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "15 text_2props_19k_2_new_cossim float64 float64 7 4.440892e-16 0\n", - "0 text_2props_19k_old_cossim float64 float64 5 4.440892e-16 0\n", - "14 text_7props_19k_2_new_cossim float64 float64 11 4.440892e-16 0\n", - "24 text_7props_19k_old_cossim float64 float64 7 4.440892e-16 0\n", - "5 transe_19k_1_new_cossim float64 float64 5 4.440892e-16 0\n", - "4 transe_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "16 transe_probase_19k_1_new_cossim float64 float64 340 1.192889e-08 0\n", - "20 transe_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "23 transe_probase_1_new_cossim float64 float64 9 4.440892e-16 0\n", - "13 transe_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "\n", - "Sample Rows with Unequal Values\n", - "-------------------------------\n", - "\n", - " word 1 word 2 text_2props_19k_old_cossim (df1) text_2props_19k_old_cossim (df2)\n", - "33 bishop rabbi 2.333195 2.333195\n", - "69 credit card 1.834364 1.834364\n", - "107 drink ear 2.515900 2.515900\n", - "271 registration arrangement 1.826611 1.826611\n", - "169 line insurance 2.670612 2.670612\n", - "\n", - " word 1 word 2 concat_19k_v1_2_new_cossim (df1) concat_19k_v1_2_new_cossim (df2)\n", - "107 drink ear 3.116502 2.813165\n", - "112 energy crisis 3.024137 3.099512\n", - "14 admission ticket 2.647422 2.819317\n", - "63 computer software 2.167120 2.273544\n", - "241 precedent example 2.091422 2.138805\n", - "44 car flight 3.064250 2.948899\n", - "229 planet constellation 2.240850 2.286295\n", - "159 king queen 2.169999 2.241265\n", - "161 lad brother 2.755663 2.733430\n", - "297 stock egg 2.943623 2.952019\n", - "\n", - " word 1 word 2 concat_19k_v2_2_new_cossim (df1) concat_19k_v2_2_new_cossim (df2)\n", - "61 computer laboratory 2.670662 2.635687\n", - "239 precedent cognition 2.643438 2.676361\n", - "286 situation isolation 2.313211 2.399693\n", - "225 physics chemistry 1.755500 1.873616\n", - "262 psychology doctor 2.861167 2.665892\n", - "271 registration arrangement 1.935898 2.144032\n", - "111 drug abuse 2.653034 2.716209\n", - "150 impartiality interest 2.395906 2.496811\n", - "130 forest graveyard 2.963496 2.743907\n", - "80 cup substance 2.738585 2.703536\n", - "\n", - " word 1 word 2 concat_19k_v2_old_cossim (df1) concat_19k_v2_old_cossim (df2)\n", - "247 president medal 2.809529 3.039440\n", - "70 credit information 2.557827 2.567752\n", - "58 competition price 2.699197 2.854295\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "47 century nation 3.025727 3.021246\n", - "280 seven series 2.801360 2.821742\n", - "193 money dollar 2.376377 2.437513\n", - "5 Japanese American 2.564544 2.535274\n", - "340 weapon secret 2.889109 2.897323\n", - "189 money bank 2.261778 2.170577\n", - "\n", - " word 1 word 2 transe_19k_old_cossim (df1) transe_19k_old_cossim (df2)\n", - "36 book paper 3.078243 2.635533\n", - "5 Japanese American 2.496058 2.408249\n", - "26 baby mother 2.292784 2.155920\n", - "248 problem airport 3.826307 3.170909\n", - "55 coast hill 3.722873 2.798622\n", - "112 energy crisis 3.106233 3.230795\n", - "340 weapon secret 3.285620 3.310261\n", - "219 opera industry 3.296724 3.553488\n", - "169 line insurance 3.089979 2.829222\n", - "332 type kind 1.000000 1.000000\n", - "\n", - " word 1 word 2 transe_19k_1_new_cossim (df1) transe_19k_1_new_cossim (df2)\n", - "192 money deposit 2.837495 2.837495\n", - "232 planet people 3.716617 3.716617\n", - "114 energy secretary 2.865451 2.865451\n", - "304 street block 2.904156 2.904156\n", - "271 registration arrangement 1.933719 1.933719\n", - "\n", - " word 1 word 2 category (df1) category (df2)\n", - "296 stock CD U M\n", - "45 cell phone I M\n", - "328 tool implement I M\n", - "237 practice institution M U\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_old_cossim (df1) concat_probase_19k_v1_old_cossim (df2)\n", - "312 television film 3.266487 2.813985\n", - "191 money currency 2.401111 2.298975\n", - "243 precedent information 3.131530 3.019516\n", - "53 closet clothes 2.947983 2.705879\n", - "142 government crisis 3.181431 2.683486\n", - "183 media trading 3.103774 2.822458\n", - "89 delay racism 3.037041 2.943246\n", - "32 bird crane 2.323600 2.007661\n", - "126 food rooster 3.641608 3.323421\n", - "43 car automobile 1.000000 1.000000\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_2_new_cossim (df1) abstract_firstsent_19k_2_new_cossim (df2)\n", - "67 country citizen 2.307399 2.307399\n", - "218 oil stock 2.875288 2.875288\n", - "337 vodka gin 1.848263 1.848263\n", - "152 investor earning 1.998387 1.998387\n", - "90 deployment departure 1.826386 1.826386\n", - "208 movie theater 2.390347 2.390347\n", - "263 psychology fear 2.679016 2.679016\n", - "96 discovery space 2.952799 2.952799\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_old_cossim (df1) concat_probase_19k_v2_old_cossim (df2)\n", - "21 architecture century 3.188363 3.081890\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "60 computer keyboard 2.131908 2.212525\n", - "120 fertility egg 2.202871 2.244311\n", - "311 telephone communication 2.677514 2.463340\n", - "238 precedent antecedent 1.935676 2.019795\n", - "33 bishop rabbi 2.277504 2.458967\n", - "203 morality importance 2.272562 2.446757\n", - "228 planet astronomer 2.470710 2.152302\n", - "144 governor office 2.720705 2.742336\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_2_new_cossim (df1) concat_probase_19k_v1_2_new_cossim (df2)\n", - "166 life death 2.384376 2.467146\n", - "249 problem challenge 2.573163 2.851951\n", - "216 noon string 2.831571 3.404519\n", - "214 network hardware 2.797734 2.468385\n", - "324 tiger mammal 2.608830 2.218881\n", - "269 reason hypertension 3.043544 2.554564\n", - "35 book library 3.335751 2.560611\n", - "169 line insurance 3.121240 2.947265\n", - "319 tiger carnivore 3.332882 3.004569\n", - "161 lad brother 2.885448 2.868957\n", - "\n", - " word 1 word 2 complex_probase_2_new_cossim (df1) complex_probase_2_new_cossim (df2)\n", - "39 bread butter 1.926594 1.926594\n", - "102 dollar buck 2.733086 2.733086\n", - "193 money dollar 2.733086 2.733086\n", - "150 impartiality interest 2.323327 2.323327\n", - "1 Arafat terror 3.103668 3.103668\n", - "266 psychology psychiatry 1.826092 1.826092\n", - "10 Mexico Brazil 1.921104 1.921104\n", - "5 Japanese American 2.408249 2.408249\n", - "\n", - " word 1 word 2 complex_19k_old_cossim (df1) complex_19k_old_cossim (df2)\n", - "115 environment ecology 2.920428 2.903515\n", - "256 psychology Freud 3.234018 2.992413\n", - "169 line insurance 3.089979 2.829222\n", - "33 bishop rabbi 2.300842 2.845229\n", - "220 opera performance 3.163513 3.062105\n", - "267 psychology science 2.231959 2.334221\n", - "265 psychology mind 2.886509 2.426014\n", - "45 cell phone 3.622510 2.693966\n", - "26 baby mother 2.292784 2.155920\n", - "161 lad brother 3.110214 3.092837\n", - "\n", - " word 1 word 2 transe_probase_old_cossim (df1) transe_probase_old_cossim (df2)\n", - "209 murder manslaughter 2.249251 2.257188\n", - "141 glass metal 3.225510 2.093335\n", - "296 stock CD 3.395233 3.514011\n", - "325 tiger organism 3.290722 2.591059\n", - "35 book library 3.701910 2.539030\n", - "2 FBI fingerprint 3.149125 2.911334\n", - "254 profit loss 1.653272 1.573516\n", - "334 video archive 3.219152 2.407191\n", - "166 life death 2.565452 2.692000\n", - "9 Mars scientist 3.504530 3.187455\n", - "\n", - " word 1 word 2 text_7props_19k_2_new_cossim (df1) text_7props_19k_2_new_cossim (df2)\n", - "176 luxury car 2.942098 2.942098\n", - "293 space world 2.109041 2.109041\n", - "309 summer drought 2.687325 2.687325\n", - "67 country citizen 1.942392 1.942392\n", - "169 line insurance 2.691916 2.691916\n", - "302 stock phone 2.963663 2.963663\n", - "5 Japanese American 2.145108 2.145108\n", - "238 precedent antecedent 1.844509 1.844509\n", - "143 governor interview 2.651640 2.651640\n", - "152 investor earning 1.902240 1.902240\n", - "\n", - " word 1 word 2 text_2props_19k_2_new_cossim (df1) text_2props_19k_2_new_cossim (df2)\n", - "329 train car 1.998965 1.998965\n", - "10 Mexico Brazil 1.950233 1.950233\n", - "19 announcement production 1.866451 1.866451\n", - "121 fighting defeating 1.940122 1.940122\n", - "293 space world 1.993016 1.993016\n", - "8 Maradona football 2.351065 2.351065\n", - "114 energy secretary 2.803514 2.803514\n", - "\n", - " word 1 word 2 transe_probase_19k_1_new_cossim (df1) transe_probase_19k_1_new_cossim (df2)\n", - "155 journal association 2.736767 2.736767\n", - "123 focus life 2.337493 2.337493\n", - "159 king queen 1.570639 1.570639\n", - "169 line insurance 2.557647 2.557647\n", - "305 street children 3.186623 3.186623\n", - "336 vodka brandy 1.527815 1.527815\n", - "232 planet people 3.593423 3.593423\n", - "130 forest graveyard 3.142560 3.142560\n", - "69 credit card 2.076337 2.076337\n", - "40 brother monk 2.683273 2.683273\n", - "\n", - " word 1 word 2 abstract_19k_old_cossim (df1) abstract_19k_old_cossim (df2)\n", - "285 situation conclusion 1.808156 1.808156\n", - "303 street avenue 2.281843 2.281843\n", - "94 disability death 2.746255 2.746255\n", - "5 Japanese American 3.292768 3.292768\n", - "183 media trading 3.108796 3.108796\n", - "11 OPEC country 3.042327 3.042327\n", - "162 lad wizard 3.334772 3.334772\n", - "129 football tennis 2.518421 2.518421\n", - "231 planet moon 1.920149 1.920149\n", - "\n", - " word 1 word 2 complex_probase_old_cossim (df1) complex_probase_old_cossim (df2)\n", - "63 computer software 2.565704 2.726328\n", - "21 architecture century 3.418617 3.099197\n", - "179 man woman 2.351588 1.471079\n", - "149 image surface 3.137178 3.256807\n", - "81 cup tableware 2.124012 1.954043\n", - "36 book paper 3.078243 2.635533\n", - "194 money laundering 2.759570 2.800958\n", - "236 possibility girl 3.361988 2.920025\n", - "209 murder manslaughter 2.249251 2.257188\n", - "218 oil stock 2.577913 2.625197\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_old_cossim (df1) abstract_firstsent_19k_old_cossim (df2)\n", - "246 preservation world 3.234863 3.234863\n", - "5 Japanese American 2.728319 2.728319\n", - "285 situation conclusion 1.808156 1.808156\n", - "244 precedent law 1.878214 1.878214\n", - "94 disability death 3.016865 3.016865\n", - "175 lover quarrel 3.157233 3.157233\n", - "109 drink mother 3.128050 3.128050\n", - "177 magician wizard 1.909871 1.909871\n", - "\n", - " word 1 word 2 transe_probase_19k_old_cossim (df1) transe_probase_19k_old_cossim (df2)\n", - "79 cup object 2.627446 2.362561\n", - "234 planet star 2.586230 2.320493\n", - "176 luxury car 3.150901 2.977136\n", - "156 journey car 2.971068 2.457446\n", - "324 tiger mammal 2.909669 2.322927\n", - "120 fertility egg 2.547399 2.671721\n", - "248 problem airport 3.826307 3.170909\n", - "16 aluminum metal 2.712132 1.916614\n", - "36 book paper 3.078243 2.635533\n", - "211 music project 3.141641 3.304875\n", - "\n", - " word 1 word 2 complex_probase_19k_old_cossim (df1) complex_probase_19k_old_cossim (df2)\n", - "277 seafood lobster 2.240601 2.113436\n", - "27 bank money 3.066413 2.792811\n", - "337 vodka gin 1.857971 2.369972\n", - "211 music project 3.141641 3.304875\n", - "271 registration arrangement 2.319711 2.954145\n", - "143 governor interview 4.023383 3.076389\n", - "149 image surface 3.137178 3.256807\n", - "94 disability death 2.565398 2.939547\n", - "166 life death 2.565452 2.692000\n", - "226 physics proton 3.802075 2.800635\n", - "\n", - " word 1 word 2 concat_19k_v1_old_cossim (df1) concat_19k_v1_old_cossim (df2)\n", - "270 record number 2.977163 2.589607\n", - "282 shower flood 3.398140 2.908007\n", - "97 dividend calculation 2.507181 2.708939\n", - "239 precedent cognition 2.724066 2.793355\n", - "125 food preparation 2.932974 2.836360\n", - "342 wood forest 3.144257 2.612681\n", - "304 street block 2.690410 2.201689\n", - "250 production crew 2.552550 2.783363\n", - "6 Jerusalem Israel 2.978292 2.383538\n", - "210 museum theater 3.208882 2.943593\n", - "\n", - " word 1 word 2 transe_probase_1_new_cossim (df1) transe_probase_1_new_cossim (df2)\n", - "108 drink eat 2.334188 2.334188\n", - "25 attempt peace 2.624155 2.624155\n", - "232 planet people 3.392578 3.392578\n", - "204 morality marriage 2.173908 2.173908\n", - "267 psychology science 1.840069 1.840069\n", - "20 announcement warning 1.930855 1.930855\n", - "37 boxing round 3.527058 3.527058\n", - "77 cup food 2.657233 2.657233\n", - "73 cup artifact 2.065621 2.065621\n", - "\n", - " word 1 word 2 text_7props_19k_old_cossim (df1) text_7props_19k_old_cossim (df2)\n", - "311 telephone communication 2.269291 2.269291\n", - "205 movie critic 2.872865 2.872865\n", - "69 credit card 1.834364 1.834364\n", - "334 video archive 1.948662 1.948662\n", - "51 change attitude 1.894075 1.894075\n", - "260 psychology depression 1.948810 1.948810\n", - "63 computer software 1.918968 1.918968\n", - "\n", - " word 1 word 2 abstract_19k_2_new_cossim (df1) abstract_19k_2_new_cossim (df2)\n", - "90 deployment departure 1.826386 1.826386\n", - "14 admission ticket 2.890691 2.890691\n", - "84 day summer 1.820569 1.820569\n", - "217 observation architecture 2.541219 2.541219\n", - "243 precedent information 2.768309 2.768309\n", - "253 professor doctor 2.462181 2.462181\n", - "60 computer keyboard 1.977226 1.977226\n", - "95 disaster area 3.350219 3.350219\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_2_new_cossim (df1) concat_probase_19k_v2_2_new_cossim (df2)\n", - "208 movie theater 2.614114 2.456455\n", - "177 magician wizard 2.146197 2.011585\n", - "86 death row 2.990100 2.809539\n", - "293 space world 2.481352 2.412213\n", - "123 focus life 2.908816 2.990622\n", - "316 territory surface 2.778507 2.489232\n", - "289 smart student 2.754242 2.578396\n", - "333 victim emergency 2.380390 2.445431\n", - "55 coast hill 2.826077 2.516979\n", - "78 cup liquid 2.365327 2.264276\n", - "\n", - "\n" - ] - } - ], - "source": [ - "print(compare.report())" - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "id": "common-vietnam", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idword 1word 2idh_simh_dimf_simf_dimn_sim...concat_19k_v2_word2_newconcat_19k_v2_old_cossimconcat_19k_v2_2_new_cossimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cossimconcat_probase_19k_v2_2_new_cossimavg_old
0Q106106Q11460closetclothes423H3H3...[0.0014151543049584102, 0.003161483781535701, ...2.6970222.652559[0.013902607489678993, 0.013241494756981564, -...[0.0014224480432097992, 0.0031547764732941653,...[0.01371531560905985, 0.013126875633706597, -0...[0.0014206775968733409, 0.0031581452887393872,...2.6970222.6833183.0
1Q107Q16502spaceworld2933L3S3...[-0.0031782974877087693, 0.003973805776938075,...2.4858592.347308[0.00027019944749503126, 0.005353652289998999,...[-0.0032792710227188605, 0.0036472880832864947...[0.00027492382990721006, 0.0053545622809597, -...[-0.0032450374860671267, 0.0036673577053825254...2.4858592.4813523.2
2Q107Q2329spacechemistry2924NaN4NaN4...[0.015268952851071075, -0.0024137893437008715,...2.7987882.782963[0.00027019944749503126, 0.005353652289998999,...[0.015322423107720673, -0.0024500099720118624,...[0.00027492382990721006, 0.0053545622809597, -...[0.015281665873653082, -0.002421165402091456, ...2.7987882.7950474.0
3Q1074Q7364skineye2883H3H3...[0.002992664951436964, 0.013922942027531155, -...2.3558132.314417[-0.0026976204618851985, 0.001541600665881322,...[0.0033640181667058486, 0.014044398230441645, ...[-0.002678224125439186, 0.0015598357892553907,...[0.0033484286344994184, 0.014002864550517797, ...2.3558132.3506033.0
4Q1079023Q500834championshiptournament381NaN1NaN2...[0.00920825730356781, 0.011965374832474578, 0....1.8686991.865663[-0.0008601077391385219, 0.005201185839222482,...[0.00923153244996602, 0.011960544533439752, 0....[-0.0008458279784483333, 0.005209858282773185,...[0.009207264410626997, 0.011951895965764294, 0...1.8686991.8667851.2
\n", - "

5 rows × 105 columns

\n", - "
" - ], - "text/plain": [ - " word1_kg_id word2_kg_id word 1 word 2 id h_sim h_dim f_sim \\\n", - "0 Q106106 Q11460 closet clothes 42 3 H 3 \n", - "1 Q107 Q16502 space world 293 3 L 3 \n", - "2 Q107 Q2329 space chemistry 292 4 NaN 4 \n", - "3 Q1074 Q7364 skin eye 288 3 H 3 \n", - "4 Q1079023 Q500834 championship tournament 38 1 NaN 1 \n", - "\n", - " f_dim n_sim ... concat_19k_v2_word2_new \\\n", - "0 H 3 ... [0.0014151543049584102, 0.003161483781535701, ... \n", - "1 S 3 ... [-0.0031782974877087693, 0.003973805776938075,... \n", - "2 NaN 4 ... [0.015268952851071075, -0.0024137893437008715,... \n", - "3 H 3 ... [0.002992664951436964, 0.013922942027531155, -... \n", - "4 NaN 2 ... [0.00920825730356781, 0.011965374832474578, 0.... \n", - "\n", - " concat_19k_v2_old_cossim concat_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.652559 \n", - "1 2.485859 2.347308 \n", - "2 2.798788 2.782963 \n", - "3 2.355813 2.314417 \n", - "4 1.868699 1.865663 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.013902607489678993, 0.013241494756981564, -... \n", - "1 [0.00027019944749503126, 0.005353652289998999,... \n", - "2 [0.00027019944749503126, 0.005353652289998999,... \n", - "3 [-0.0026976204618851985, 0.001541600665881322,... \n", - "4 [-0.0008601077391385219, 0.005201185839222482,... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [0.0014224480432097992, 0.0031547764732941653,... \n", - "1 [-0.0032792710227188605, 0.0036472880832864947... \n", - "2 [0.015322423107720673, -0.0024500099720118624,... \n", - "3 [0.0033640181667058486, 0.014044398230441645, ... \n", - "4 [0.00923153244996602, 0.011960544533439752, 0.... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.01371531560905985, 0.013126875633706597, -0... \n", - "1 [0.00027492382990721006, 0.0053545622809597, -... \n", - "2 [0.00027492382990721006, 0.0053545622809597, -... \n", - "3 [-0.002678224125439186, 0.0015598357892553907,... \n", - "4 [-0.0008458279784483333, 0.005209858282773185,... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [0.0014206775968733409, 0.0031581452887393872,... \n", - "1 [-0.0032450374860671267, 0.0036673577053825254... \n", - "2 [0.015281665873653082, -0.002421165402091456, ... \n", - "3 [0.0033484286344994184, 0.014002864550517797, ... \n", - "4 [0.009207264410626997, 0.011951895965764294, 0... \n", - "\n", - " concat_probase_19k_v2_old_cossim concat_probase_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.683318 \n", - "1 2.485859 2.481352 \n", - "2 2.798788 2.795047 \n", - "3 2.355813 2.350603 \n", - "4 1.868699 1.866785 \n", - "\n", - " avg_old \n", - "0 3.0 \n", - "1 3.2 \n", - "2 4.0 \n", - "3 3.0 \n", - "4 1.2 \n", - "\n", - "[5 rows x 105 columns]" - ] - }, - "execution_count": 157, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "rising-platform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.20519776]])" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cosine_similarity(np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word1_new'][1:-1].split(\",\")]).reshape(1,-1), np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word2_new'][1:-1].split(\",\")]).reshape(1,-1))" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "governing-offer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Word 1', 'Word 2', 'ID', 'H_Sim', 'H_Dim', 'F_Sim', 'F_Dim', 'N_Sim',\n", - " 'N_Dim', 'D_Sim',\n", - " ...\n", - " 'concat_19k_v2_word1_new', 'concat_19k_v2_word2_new',\n", - " 'concat_19k_v2_old_cosSim', 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_word1_old', 'concat_probase_19k_v2_word2_old',\n", - " 'concat_probase_19k_v2_word1_new', 'concat_probase_19k_v2_word2_new',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim'],\n", - " dtype='object', length=104)" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "rough-february", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_7props_19k_2_new_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'text_2props_19k_2_new_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'complex_19k_2_new_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'transe_19k_1_new_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_19k_2_new_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_2_new_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'complex_probase_2_new_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'transe_probase_1_new_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'complex_probase_19k_2_new_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_1_new_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_19k_v1_2_new_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_2_new_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim']" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "hired-center", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "\n", - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "extraordinary-value", - "metadata": {}, - "outputs": [], - "source": [ - "emb_pairs = [('text_7props_19k', 'text_7props_19k_2'),\n", - " ('text_2props_19k', 'text_2props_19k_2'),\n", - " ('complex_19k', 'complex_19k_2'),\n", - " ('transe_19k', 'transe_19k_1'),\n", - " ('abstract_19k', 'abstract_19k_2'),\n", - " ('abstract_firstSent_19k', 'abstract_firstSent_19k_2'),\n", - " ('complex_probase', 'complex_probase_2'),\n", - " ('transe_probase', 'transe_probase_1'),\n", - " ('complex_probase_19k', 'complex_probase_19k_2'),\n", - " ('transe_probase_19k', 'transe_probase_19k_1'),\n", - " ('concat_19k_v1', 'concat_19k_v1_2'),\n", - " ('concat_probase_19k_v1', 'concat_probase_19k_v1_2'),\n", - " ('concat_19k_v2', 'concat_19k_v2_2'),\n", - " ('concat_probase_19k_v2', 'concat_probase_19k_v2_2')]\n", - "colMappers = {p[0]+'_old_cosSim': p[1]+'_new_cosSim' for p in emb_pairs}" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "political-battle", - "metadata": {}, - "outputs": [], - "source": [ - "oldColList = list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "flexible-booking", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 123, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "radio-outline", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "recent-portal", - "metadata": {}, - "outputs": [], - "source": [ - "# oldColList, [colMappers[col] for col in oldColList]\n", - "t1234 = []\n", - "t4567 = []\n", - "for col in oldColList:\n", - " t1234.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(labelSamples), wordSim353AnnotDF_New_Merged_DF[col].apply(labelSamples)))\n", - " t4567.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(labelSamples), wordSim353AnnotDF_New_Merged_DF[colMappers[col]].apply(labelSamples)))\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "id": "opening-inside", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = list(zip(indNames,t1234, t4567))" - ] - }, - { - "cell_type": "code", - "execution_count": 187, - "id": "settled-overhead", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = pd.DataFrame(t1234, columns=['Type', 'Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category'])" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "id": "young-heath", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TypeAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated category
10Complex-Transe-AbsFirstSent - 19k0.6802330.686047
11Complex-Transe-AbsFirstSent - Probase-19k0.6802330.680233
8Complex - Probase-19k0.5988370.662791
2Complex - 19k0.5988370.659884
6Complex - Probase0.5988370.656977
3Transe - 19k0.5988370.654070
5Abstract First Sentence - 19k0.6511630.654070
7Transe - Probase0.5988370.645349
9Transe - Probase-19k0.5988370.642442
4Abstract - 19k0.6279070.627907
136 embeddings - Probase-19k0.6250000.627907
126 embeddings - 19k0.6250000.625000
0Text 7 props - 19k0.5726740.569767
1Text 2 props - 19k0.5668600.555233
\n", - "
" - ], - "text/plain": [ - " Type \\\n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "8 Complex - Probase-19k \n", - "2 Complex - 19k \n", - "6 Complex - Probase \n", - "3 Transe - 19k \n", - "5 Abstract First Sentence - 19k \n", - "7 Transe - Probase \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "10 0.680233 \n", - "11 0.680233 \n", - "8 0.598837 \n", - "2 0.598837 \n", - "6 0.598837 \n", - "3 0.598837 \n", - "5 0.651163 \n", - "7 0.598837 \n", - "9 0.598837 \n", - "4 0.627907 \n", - "13 0.625000 \n", - "12 0.625000 \n", - "0 0.572674 \n", - "1 0.566860 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \n", - "10 0.686047 \n", - "11 0.680233 \n", - "8 0.662791 \n", - "2 0.659884 \n", - "6 0.656977 \n", - "3 0.654070 \n", - "5 0.654070 \n", - "7 0.645349 \n", - "9 0.642442 \n", - "4 0.627907 \n", - "13 0.627907 \n", - "12 0.625000 \n", - "0 0.569767 \n", - "1 0.555233 " - ] - }, - "execution_count": 188, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t1234.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "id": "beneficial-continuity", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " tempVals.append(acc/N_SPLITS)\n", - "\n", - " for col in colList:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " tempVals.append(acc/N_SPLITS)\n", - " return tempVals\n", - "\n", - "def compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, newColList, indNames):\n", - " tempVals1 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, oldColList)\n", - " tempVals2 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, newColList)\n", - " summ = (pd.DataFrame(list(zip(tempVals1, tempVals2)), index = ['Combined'] + indNames, columns = ['Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category']) * 100)\n", - " summ['Increase'] = summ['Accuracy (in %) of new embeddings compared to annotated category'] - summ['Accuracy (in %) of old embeddings compared to annotated category']\n", - " return summ.sort_values(by=['Increase'], ascending=False)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "intensive-platform", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "id": "significant-season", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracyRF(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = RandomForestClassifier(max_depth=max(2 * len(colList) // 3,3), random_state=100)\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "id": "fitting-jurisdiction", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Text 2 props - 19k66.00000067.1596641.159664
Complex - 19k66.86554667.1596640.294118
Combined68.89916069.1680670.268908
Transe - 19k66.86554666.571429-0.294118
Abstract - 19k66.54621865.983193-0.563025
Text 7 props - 19k67.74789967.159664-0.588235
Abstract First Sentence - 19k73.21848771.504202-1.714286
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Text 2 props - 19k 66.000000 \n", - "Complex - 19k 66.865546 \n", - "Combined 68.899160 \n", - "Transe - 19k 66.865546 \n", - "Abstract - 19k 66.546218 \n", - "Text 7 props - 19k 67.747899 \n", - "Abstract First Sentence - 19k 73.218487 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Text 2 props - 19k 67.159664 \n", - "Complex - 19k 67.159664 \n", - "Combined 69.168067 \n", - "Transe - 19k 66.571429 \n", - "Abstract - 19k 65.983193 \n", - "Text 7 props - 19k 67.159664 \n", - "Abstract First Sentence - 19k 71.504202 \n", - "\n", - " Increase \n", - "Text 2 props - 19k 1.159664 \n", - "Complex - 19k 0.294118 \n", - "Combined 0.268908 \n", - "Transe - 19k -0.294118 \n", - "Abstract - 19k -0.563025 \n", - "Text 7 props - 19k -0.588235 \n", - "Abstract First Sentence - 19k -1.714286 " - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - "'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', \n", - " 'Transe - 19k', 'Abstract - 19k', 'Abstract First Sentence - 19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "loose-cuisine", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Complex + Transe + Abstract FirstSent 19k66.17647166.4621850.285714
Combined68.75630369.0336130.277311
Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent69.63025269.327731-0.302521
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.176471 \n", - "Combined 68.756303 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.630252 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.462185 \n", - "Combined 69.033613 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.327731 \n", - "\n", - " Increase \n", - "Complex + Transe + Abstract FirstSent 19k 0.285714 \n", - "Combined 0.277311 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... -0.302521 " - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['concat_19k_v1_old_cosSim',\n", - "'concat_19k_v2_old_cosSim']\n", - "indNames = ['Complex + Transe + Abstract FirstSent 19k', 'Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "second-lightning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 271, - "id": "institutional-gamma", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "KeyboardInterrupt\n", - "\n" - ] - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "seven-edinburgh", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "individual-store", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "processed-reynolds", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "oldColPairs = list(zip(oldColList, indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "forced-dining", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Text 7 props - 19k\n", - "Text 2 props - 19k\n", - "Complex - 19k\n", - "Transe - 19k\n", - "Abstract - 19k\n", - "Abstract First Sentence - 19k\n", - "Complex - Probase\n", - "Transe - Probase\n", - "Complex - Probase-19k\n", - "Transe - Probase-19k\n", - "Complex-Transe-AbsFirstSent - 19k\n", - "Complex-Transe-AbsFirstSent - Probase-19k\n", - "6 embeddings - 19k\n", - "6 embeddings - Probase-19k\n" - ] - } - ], - "source": [ - "print(\"\\n\".join(indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "permanent-comfort", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2002" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comb(len(oldColPairs), 9)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "quantitative-japanese", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "16384" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "2**(len(oldColPairs))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "flexible-preparation", - "metadata": {}, - "outputs": [], - "source": [ - "# accs = []\n", - "# for r in tqdm(range(1,len(oldColPairs)+1)):\n", - "# for comb in tqdm(combinations(oldColPairs, r)):\n", - "# print(len(comb))\n", - "# # oldAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [col[0] for col in comb])\n", - "# # newAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [colMappers[col[0]] for col in comb])\n", - "# print(\" & \".join([col[1] for col in comb]).count(\"&\"))\n", - "# # accs.append((indName, oldAcc, newAcc))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 316, - "id": "fatal-publicity", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "77739ea8b6bf4cfb933f406e6e9699a5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.42857165.126050-0.3025211
1Text 2 props - 19k64.55462263.680672-0.8739501
2Complex - 19k64.57983265.4453780.8655461
3Transe - 19k64.57983266.8907562.3109241
4Abstract - 19k67.73949668.0504200.3109241
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.428571 \n", - "1 64.554622 \n", - "2 64.579832 \n", - "3 64.579832 \n", - "4 67.739496 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 65.126050 -0.302521 \n", - "1 63.680672 -0.873950 \n", - "2 65.445378 0.865546 \n", - "3 66.890756 2.310924 \n", - "4 68.050420 0.310924 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 325, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 326, - "id": "congressional-genre", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 327, - "id": "single-duration", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 328, - "id": "sharp-tunisia", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
30Text 2 props - 19k & Abstract First Sentence - 19k71.84033670.966387-0.8739502
204Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k71.84033670.378151-1.4621853
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
60Abstract - 19k & Abstract First Sentence - 19k71.54621871.243697-0.3025212
12350Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.504202-1.4705888
12329Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.075630-0.8991608
12154Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.084034-0.8907568
11944Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.781513-1.1932778
12349Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.210084-1.7647068
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "30 Text 2 props - 19k & Abstract First Sentence - 19k \n", - "204 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "12350 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12329 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12154 Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "11944 Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12349 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "30 71.840336 \n", - "204 71.840336 \n", - "18 71.840336 \n", - "60 71.546218 \n", - "12350 70.974790 \n", - "12329 70.974790 \n", - "12154 70.974790 \n", - "11944 70.974790 \n", - "12349 70.974790 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "30 70.966387 \n", - "204 70.378151 \n", - "18 71.848739 \n", - "60 71.243697 \n", - "12350 69.504202 \n", - "12329 70.075630 \n", - "12154 70.084034 \n", - "11944 69.781513 \n", - "12349 69.210084 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "30 -0.873950 2 \n", - "204 -1.462185 3 \n", - "18 0.008403 2 \n", - "60 -0.302521 2 \n", - "12350 -1.470588 8 \n", - "12329 -0.899160 8 \n", - "12154 -0.890756 8 \n", - "11944 -1.193277 8 \n", - "12349 -1.764706 8 " - ] - }, - "execution_count": 328, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 329, - "id": "federal-timing", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
5318Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.39495871.5462181.1512616
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
108Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k69.21008471.2521012.0420173
694Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k70.08403471.2521011.1680674
8035Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.09243771.2521011.1596647
7049Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.38655571.2521010.8655467
1916Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k69.79831971.2521011.4537825
11327Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.10084071.2521011.1512618
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "5318 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "108 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k \n", - "694 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "8035 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7049 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "1916 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "11327 Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "18 71.840336 \n", - "5318 70.394958 \n", - "5 72.705882 \n", - "51 68.630252 \n", - "108 69.210084 \n", - "694 70.084034 \n", - "8035 70.092437 \n", - "7049 70.386555 \n", - "1916 69.798319 \n", - "11327 70.100840 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "18 71.848739 \n", - "5318 71.546218 \n", - "5 71.537815 \n", - "51 71.521008 \n", - "108 71.252101 \n", - "694 71.252101 \n", - "8035 71.252101 \n", - "7049 71.252101 \n", - "1916 71.252101 \n", - "11327 71.252101 \n", - "\n", - " Increase count \n", - "18 0.008403 2 \n", - "5318 1.151261 6 \n", - "5 -1.168067 1 \n", - "51 2.890756 2 \n", - "108 2.042017 3 \n", - "694 1.168067 4 \n", - "8035 1.159664 7 \n", - "7049 0.865546 7 \n", - "1916 1.453782 5 \n", - "11327 1.151261 8 " - ] - }, - "execution_count": 329, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 330, - "id": "known-basement", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
1041Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k66.28571469.1932772.9075634
2828Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k65.71428668.6134452.8991605
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
9440Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k66.56302569.1848742.6218497
2701Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k65.71428668.3277312.6134455
1035Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k66.28571468.8991602.6134454
1030Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k66.28571468.8991602.6134454
2689Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k65.71428668.3193282.6050425
2834Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k65.71428668.3193282.6050425
1026Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k68.64705971.2268912.5798324
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "1041 Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "2828 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "9440 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "2701 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "1035 Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k \n", - "1030 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k \n", - "2689 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k \n", - "2834 Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k \n", - "1026 Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "1041 66.285714 \n", - "2828 65.714286 \n", - "51 68.630252 \n", - "9440 66.563025 \n", - "2701 65.714286 \n", - "1035 66.285714 \n", - "1030 66.285714 \n", - "2689 65.714286 \n", - "2834 65.714286 \n", - "1026 68.647059 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "1041 69.193277 \n", - "2828 68.613445 \n", - "51 71.521008 \n", - "9440 69.184874 \n", - "2701 68.327731 \n", - "1035 68.899160 \n", - "1030 68.899160 \n", - "2689 68.319328 \n", - "2834 68.319328 \n", - "1026 71.226891 \n", - "\n", - " Increase count \n", - "1041 2.907563 4 \n", - "2828 2.899160 5 \n", - "51 2.890756 2 \n", - "9440 2.621849 7 \n", - "2701 2.613445 5 \n", - "1035 2.613445 4 \n", - "1030 2.613445 4 \n", - "2689 2.605042 5 \n", - "2834 2.605042 5 \n", - "1026 2.579832 4 " - ] - }, - "execution_count": 330, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "id": "private-conditions", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
126 embeddings - 19k70.09243771.2521011.1596641
136 embeddings - Probase-19k70.09243770.6722690.5798321
4Abstract - 19k67.73949668.0504200.3109241
11Complex-Transe-AbsFirstSent - Probase-19k67.47058867.176471-0.2941181
10Complex-Transe-AbsFirstSent - 19k67.47058866.899160-0.5714291
3Transe - 19k64.57983266.8907562.3109241
9Transe - Probase-19k64.57983266.8907562.3109241
7Transe - Probase64.57983266.5966392.0168071
8Complex - Probase-19k64.57983265.4453780.8655461
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "12 6 embeddings - 19k \n", - "13 6 embeddings - Probase-19k \n", - "4 Abstract - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "7 Transe - Probase \n", - "8 Complex - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "12 70.092437 \n", - "13 70.092437 \n", - "4 67.739496 \n", - "11 67.470588 \n", - "10 67.470588 \n", - "3 64.579832 \n", - "9 64.579832 \n", - "7 64.579832 \n", - "8 64.579832 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "12 71.252101 \n", - "13 70.672269 \n", - "4 68.050420 \n", - "11 67.176471 \n", - "10 66.899160 \n", - "3 66.890756 \n", - "9 66.890756 \n", - "7 66.596639 \n", - "8 65.445378 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "12 1.159664 1 \n", - "13 0.579832 1 \n", - "4 0.310924 1 \n", - "11 -0.294118 1 \n", - "10 -0.571429 1 \n", - "3 2.310924 1 \n", - "9 2.310924 1 \n", - "7 2.016807 1 \n", - "8 0.865546 1 " - ] - }, - "execution_count": 331, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs[allCombs['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "markdown", - "id": "heard-think", - "metadata": {}, - "source": [ - "## RF" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "id": "trying-liabilities", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "123c20d4e60b4e3e8b09c0e0e46efc1e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.12605063.672269-1.4537821
1Text 2 props - 19k61.89916063.3445381.4453781
2Complex - 19k66.61344564.277311-2.3361341
3Transe - 19k66.61344566.310924-0.3025211
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.126050 \n", - "1 61.899160 \n", - "2 66.613445 \n", - "3 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 63.672269 -1.453782 \n", - "1 63.344538 1.445378 \n", - "2 64.277311 -2.336134 \n", - "3 66.310924 -0.302521 \n", - "4 66.008403 -2.890756 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "id": "increased-indonesian", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs1)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "id": "english-brother", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "id": "fantastic-narrow", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
60Abstract - 19k & Abstract First Sentence - 19k72.11764768.327731-3.7899162
138Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k72.10084070.361345-1.7394963
151Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.83193370.378151-1.4537823
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
2114Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k71.81512669.789916-2.0252105
2001Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k71.81512669.798319-2.0168075
2000Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k71.81512670.378151-1.4369755
1999Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k71.81512669.495798-2.3193285
1998Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k71.81512669.487395-2.3277315
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "138 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "151 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "2114 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "2001 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "2000 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "1999 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k \n", - "1998 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 73.285714 \n", - "60 72.117647 \n", - "138 72.100840 \n", - "151 71.831933 \n", - "152 71.831933 \n", - "2114 71.815126 \n", - "2001 71.815126 \n", - "2000 71.815126 \n", - "1999 71.815126 \n", - "1998 71.815126 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 70.075630 \n", - "60 68.327731 \n", - "138 70.361345 \n", - "151 70.378151 \n", - "152 71.252101 \n", - "2114 69.789916 \n", - "2001 69.798319 \n", - "2000 70.378151 \n", - "1999 69.495798 \n", - "1998 69.487395 \n", - "\n", - " Increase count \n", - "5 -3.210084 1 \n", - "60 -3.789916 2 \n", - "138 -1.739496 3 \n", - "151 -1.453782 3 \n", - "152 -0.579832 3 \n", - "2114 -2.025210 5 \n", - "2001 -2.016807 5 \n", - "2000 -1.436975 5 \n", - "1999 -2.319328 5 \n", - "1998 -2.327731 5 " - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 259, - "id": "brown-punishment", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
681Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k70.66386671.2605040.5966394
218Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.22689171.2521010.0252103
1575Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.23529471.2521010.0168075
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
3884Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k68.31092471.2352942.9243706
129Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k69.76470671.2352941.4705883
217Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.22689170.974790-0.2521013
604Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.52941270.966387-0.5630254
7207Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k68.60504270.9663872.3613457
690Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k70.66386670.9663870.3025214
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "681 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k \n", - "218 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "1575 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "3884 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "129 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k \n", - "217 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "604 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "7207 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "690 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "681 70.663866 \n", - "218 71.226891 \n", - "1575 71.235294 \n", - "152 71.831933 \n", - "3884 68.310924 \n", - "129 69.764706 \n", - "217 71.226891 \n", - "604 71.529412 \n", - "7207 68.605042 \n", - "690 70.663866 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "681 71.260504 \n", - "218 71.252101 \n", - "1575 71.252101 \n", - "152 71.252101 \n", - "3884 71.235294 \n", - "129 71.235294 \n", - "217 70.974790 \n", - "604 70.966387 \n", - "7207 70.966387 \n", - "690 70.966387 \n", - "\n", - " Increase count \n", - "681 0.596639 4 \n", - "218 0.025210 3 \n", - "1575 0.016807 5 \n", - "152 -0.579832 3 \n", - "3884 2.924370 6 \n", - "129 1.470588 3 \n", - "217 -0.252101 3 \n", - "604 -0.563025 4 \n", - "7207 2.361345 7 \n", - "690 0.302521 4 " - ] - }, - "execution_count": 259, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 260, - "id": "considerable-syndication", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
13048Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210170.3529416.1008409
13084Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210169.2100844.9579839
14022Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.52941269.1764714.6470599
13861Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.24369768.8907564.6470599
7551Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k63.09243767.7226894.6302527
13058Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210168.6050424.3529419
6500Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k63.68907668.0336134.3445387
7537Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k63.09243767.4369754.3445387
7570Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k63.09243767.4285714.3361347
6499Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k63.68907668.0252104.3361347
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "13048 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "13084 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "14022 Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "13861 Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7551 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "13058 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "6500 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7537 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7570 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k \n", - "6499 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "13048 64.252101 \n", - "13084 64.252101 \n", - "14022 64.529412 \n", - "13861 64.243697 \n", - "7551 63.092437 \n", - "13058 64.252101 \n", - "6500 63.689076 \n", - "7537 63.092437 \n", - "7570 63.092437 \n", - "6499 63.689076 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "13048 70.352941 \n", - "13084 69.210084 \n", - "14022 69.176471 \n", - "13861 68.890756 \n", - "7551 67.722689 \n", - "13058 68.605042 \n", - "6500 68.033613 \n", - "7537 67.436975 \n", - "7570 67.428571 \n", - "6499 68.025210 \n", - "\n", - " Increase count \n", - "13048 6.100840 9 \n", - "13084 4.957983 9 \n", - "14022 4.647059 9 \n", - "13861 4.647059 9 \n", - "7551 4.630252 7 \n", - "13058 4.352941 9 \n", - "6500 4.344538 7 \n", - "7537 4.344538 7 \n", - "7570 4.336134 7 \n", - "6499 4.336134 7 " - ] - }, - "execution_count": 260, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 261, - "id": "binary-committee", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
11Complex-Transe-AbsFirstSent - Probase-19k70.04201770.6302520.5882351
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
10Complex-Transe-AbsFirstSent - 19k70.04201768.302521-1.7394961
136 embeddings - Probase-19k68.90756368.042017-0.8655461
126 embeddings - 19k68.90756366.857143-2.0504201
6Complex - Probase66.61344566.596639-0.0168071
7Transe - Probase66.61344566.596639-0.0168071
3Transe - 19k66.61344566.310924-0.3025211
9Transe - Probase-19k66.61344566.008403-0.6050421
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "6 Complex - Probase \n", - "7 Transe - Probase \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "11 70.042017 \n", - "5 73.285714 \n", - "10 70.042017 \n", - "13 68.907563 \n", - "12 68.907563 \n", - "6 66.613445 \n", - "7 66.613445 \n", - "3 66.613445 \n", - "9 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "11 70.630252 \n", - "5 70.075630 \n", - "10 68.302521 \n", - "13 68.042017 \n", - "12 66.857143 \n", - "6 66.596639 \n", - "7 66.596639 \n", - "3 66.310924 \n", - "9 66.008403 \n", - "4 66.008403 \n", - "\n", - " Increase count \n", - "11 0.588235 1 \n", - "5 -3.210084 1 \n", - "10 -1.739496 1 \n", - "13 -0.865546 1 \n", - "12 -2.050420 1 \n", - "6 -0.016807 1 \n", - "7 -0.016807 1 \n", - "3 -0.302521 1 \n", - "9 -0.605042 1 \n", - "4 -2.890756 1 " - ] - }, - "execution_count": 261, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1[allCombs1['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "approximate-event", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "successful-spider", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "moral-thought", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "western-easter", - "metadata": {}, - "source": [ - "# Generate Embeddings Files" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "nervous-physiology", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = pd.concat([wordSim353AnnotDF_New2[['word1_kg_id', 'Word 1']], wordSim353AnnotDF_New2[['word2_kg_id', 'Word 2']].rename(columns={'Word 2': 'Word 1', 'word2_kg_id': 'word1_kg_id'})])" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "neither-hammer", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = wordList[~wordList.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "welsh-indiana", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in embedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "processed-wonder", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in newEmbedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings_new_attempt1.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "psychological-template", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['Word 1'].to_csv('../data/wordsim353_embeddings_words.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prime-munich", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assigned-appliance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "severe-textbook", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prompt-orlando", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "otherwise-qatar", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "inclusive-brick", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "micro-kernel", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "optical-atlas", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assured-means", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-fever", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opened-baker", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "supposed-charm", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "384px" - }, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/.ipynb_checkpoints/Scratchpad Nbook-checkpoint.ipynb b/.ipynb_checkpoints/Scratchpad Nbook-checkpoint.ipynb deleted file mode 100644 index 363fcab..0000000 --- a/.ipynb_checkpoints/Scratchpad Nbook-checkpoint.ipynb +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cells": [], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/.ipynb_checkpoints/TextEmbed UnitTest-checkpoint.ipynb b/.ipynb_checkpoints/TextEmbed UnitTest-checkpoint.ipynb deleted file mode 100644 index 363fcab..0000000 --- a/.ipynb_checkpoints/TextEmbed UnitTest-checkpoint.ipynb +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cells": [], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/.ipynb_checkpoints/Untitled-checkpoint.ipynb deleted file mode 100644 index 363fcab..0000000 --- a/.ipynb_checkpoints/Untitled-checkpoint.ipynb +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cells": [], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/.ipynb_checkpoints/Wikidata CS Exploration-checkpoint.ipynb b/.ipynb_checkpoints/Wikidata CS Exploration-checkpoint.ipynb deleted file mode 100644 index e05d231..0000000 --- a/.ipynb_checkpoints/Wikidata CS Exploration-checkpoint.ipynb +++ /dev/null @@ -1,10354 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 339, - "id": "familiar-forest", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import os\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from matplotlib import pyplot" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "indonesian-mambo", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF = pd.read_csv('../data/wikidata-cs-20200504.tsv',sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "distributed-spice", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1relationnode2node1;labelnode2;labelrelation;labelrelation;dimensionsourcesentence
0P1449/r/IsAP2561nicknamenamesubproperty ofNaNWDNaN
1P1449/r/RelatedToQ49614nicknamenicknamesubject item of this propertyNaNWDNaN
2P1547/r/RelatedToQ56859575depends on softwaresoftware dependencysubject item of this propertyNaNWDNaN
3P1592/r/RelatedToP1593prosecutordefendersee alsoNaNWDNaN
4P1593/r/RelatedToP1592defenderprosecutorsee alsoNaNWDNaN
\n", - "
" - ], - "text/plain": [ - " node1 relation node2 node1;label node2;label \\\n", - "0 P1449 /r/IsA P2561 nickname name \n", - "1 P1449 /r/RelatedTo Q49614 nickname nickname \n", - "2 P1547 /r/RelatedTo Q56859575 depends on software software dependency \n", - "3 P1592 /r/RelatedTo P1593 prosecutor defender \n", - "4 P1593 /r/RelatedTo P1592 defender prosecutor \n", - "\n", - " relation;label relation;dimension source sentence \n", - "0 subproperty of NaN WD NaN \n", - "1 subject item of this property NaN WD NaN \n", - "2 subject item of this property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 see also NaN WD NaN " - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "civilian-induction", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimSet = list(set(wikiDF.node1.to_list() + wikiDF.node2.to_list()))" - ] - }, - { - "cell_type": "markdown", - "id": "peripheral-alignment", - "metadata": {}, - "source": [ - "# Fetch Embeddings" - ] - }, - { - "cell_type": "markdown", - "id": "alpine-magnet", - "metadata": {}, - "source": [ - "## Complex + Transe" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "advisory-tablet", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64865436\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74433572\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047190\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47708201\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16939336\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75815335\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638383\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74201282\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29352977\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047182\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61948580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57636639\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636435\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10384086\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18384500\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59618753\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49553430\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56003279\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7257714\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36708708\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71834669\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21993815\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84288054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5102\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78849858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047225\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71569224\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56267862\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61160732\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23699967\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3730867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4819858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45813532\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84687204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38456828\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036634\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48667794\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2842797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59158264\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705316\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P8047\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36249200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84266649\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92011189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91463293\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58306048\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46256183\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58991462\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81772066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068088\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21263930\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66571828\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23940203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21119540\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47452597\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34153889\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85509189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611037\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68154669\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35848856\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51917600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965794\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37761983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047185\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12860009\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36258590\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746648\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77667037\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61314006\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681853\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852604\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60669731\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625811\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734414\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49689498\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35588820\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61466331\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1208509\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56478376\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44687559\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3514338\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89680726\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19990790\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29543009\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70704507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032617\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20026782\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50332811\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60621802\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10520944\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84757986\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29578707\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5589518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12600952\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46785334\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17158079\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34768712\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42517203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3783318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50350470\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58902427\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22269594\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18603649\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50902564\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61798329\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5460182\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53556002\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5328\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59383129\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61090213\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10340288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17997011\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3411290\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54854669\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24632433\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q805333\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87977249\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61067884\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5502339\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2404985\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59475075\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2140654\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80432189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59211677\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77667126\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q140702\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915160\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46256234\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56977400\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59282004\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34200888\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7442\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73863282\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21162274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59044212\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872469\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6720214\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66368425\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047187\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58997978\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11194929\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60941978\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56021177\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64905317\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79679221\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2695\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37286659\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047211\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58979956\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11497457\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59618757\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965916\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52399926\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58603740\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77340449\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51881207\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17164790\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773855\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58998468\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2995983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667095\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59089601\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56680038\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56030389\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030324\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20975596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851517\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84271640\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69585136\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71470174\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17231698\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59089144\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68065658\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69585141\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5901\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36536067\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38069463\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038346\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60431603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1413969\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58647874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5280\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91515771\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53496919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59079146\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851567\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3746141\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56681204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78097957\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71283344\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915167\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73865001\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62404518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25504044\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6570\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58143241\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88178923\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29306015\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59078556\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84298834\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87938350\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2319440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1538854\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59475077\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45799055\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45266300\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59070578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72283908\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89184820\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3930265\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60723856\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25380544\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29545850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57604775\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705289\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915169\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62585847\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56114341\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59033819\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090823\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24899199\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60547335\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29037088\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85715771\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44294891\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693095\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12796995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46830821\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28008313\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89769133\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681531\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1720112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667270\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43473459\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694213\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41835716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38506410\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58612101\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36734639\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78090690\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681942\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68199869\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63792261\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5004618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746666\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7936630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6938\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58240553\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56658227\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73848146\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21002290\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73756526\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61105129\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38313140\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36430165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54961374\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25039503\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37905234\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7233740\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66502807\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58876537\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59092008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24965030\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56701187\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73864535\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19828273\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3535978\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18683008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49614548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5563081\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16325409\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18203247\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636729\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64118912\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87929782\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56775315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89378209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681502\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57933188\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6503676\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34524288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038547\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681899\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60742379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708672\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7391\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92011183\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59005641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18557741\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10509119\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047210\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40531095\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89422969\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16631246\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63185173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37671364\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64810046\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73310208\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91702724\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734597\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694120\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84246603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047179\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78048467\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2366980\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2184\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59450702\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734473\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11002263\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42790808\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57072416\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5477678\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16937917\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72342517\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49585733\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58179448\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5028\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78090598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69361740\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047197\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51880054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59078410\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25507913\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61846484\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66572332\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41222313\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58487888\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30893837\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73572813\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15935592\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21597741\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47326539\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84275487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3933466\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10270022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58685254\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89680721\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29644036\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12104597\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57636900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12050975\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50168827\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59005418\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10885494\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50429082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36015502\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59406506\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55923238\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18286698\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P968\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73366170\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56270098\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90132359\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66591238\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74435781\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681565\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63395686\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63886763\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2515879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68582414\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57470203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12301679\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30156437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57398400\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24962761\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681838\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54070999\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4818169\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11902783\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75838596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47772347\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67141864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10380381\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P958\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89350258\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7283951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29819756\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852601\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37862578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30047267\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6571\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625581\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47226657\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10934814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58966165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74474288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6422240\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47576960\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746662\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965282\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52171487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6710\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58813489\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68731010\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60363191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58043865\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87885144\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692762\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87169767\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71898438\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89769097\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90865542\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1327189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72492945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77893681\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73041322\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627072\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980469\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55312002\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35922832\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53911696\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11739050\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18119757\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88009688\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q14405929\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10546472\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q93003322\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77556661\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45763191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765317\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35760525\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87937643\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89223871\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74217532\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84275300\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50454993\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18553215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29513828\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56334790\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57657179\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42157065\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45945663\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6619637\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58966208\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17144564\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78029495\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11379779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61699843\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68848439\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5991\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56019945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71916144\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6534\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59076817\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3710530\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46384387\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61249011\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693069\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71802787\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667303\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773436\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78967694\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30921616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41909633\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17123440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59628350\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2506578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64763437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61811214\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12486429\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24577909\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15706459\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56658228\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56337509\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84242091\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q628338\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59037848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36945766\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30918204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70556965\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765365\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41376951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47122316\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68279721\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53919919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57705019\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51692243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5027\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55951022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25043878\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64641618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62336542\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18434478\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55465477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60357246\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3177897\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30900883\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41571311\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59526222\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5706\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2361\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90916278\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59031409\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37893165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17992424\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84274329\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25098695\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56400906\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16029504\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56699099\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84277239\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82334064\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852606\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57287735\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6427\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59618755\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q9392141\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57407542\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6731581\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38907749\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67055629\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2535710\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40287877\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58926227\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37415888\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60357352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69368835\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59973208\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29585699\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84246614\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59915587\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60962156\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78553203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q874632\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66525126\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61986723\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1552\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57535936\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5307082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87070600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54290607\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7725\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5202\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66587186\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6977\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75635724\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681949\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13359600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q26700386\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33474600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46921451\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62399025\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980687\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59417017\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56644793\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5832\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12308638\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6605486\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681424\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59033224\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65096040\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58257544\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54469554\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62555519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36163707\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15312278\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58928779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66562936\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72283596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006052\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40423311\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36597458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30082251\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55931874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53009238\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091694\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693211\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90476672\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980351\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56641102\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74435148\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627074\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681813\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27500609\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56680379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84861637\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59043198\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56972008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59289286\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036691\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852612\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44705203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56593453\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55729353\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78086915\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77088052\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75755497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51969935\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41359681\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6424\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21198084\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090868\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38964612\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56158192\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38887569\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2535605\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29963683\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64864078\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30914189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48277039\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90992880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7213\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1546\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55829848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58979822\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74477506\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60550474\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84274233\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89769137\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56672312\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57612933\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5281737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21014021\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64374415\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705292\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73375715\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74447306\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35219907\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708709\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74113345\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2579\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90117379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48930682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20980701\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5348\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q332209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734421\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12593257\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33545318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84479168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006766\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039381\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43787914\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61311233\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734481\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56639043\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667775\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667312\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25633436\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61534824\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36526633\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58772354\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69585145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693077\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42293501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734613\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7532\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37782758\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56030423\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68406538\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56866696\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58079010\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59002045\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70996933\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1504425\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39433287\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57206946\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62101992\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45813280\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047183\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59070275\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55632487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965337\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56604579\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28599815\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5895\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56297152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55280602\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734430\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59261899\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030201\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59077205\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49617371\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66556076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35033263\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52294396\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7239021\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63323005\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56557308\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56671877\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72037756\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56013865\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56990609\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60048131\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47615292\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88513819\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54943967\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5920\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56386521\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19314934\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60163121\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746782\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56170072\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q86413049\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48228719\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7462\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15223670\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65975031\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79317750\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59070515\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54505723\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40699216\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71473385\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25313145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q76004907\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58149242\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852624\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57534586\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66502818\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83380814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16068686\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27043390\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34575084\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5899\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53204287\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61249025\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q86463324\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57437234\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56429662\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59066517\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87913720\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6533\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41845366\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37056861\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5295538\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41226557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23923844\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58626642\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36967806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60066070\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746809\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2729443\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49137994\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60537443\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38554054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2896\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73298134\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032333\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13415408\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64995852\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87998261\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773852\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50826986\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5778223\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66124879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2588838\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74480219\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10605247\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56836285\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69172740\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72376329\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2018565\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5685\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83133269\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58993316\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57454176\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55091104\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42365814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73420497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27334467\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59702429\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28026076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34624535\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73420767\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24241569\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37736364\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51876193\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54400168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636905\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84274956\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58244802\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11302682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59043121\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19915274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50869987\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41673723\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18014941\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16023742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708534\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36536082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12041905\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68287507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88524690\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18059293\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13164480\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73010357\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60723552\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58926708\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667515\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59406504\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28132458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667322\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89680732\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3625632\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39210110\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047186\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55968809\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64006842\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39974398\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705297\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006471\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60481617\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83365205\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773865\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84276764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091067\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12016773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75224630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5994\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75798762\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34307362\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33947320\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87282988\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89184453\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56639568\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82452792\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5828\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63041650\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73797856\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68861473\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29789760\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75800566\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12593409\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27437064\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84275833\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58988215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91901288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59005988\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21082583\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33339426\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741273\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38023488\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60059934\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84273997\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61877212\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59043484\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29035123\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852617\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57579202\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66425262\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84481119\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56430961\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708707\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1679325\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72839445\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681738\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38268291\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80809031\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63616194\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10593480\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62001428\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2717928\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37983307\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89866637\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638153\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5030\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1916384\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46031408\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55579288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746754\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24289083\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66615778\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56626243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20741385\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47880328\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q681501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25036082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59092300\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56656109\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56657450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70569900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7888\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q86748173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49490137\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56522048\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1752\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84365227\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43906807\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61797590\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3440287\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66018184\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18393083\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58991654\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70529933\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6241\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66573890\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75066484\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73128185\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53380051\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59135880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90316618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73544861\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1114\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92314923\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74522432\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56626440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66591864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71471711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19480970\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89680730\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87997922\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92349858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19921713\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49978699\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84287042\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30070550\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52129798\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21517123\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62917831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6840\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29618407\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17014863\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29306775\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681830\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5869\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4457167\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5816\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58325003\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20731983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80506147\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1876\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11246094\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56313795\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13219330\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62050258\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84357886\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694223\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625606\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11885950\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84479926\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58133296\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57497365\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58626655\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965958\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70082418\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58033479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29032132\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1366\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681537\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24798621\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006157\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59520568\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34084891\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73453497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34023178\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16886387\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91795629\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59047434\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58998054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1362246\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28914401\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734522\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85803433\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30321648\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45943611\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61483973\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6540\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7973762\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59001841\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49689000\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54562540\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7407\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915196\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56659497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5096\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2572045\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16885408\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19842222\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73358971\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55786071\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92026114\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22907149\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56655847\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66563571\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38070288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047216\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757088\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708668\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66711013\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78739799\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37176024\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59458414\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78034362\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84287790\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52642505\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625984\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667560\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50147705\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58628265\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71404012\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611103\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59077830\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55933001\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032676\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694103\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59345268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757030\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22329445\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73862249\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66503444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852614\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57539737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59383678\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44464056\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75630156\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58964107\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852626\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16287483\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58985929\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3712\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667841\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2353\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22675364\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33945850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2212\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79448203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57072435\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80467138\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611025\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58918513\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090470\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693101\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047196\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980098\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57395864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60431620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693167\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047207\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91848848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58964833\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708854\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038117\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667503\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55880952\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58173479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70710519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82434561\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66591130\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1269\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58169884\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66501877\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6510\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42759688\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16327012\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16710805\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23037753\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852627\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72076483\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5896\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q9311444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3643\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1365\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039442\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73301796\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81368221\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7649212\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88013874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57535318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58982742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33887149\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45820870\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047205\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q426745\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65602465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851595\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56658776\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58135900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78085108\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11285593\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q498187\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88355601\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61311241\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59078491\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22809145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7160\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7162\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22330256\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7253\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66558559\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66821598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82969330\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87988388\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73848127\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74412363\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1581\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64357639\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55025113\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60517680\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56040042\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88192695\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17142722\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40866874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34197343\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734348\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29802965\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66560167\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852607\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60103941\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56675254\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59155479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82154252\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56851764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1697092\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681495\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852631\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84276996\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q93239268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58169679\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692770\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55789150\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52438272\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55931410\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2561\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068077\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915193\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7318444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45810671\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33979925\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57760761\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18980173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637871\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47553356\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92416090\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58925773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74210507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47115461\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57535356\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58796782\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q8034325\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851601\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87940165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5004\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2194191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60059926\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73848149\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88447596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58898396\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74438741\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5341286\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35219848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765322\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090938\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88477341\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q14851902\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047192\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33980030\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708657\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636727\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59034803\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741107\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80458698\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18554460\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23891869\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56396141\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60017057\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30160032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637911\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62097168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q76000613\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741105\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18555209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965613\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681456\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18918145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6237\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757063\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036094\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58195013\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q248376\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49576178\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66590580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15966439\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006753\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21126507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53246532\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61901861\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4500\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039661\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56037513\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2130900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64853641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68241600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23214504\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56658166\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1547\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12884555\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3301\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90278705\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59078013\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85111803\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49688339\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3729\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28050380\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30323970\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11607438\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62555595\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55931868\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60303776\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60172104\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71331747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61459352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047174\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68087009\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24338379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61248632\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5898\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39570919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84078018\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13373900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6568\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74387518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694107\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2198\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67696175\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77655668\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74205111\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42518897\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3343005\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64870206\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36536076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60565106\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59031039\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87977781\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3037\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667537\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60680507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87289789\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q26454986\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039938\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6875\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40840080\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q76000631\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5905651\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7081\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84481066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88420616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12094812\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73118411\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692947\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56376142\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2566026\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090766\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55884446\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42641723\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667360\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4495716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q93290588\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91141252\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11224008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6939\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091794\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44883975\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79213588\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35647276\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30082658\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29011738\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15504007\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64812851\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16924633\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4566\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38279875\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67735768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63431159\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74472668\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89722738\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30891544\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79388814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55981170\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63436639\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58283387\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60085543\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82785806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47524426\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63400219\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91941315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36757992\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60682186\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20850849\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60123818\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692914\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84248466\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59002580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59035851\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q8261440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54399662\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3730\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15850590\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030918\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708577\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38331872\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47690568\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56214810\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57591831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66505181\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20820011\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q846360\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30019717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17542926\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765348\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12336608\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12183006\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1227747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69336485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2987450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708572\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73864627\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2921726\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85809429\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667090\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78182962\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43950725\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84471501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91250837\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71880890\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68408145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708744\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35961983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81120140\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44068575\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92701441\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694233\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611132\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1868\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6544\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q14905949\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038281\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25041611\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28242379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872821\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36775166\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56626751\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58255465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667851\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52426347\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58925772\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69876814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58926711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87885168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56384597\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54431752\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28954843\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87940127\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91642204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5422\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54214049\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60594464\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91463287\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734607\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23038556\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66589334\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3956339\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70460306\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5670\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980244\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59216528\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872824\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2782326\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006354\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65028437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33701841\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15897261\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67139485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34104031\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56672416\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30053546\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61067972\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37242078\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34524203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60033529\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55898578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79325569\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41899000\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667103\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56565444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21134443\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84248690\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980539\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59037922\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47407371\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61795263\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681511\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694142\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59035942\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692752\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757012\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56708982\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49688389\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5069\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89266623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1449\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44305455\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36674878\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965155\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17991986\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746751\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21075823\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21504918\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3295\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18391611\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16474028\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047218\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56384970\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965205\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741266\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84247773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1772797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17050236\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765371\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1859784\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56445754\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12027742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84298625\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1592\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3822\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4295\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58558163\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56698946\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50451671\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7318358\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61249010\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P559\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59616003\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43195545\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58812539\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51159225\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667258\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746791\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53931299\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55396945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84247973\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43916273\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61248612\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33038168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74030064\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84246439\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636702\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030394\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12051308\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56605590\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q14905700\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49553500\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068075\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84274685\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63410620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66789593\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78027215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33082998\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71125249\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91666984\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66544192\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12599076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59037526\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22911774\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61248784\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56384971\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852619\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78119547\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73923194\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37138983\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59155052\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38247154\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88284939\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57826006\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2030245\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60094972\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757102\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41806836\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746675\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52076135\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16034400\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87939741\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40362623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22236200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73305703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6619771\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60727419\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42463776\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734359\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37750115\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84299551\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3006801\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58982779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28502569\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681586\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58133302\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72358764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35026666\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57629324\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6855\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681855\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852599\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27885123\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58730533\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56687451\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67785005\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7261\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74437022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27889310\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63437359\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62555520\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6587\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17781874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61834409\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79485608\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23037745\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83512382\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681591\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637101\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637169\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638154\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89508939\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18236098\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59076898\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091862\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6166\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58981315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2281630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52171144\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980125\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55890146\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2381062\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2852\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62554494\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6646014\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56236880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28008243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090560\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6902\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068258\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41446476\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q180043\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91432327\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67040294\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44007369\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35867112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56659498\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6543\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5900655\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58983008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66571827\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46151838\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50603365\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746733\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67144180\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40984512\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57608808\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741235\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33767112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56680078\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12046878\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7727\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2215100\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59157150\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2795\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46036445\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746872\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63979927\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6563\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34585815\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75801718\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64260953\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70568725\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55880194\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63090339\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1821278\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29042904\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20669604\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59043538\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765319\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46677538\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57590655\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52107525\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20055526\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45902465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12550685\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34173945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1858025\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965656\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44516919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746835\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56602003\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51299378\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1047129\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81570471\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7252\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5061\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42407168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89756958\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60060659\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58381919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55779861\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85555308\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1775867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50713116\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5817\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63252853\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77875869\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49575935\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741156\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36465471\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44329936\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77978519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59037465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734515\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41750244\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91858696\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636913\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63770443\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55789049\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37546082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49490023\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59486367\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694125\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2144951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74616066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66507099\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43184554\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091159\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61745706\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52089653\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55891501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61535026\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6224\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91739076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693072\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57933311\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6619716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89055460\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55092971\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59089543\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7824266\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59001713\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16321430\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45182324\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36084786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66507330\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66515634\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59034548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83069379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068225\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59155028\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40648173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852608\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59731975\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P520\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66688937\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66724450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5769\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7415\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78086635\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58081477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q571112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681642\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5897\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18168614\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746626\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34388618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q130596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692952\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55670964\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73215457\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681423\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55933978\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58381920\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915157\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681756\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59040112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55883560\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89454997\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q515487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30595453\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23037749\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58981855\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2914865\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3034808\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88013896\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6954\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q941413\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35689748\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16578059\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694221\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12043671\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17061485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67391763\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74506663\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46086677\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57072374\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59618768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36260332\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852613\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681445\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5967378\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2551\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765360\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59077764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56657164\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58390623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56657157\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15788778\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57858242\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708560\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5465488\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80120211\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047208\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59261901\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18356933\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77527200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59040057\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3030630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18762207\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36475676\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708817\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87913717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47223703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77420921\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4533225\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6545\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17152310\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627421\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60729272\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58713397\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47004757\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89663016\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53027591\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q902733\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30625279\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61452488\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48015805\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35417711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68304097\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58024844\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44042015\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42904932\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62089315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980816\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34995584\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72681620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37669027\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52486321\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57826013\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734562\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57416641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88909747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59611218\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58082867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56773003\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61631779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71751401\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74517369\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58979818\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694131\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627877\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1759797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77481453\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81568330\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43555634\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71880954\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7623420\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59401950\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38247151\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45845277\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047180\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57261880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091516\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84246795\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41639531\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091275\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3464\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57943840\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77253277\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52081983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67767032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068231\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872587\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89588525\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23817623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38279586\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71379472\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64070093\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34119428\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89722744\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12337557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50431534\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16474032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57244577\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56679252\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63581565\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1576\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39562274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59000604\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57960199\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55780736\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1593\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40344522\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708528\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637962\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19963413\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2031\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84299002\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58304485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047184\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681638\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681936\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47519561\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87977785\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45890151\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56072650\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872829\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4184\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77966244\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59001078\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59447796\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12589783\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60098797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55881606\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681649\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11336440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59189548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39292352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64385953\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42693980\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61908421\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47508191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47433319\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15070163\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59000798\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71036495\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57705098\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62037675\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78157652\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56639504\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708847\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46019721\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66511786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7719\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1022439\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27918922\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42559432\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12148487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92120857\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55623778\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5423\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18340291\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55789494\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25933403\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89756950\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42888697\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18679117\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59475250\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2313210\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61067917\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7561\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46410656\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59757607\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30279388\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56344544\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773849\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90467686\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29040297\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87979188\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79091747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19829402\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60568764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33695242\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708835\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58964868\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70943739\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80927264\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29547799\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66591079\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25446819\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18611872\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88180294\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52022204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89722728\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7604\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22980233\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33979600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22808118\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83563299\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21076236\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667509\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3492548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047198\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q334622\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61661768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52314749\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58901470\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46828291\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45224508\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60843717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88535965\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59945468\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47692241\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852622\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54553637\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60530681\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33333393\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62515032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75744042\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21862870\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3348314\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55185525\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62089361\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625714\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28324850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039719\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3406405\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60065228\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12070726\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q230773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77982012\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5261096\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88862465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58742620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3268764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38247694\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56016940\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84288305\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61979400\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6815348\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10385896\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84288633\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030941\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62019215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032045\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068061\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60065211\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59031265\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74202066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92700703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77696500\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56672039\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047232\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765312\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72041259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15077340\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681871\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84479664\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56060497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59070402\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33461541\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35717610\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3177867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64922682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66590089\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84567767\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34127834\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74424079\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681908\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78295452\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5304\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7122\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681785\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734410\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60208424\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54452490\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65683204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84275997\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28590574\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53964612\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89308296\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59000318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637063\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2341\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74200193\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q328566\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79366664\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q76523972\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P156\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56092582\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35464229\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59493528\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53559051\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q719419\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84286737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73935677\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58129147\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q93390200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87885164\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56297970\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64101776\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22074608\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58297595\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60110\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28816010\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667856\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51599582\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36388823\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28667703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57926311\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58158716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4569238\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12893940\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72729171\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58392821\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7469\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18012653\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18553681\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5193377\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030279\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91463220\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55788456\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27865780\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23067080\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27983054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28129958\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77166485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58506813\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7309\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71044374\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q31087626\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73862359\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35554451\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88020063\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1451\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59092080\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52883628\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35803642\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746671\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56659539\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20948792\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16637260\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60095043\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59035285\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56659547\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73221682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63459006\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58901786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64768673\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72463157\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18059915\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89769082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708731\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43108199\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60045937\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48340037\n" - ] - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "compEmbeddings = {}\n", - "transeEmbeddings = {}\n", - "\n", - "for wordID in wordSimSet:\n", - " try:\n", - " resp = requests.get(\"http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID).json()['_source']\n", - " compEmbeddings[wordID] = resp['graph_embedding_complex']\n", - " transeEmbeddings[wordID] = resp['graph_embeddings_transe']\n", - " except:\n", - " print(\"Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "complicated-puzzle", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['node1_compl_emb'] = wikiDF['node1'].apply(lambda p: compEmbeddings[p] if p in compEmbeddings else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "canadian-divorce", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['node2_compl_emb'] = wikiDF['node2'].apply(lambda p: compEmbeddings[p] if p in compEmbeddings else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "typical-delay", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['node1_transe_emb'] = wikiDF['node1'].apply(lambda p: transeEmbeddings[p] if p in transeEmbeddings else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "passive-magazine", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['node2_transe_emb'] = wikiDF['node2'].apply(lambda p: transeEmbeddings[p] if p in transeEmbeddings else None)" - ] - }, - { - "cell_type": "markdown", - "id": "interested-sympathy", - "metadata": {}, - "source": [ - "## Abstract" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "special-paradise", - "metadata": {}, - "outputs": [], - "source": [ - "# sitelinksDF = pd.read_csv(\"../data/sitelinks.en.tsv.gz\", sep='\\t')\n", - "# sitelinksDF['trimmedNode2'] = sitelinksDF.node2.apply(lambda p: p.split(\"/\")[-1] if p.split(\"/\")[-1] != '' else p.split(\"/\")[-2])\n", - "# sitelinksDF1 = sitelinksDF[sitelinksDF.label == 'wikipedia_sitelink']\n", - "# sitelinksDF2 = sitelinksDF1.set_index('trimmedNode2')\n", - "# print(f\"There are {len(sitelinksDF2)} sitelinks present in the dataset corresponding to {sitelinksDF2.node1.nunique()} unique node1s (Qxxx), {sitelinksDF2.index.nunique()} unique labels (text)\")\n", - "# # sitelinksDF2.loc[sitelinksDF2[sitelinksDF2.index.duplicated()].index]\n", - "\n", - "# df1 = pd.read_csv(\"../data/short-abstracts_lang=en.csv\", skiprows=1, skipfooter=1, header=None, engine='python')\n", - "# df1.columns = ['ignore', 'node1', 'url', 'ignore2', 'abstract']\n", - "# df1 = df1.set_index('node1')\n", - "# df1[df1.url.apply(lambda p: 'http://dbpedia.org/resource' not in p)]\n", - "\n", - "# print(f\"DBPedia dataset has {len(df1)} records with unique {df1.index.nunique()} index values\")\n", - "# # df1.loc[df1[df1.index.duplicated()].index]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "committed-bathroom", - "metadata": {}, - "outputs": [], - "source": [ - "# abstractsDF2 = sitelinksDF2.join(df1).reset_index()\n", - "# print(f\"From {len(abstractsDF2)} Qnodes, there are {abstractsDF2.ignore2.isna().sum()} sitelink Qnodes which do not have a short abstract i.e {len(abstractsDF2) - abstractsDF2.ignore2.isna().sum()} have a short abstract\")\n", - "# abstractsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "given-sapphire", - "metadata": {}, - "outputs": [], - "source": [ - "# print(f\"We have {len(wordSimSet)} no. of Qnodes extracted from node1, node2 of wikidata CS\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "black-throat", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimSet = set(wordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "painful-survivor", - "metadata": {}, - "outputs": [], - "source": [ - "# abstractsDF_subset = abstractsDF2[abstractsDF2.node1.apply(lambda p: p in wordSimSet)]\n", - "# abstractsDF_subset = abstractsDF_subset[~abstractsDF_subset.abstract.isna()]\n", - "# len(abstractsDF_subset)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "democratic-priority", - "metadata": {}, - "outputs": [], - "source": [ - "# from nltk.tokenize import sent_tokenize\n", - "# abstractsDF_subset['abstract_firstSent'] = abstractsDF_subset.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "likely-north", - "metadata": {}, - "outputs": [], - "source": [ - "# abstractsDF_subset.to_csv('../data/M-Pairs/output/abstractsDF_subset.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "legendary-contract", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF_subset = pd.read_csv('../data/M-Pairs/output/abstractsDF_subset.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "worst-municipality", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "31144" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(abstractsDF_subset)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "durable-princeton", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getBERTSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "def getBERTSentEmbeddingsForSent(val1, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(val1)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "victorian-orientation", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "74.81354665756226 s\n", - "31.950600385665894 s\n" - ] - } - ], - "source": [ - "abstractsDF_subset['BERT_abstract_emb'] = pd.Series(list(getBERTSentEmbeddings(abstractsDF_subset.abstract, 'bert-base-nli-mean-tokens')))\n", - "abstractsDF_subset['BERT_abstract_firstSent_emb'] = pd.Series(list(getBERTSentEmbeddings(abstractsDF_subset.abstract_firstSent, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "stuffed-stamp", - "metadata": {}, - "outputs": [], - "source": [ - "for col in ['BERT_abstract_emb', 'BERT_abstract_firstSent_emb']:\n", - " abstractsDF_subset[col] = abstractsDF_subset[col].apply(lambda p: p.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "excessive-compression", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0indexidnode1labelnode2ignoreurlignore2abstractabstract_firstSentBERT_abstract_embBERT_abstract_firstSent_emb
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: [Unnamed: 0, index, id, node1, label, node2, ignore, url, ignore2, abstract, abstract_firstSent, BERT_abstract_emb, BERT_abstract_firstSent_emb]\n", - "Index: []" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF_subset[abstractsDF_subset.node1.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "instructional-wireless", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs = wikiDF.set_index('node1').join(abstractsDF_subset.set_index('node1')[['abstract','abstract_firstSent', 'BERT_abstract_emb', 'BERT_abstract_firstSent_emb']])" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "flush-share", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs.reset_index().set_index('node2').join(abstractsDF_subset.set_index('node1')[['abstract','abstract_firstSent', 'BERT_abstract_emb', 'BERT_abstract_firstSent_emb']], rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "changing-calculator", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs1.reset_index().rename(columns={'index':'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "mathematical-denver", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abstract_emb'] = wikiDF_wabs1['BERT_abstract_emb'].tolist()\n", - "wikiDF_wabs1['BERT_abstract_firstSent_emb'] = wikiDF_wabs1['BERT_abstract_firstSent_emb'].tolist()\n", - "wikiDF_wabs1['BERT_abstract_emb_right'] = wikiDF_wabs1['BERT_abstract_emb_right'].tolist()\n", - "wikiDF_wabs1['BERT_abstract_firstSent_emb_right'] = wikiDF_wabs1['BERT_abstract_firstSent_emb_right'].tolist()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "patent-capability", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['node1_compl_emb'] = wikiDF_wabs1['node1_compl_emb'].apply(lambda p: p.split(',') if p else None)\n", - "wikiDF_wabs1['node2_compl_emb'] = wikiDF_wabs1['node2_compl_emb'].apply(lambda p: p.split(',') if p else None)\n", - "wikiDF_wabs1['node1_transe_emb'] = wikiDF_wabs1['node1_transe_emb'].apply(lambda p: p.split(',') if p else None)\n", - "wikiDF_wabs1['node2_transe_emb'] = wikiDF_wabs1['node2_transe_emb'].apply(lambda p: p.split(',') if p else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "double-mediterranean", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...node1_transe_embnode2_transe_embabstractabstract_firstSentBERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_right
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[-0.178757623, -1.513463259, -1.526623845, 0.3...NoneIn the Latter Day Saint movement, a temple is ...In the Latter Day Saint movement, a temple is ...[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNaNNaN
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.396865129, 0.509240150, -0.284384042, -0.5...NoneA tram (in North America streetcar or trolley)...A tram (in North America streetcar or trolley)...[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNaNNaN
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.363599300, -0.764536679, 0.060853526, -0.0......[0.337825149, -0.189670041, -0.480503321, -0.2...NoneNaNNaNNaNNaNNaNNaNNaNNaN
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NoneNoneNaNNaNNaNNaNNaNNaNNaNNaN
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.043086100, -0.041153915, -0.603652894, -0.4......[-1.035292268, 0.008348951, -1.242931604, -1.6...NoneAn awards ceremony is a type of ceremony where...An awards ceremony is a type of ceremony where...[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNaNNaN
\n", - "

5 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.363599300, -0.764536679, 0.060853526, -0.0... ... \n", - "3 None ... \n", - "4 [0.043086100, -0.041153915, -0.603652894, -0.4... ... \n", - "\n", - " node1_transe_emb node2_transe_emb \\\n", - "0 [-0.178757623, -1.513463259, -1.526623845, 0.3... None \n", - "1 [-0.396865129, 0.509240150, -0.284384042, -0.5... None \n", - "2 [0.337825149, -0.189670041, -0.480503321, -0.2... None \n", - "3 None None \n", - "4 [-1.035292268, 0.008348951, -1.242931604, -1.6... None \n", - "\n", - " abstract \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " abstract_firstSent \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 NaN \n", - "3 NaN \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN NaN \n", - "1 NaN NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 NaN NaN \n", - "\n", - " BERT_abstract_firstSent_emb_right \n", - "0 NaN \n", - "1 NaN \n", - "2 NaN \n", - "3 NaN \n", - "4 NaN \n", - "\n", - "[5 rows x 21 columns]" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "markdown", - "id": "dietary-function", - "metadata": {}, - "source": [ - "## Text" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "seven-individual", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimList = list(wordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "identical-brighton", - "metadata": {}, - "outputs": [], - "source": [ - "# bsize = len(wordSimList) // 20\n", - "# cnt = 1\n", - "# for i in range(0, len(wordSimList), bsize):\n", - "# q1 = \"kgtk filter -i ../data/wikidataos.for.text-embedding.tsv.gz --word-separator '|' -p '\" + '|'.join(wordSimList[i:i+bsize]) + \";;' -o ../data/M-Pairs/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv -v True\"\n", - "# cnt += 1\n", - "# # print(q1)\n", - "# os.system(\"screen -dm \" + q1)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "front-acquisition", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(1,11):\n", - "# q1 = \"kgtk text-embedding -i ../data/M-Pairs/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/M-Pairs/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "designing-rugby", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(11,21):\n", - "# q1 = \"kgtk text-embedding -i ../data/M-Pairs/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/M-Pairs/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "incredible-cedar", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DFArr = []\n", - "for cnt in range(1,21):\n", - " textEmb_7props_DFArr.append(pd.read_csv(\"../data/M-Pairs/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\", sep='\\t'))\n", - "textEmb_7props_DF = pd.concat(textEmb_7props_DFArr)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "underlying-indie", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF.to_csv('../data/M-Pairs/output/P279-text-embedding-7-props-all.tsv', sep='\\t', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "central-product", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = textEmb_7props_DF[textEmb_7props_DF.property == 'text_embedding']" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "broke-cathedral", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "renewable-brand", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q995878text_embedding[1.3671061, 0.9123121, -0.79829437, 0.9297752,...
2Q995609text_embedding[0.27214786, 1.5027193, -1.0903299, -0.1850157...
4Q994507text_embedding[0.35614717, 1.6611174, -0.2951356, 0.81781155...
6Q986635text_embedding[0.26672798, 0.63939905, -1.2968327, 0.1320171...
8Q9813868text_embedding[-0.08139745, 0.39049774, 0.24617954, -0.07873...
\n", - "
" - ], - "text/plain": [ - " node property value\n", - "0 Q995878 text_embedding [1.3671061, 0.9123121, -0.79829437, 0.9297752,...\n", - "2 Q995609 text_embedding [0.27214786, 1.5027193, -1.0903299, -0.1850157...\n", - "4 Q994507 text_embedding [0.35614717, 1.6611174, -0.2951356, 0.81781155...\n", - "6 Q986635 text_embedding [0.26672798, 0.63939905, -1.2968327, 0.1320171...\n", - "8 Q9813868 text_embedding [-0.08139745, 0.39049774, 0.24617954, -0.07873..." - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "gothic-california", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs2 = wikiDF_wabs1.set_index('node1').join(textEmb_7props_DF.set_index('node')[['value']])" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "smooth-albania", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs2 = wikiDF_wabs2.rename(columns={'index':'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "basic-jumping", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs3 = wikiDF_wabs2.reset_index().set_index('node2').join(textEmb_7props_DF.set_index('node')[['value']], rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "original-canada", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs3 = wikiDF_wabs3.rename(columns={'index': 'node1'}).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "deadly-atmosphere", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs3 = wikiDF_wabs3.rename(columns={'index': 'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "palestinian-trance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "difficult-athletics", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs3" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "dutch-principal", - "metadata": {}, - "outputs": [], - "source": [ - "# wikiDF_wabs1 = wikiDF_wabs1.drop(columns=['value','value_right'])" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "relative-clearing", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['node2', 'node1', 'relation', 'node1;label', 'node2;label',\n", - " 'relation;label', 'relation;dimension', 'source', 'sentence',\n", - " 'node1_compl_emb', 'node2_compl_emb', 'node1_transe_emb',\n", - " 'node2_transe_emb', 'abstract', 'abstract_firstSent',\n", - " 'BERT_abstract_emb', 'BERT_abstract_firstSent_emb', 'abstract_right',\n", - " 'abstract_firstSent_right', 'BERT_abstract_emb_right',\n", - " 'BERT_abstract_firstSent_emb_right', 'value', 'value_right'],\n", - " dtype='object')" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "existing-juice", - "metadata": {}, - "outputs": [], - "source": [ - "# cols = ['BERT_abstract_emb', 'BERT_abstract_firstSent_emb', 'BERT_abstract_emb_right', \n", - "# 'BERT_abstract_firstSent_emb_right', \n", - "# 'node1_compl_emb', 'node2_compl_emb', \n", - "# 'node1_transe_emb', 'node2_transe_emb', 'value', 'value_right']\n", - "# for col in cols:\n", - "# wikiDF_wabs1[col] = wikiDF_wabs1[col].apply()" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "unlimited-monster", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...abstractabstract_firstSentBERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_rightvaluevalue_right
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......In the Latter Day Saint movement, a temple is ...In the Latter Day Saint movement, a temple is ...[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNaNNaN[-0.027918775, 0.40711772, -0.26630637, -0.669...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......A tram (in North America streetcar or trolley)...A tram (in North America streetcar or trolley)...[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNaNNaN[0.6575391, -0.10703926, 0.73501605, -0.636591...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.363599300, -0.764536679, 0.060853526, -0.0......NaNNaNNaNNaNNaNNaNNaNNaN[0.15300399, -0.43896374, -0.17923762, 0.23122...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NaNNaNNaNNaNNaNNaNNaNNaN[0.6896931, 0.5631939, 0.03267402, 0.30135256,...[-0.4857783, 1.0299897, -0.08442746, 0.0377928...
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.043086100, -0.041153915, -0.603652894, -0.4......An awards ceremony is a type of ceremony where...An awards ceremony is a type of ceremony where...[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNaNNaN[0.7004955, 1.2301444, -1.3314008, 0.3130464, ...[-0.25474873, 1.0963922, -0.07334485, -0.05801...
\n", - "

5 rows × 23 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.363599300, -0.764536679, 0.060853526, -0.0... ... \n", - "3 None ... \n", - "4 [0.043086100, -0.041153915, -0.603652894, -0.4... ... \n", - "\n", - " abstract \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " abstract_firstSent \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 NaN \n", - "3 NaN \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN NaN \n", - "1 NaN NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 NaN NaN \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 NaN \n", - "2 NaN \n", - "3 NaN \n", - "4 NaN \n", - "\n", - " value \\\n", - "0 [-0.027918775, 0.40711772, -0.26630637, -0.669... \n", - "1 [0.6575391, -0.10703926, 0.73501605, -0.636591... \n", - "2 [0.15300399, -0.43896374, -0.17923762, 0.23122... \n", - "3 [0.6896931, 0.5631939, 0.03267402, 0.30135256,... \n", - "4 [0.7004955, 1.2301444, -1.3314008, 0.3130464, ... \n", - "\n", - " value_right \n", - "0 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "1 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "2 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "3 [-0.4857783, 1.0299897, -0.08442746, 0.0377928... \n", - "4 [-0.25474873, 1.0963922, -0.07334485, -0.05801... \n", - "\n", - "[5 rows x 23 columns]" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "overall-blues", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1.to_csv('../data/M-Pairs/wikidataCS_wemb.csv', index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "radio-flexibility", - "metadata": {}, - "source": [ - "# Summary" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "appropriate-integer", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs = pd.read_csv('../data/M-Pairs/wikidataCS_wemb.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "rational-kansas", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "suburban-cruise", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs.copy()\n", - "cols = ['BERT_abstract_emb', 'BERT_abstract_firstSent_emb', 'BERT_abstract_emb_right', \n", - " 'BERT_abstract_firstSent_emb_right', \n", - " 'node1_compl_emb', 'node2_compl_emb', \n", - " 'node1_transe_emb', 'node2_transe_emb', 'value', 'value_right']\n", - "for col in cols:\n", - " wikiDF_wabs1[col] = wikiDF_wabs1[col].apply(lambda p: [float(p1.replace(\"'\",\"\")) for p1 in p[1:-1].split(',')] if type(p) != float else None)\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "electronic-vietnamese", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...abstractabstract_firstSentBERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_rightvaluevalue_right
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......In the Latter Day Saint movement, a temple is ...In the Latter Day Saint movement, a temple is ...[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNoneNone[-0.027918775, 0.40711772, -0.26630637, -0.669...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......A tram (in North America streetcar or trolley)...A tram (in North America streetcar or trolley)...[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNoneNone[0.6575391, -0.10703926, 0.73501605, -0.636591...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......NaNNaNNoneNoneNaNNaNNoneNone[0.15300399, -0.43896374, -0.17923762, 0.23122...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NaNNaNNoneNoneNaNNaNNoneNone[0.6896931, 0.5631939, 0.03267402, 0.30135256,...[-0.4857783, 1.0299897, -0.08442746, 0.0377928...
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......An awards ceremony is a type of ceremony where...An awards ceremony is a type of ceremony where...[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNoneNone[0.7004955, 1.2301444, -1.3314008, 0.3130464, ...[-0.25474873, 1.0963922, -0.07334485, -0.05801...
\n", - "

5 rows × 23 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " abstract \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " abstract_firstSent \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 None \n", - "3 None \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 None NaN \n", - "3 None NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN None \n", - "1 NaN None \n", - "2 NaN None \n", - "3 NaN None \n", - "4 NaN None \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", - "\n", - " value \\\n", - "0 [-0.027918775, 0.40711772, -0.26630637, -0.669... \n", - "1 [0.6575391, -0.10703926, 0.73501605, -0.636591... \n", - "2 [0.15300399, -0.43896374, -0.17923762, 0.23122... \n", - "3 [0.6896931, 0.5631939, 0.03267402, 0.30135256,... \n", - "4 [0.7004955, 1.2301444, -1.3314008, 0.3130464, ... \n", - "\n", - " value_right \n", - "0 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "1 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "2 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "3 [-0.4857783, 1.0299897, -0.08442746, 0.0377928... \n", - "4 [-0.25474873, 1.0963922, -0.07334485, -0.05801... \n", - "\n", - "[5 rows x 23 columns]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "markdown", - "id": "plain-design", - "metadata": {}, - "source": [ - "## Fix Abstract stuff" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "little-split", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "separate-apache", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF1 = labelsDF.drop(columns=['id', 'label'])" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "medical-authority", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs1.set_index('node1').join(labelsDF1.set_index('node1'), rsuffix='_label')" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "julian-sector", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs4.reset_index().rename(columns={'index':'node1'})" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "marine-lloyd", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs4.set_index('node2').join(labelsDF1.set_index('node1'), rsuffix='_label_right').rename(columns={'node2':'node2_label_right'})" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "biblical-beach", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs4.reset_index().rename(columns={'index':'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "piano-pencil", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs4.rename(columns={'node2_label': 'node1_wiki_label', 'node2_label_right': 'node2_wiki_label'})" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "statistical-order", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_rightvaluevalue_rightnode1_wiki_labelnode2_wiki_label
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNoneNone[-0.027918775, 0.40711772, -0.26630637, -0.669...[0.22757019, 1.3568109, 0.20142093, -0.136266,...'temple'@en'quantity'@en
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNoneNone[0.6575391, -0.10703926, 0.73501605, -0.636591...[0.22757019, 1.3568109, 0.20142093, -0.136266,...'tram'@en'quantity'@en
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......NoneNoneNaNNaNNoneNone[0.15300399, -0.43896374, -0.17923762, 0.23122...[0.22757019, 1.3568109, 0.20142093, -0.136266,...'number of objects'@en'quantity'@en
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NoneNoneNaNNaNNoneNone[0.6896931, 0.5631939, 0.03267402, 0.30135256,...[-0.4857783, 1.0299897, -0.08442746, 0.0377928...'student organization of'@en'represents'@en
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNoneNone[0.7004955, 1.2301444, -1.3314008, 0.3130464, ...[-0.25474873, 1.0963922, -0.07334485, -0.05801...'award ceremony'@en'facet of'@en
\n", - "

5 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 None \n", - "3 None \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 None NaN \n", - "3 None NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN None \n", - "1 NaN None \n", - "2 NaN None \n", - "3 NaN None \n", - "4 NaN None \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", - "\n", - " value \\\n", - "0 [-0.027918775, 0.40711772, -0.26630637, -0.669... \n", - "1 [0.6575391, -0.10703926, 0.73501605, -0.636591... \n", - "2 [0.15300399, -0.43896374, -0.17923762, 0.23122... \n", - "3 [0.6896931, 0.5631939, 0.03267402, 0.30135256,... \n", - "4 [0.7004955, 1.2301444, -1.3314008, 0.3130464, ... \n", - "\n", - " value_right \\\n", - "0 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "1 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "2 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "3 [-0.4857783, 1.0299897, -0.08442746, 0.0377928... \n", - "4 [-0.25474873, 1.0963922, -0.07334485, -0.05801... \n", - "\n", - " node1_wiki_label node2_wiki_label \n", - "0 'temple'@en 'quantity'@en \n", - "1 'tram'@en 'quantity'@en \n", - "2 'number of objects'@en 'quantity'@en \n", - "3 'student organization of'@en 'represents'@en \n", - "4 'award ceremony'@en 'facet of'@en \n", - "\n", - "[5 rows x 25 columns]" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs4.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "introductory-elizabeth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "563" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs4['node2_wiki_label'].isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "packed-simpson", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "established-preference", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['node1;label_temp'] = wikiDF_wabs1['node1;label'].fillna(\"\")\n", - "wikiDF_wabs1['node2;label_temp'] = wikiDF_wabs1['node2;label'].fillna(\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "sunrise-liverpool", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_rightvaluevalue_rightnode1;label_tempnode2;label_temp
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNoneNone[-0.027918775, 0.40711772, -0.26630637, -0.669...[0.22757019, 1.3568109, 0.20142093, -0.136266,...templequantity
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNoneNone[0.6575391, -0.10703926, 0.73501605, -0.636591...[0.22757019, 1.3568109, 0.20142093, -0.136266,...tramquantity
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......NoneNoneNaNNaNNoneNone[0.15300399, -0.43896374, -0.17923762, 0.23122...[0.22757019, 1.3568109, 0.20142093, -0.136266,...number of objectsquantity
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NoneNoneNaNNaNNoneNone[0.6896931, 0.5631939, 0.03267402, 0.30135256,...[-0.4857783, 1.0299897, -0.08442746, 0.0377928...student organization ofrepresents
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNoneNone[0.7004955, 1.2301444, -1.3314008, 0.3130464, ...[-0.25474873, 1.0963922, -0.07334485, -0.05801...award ceremonyfacet of
\n", - "

5 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 None \n", - "3 None \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 None NaN \n", - "3 None NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN None \n", - "1 NaN None \n", - "2 NaN None \n", - "3 NaN None \n", - "4 NaN None \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", - "\n", - " value \\\n", - "0 [-0.027918775, 0.40711772, -0.26630637, -0.669... \n", - "1 [0.6575391, -0.10703926, 0.73501605, -0.636591... \n", - "2 [0.15300399, -0.43896374, -0.17923762, 0.23122... \n", - "3 [0.6896931, 0.5631939, 0.03267402, 0.30135256,... \n", - "4 [0.7004955, 1.2301444, -1.3314008, 0.3130464, ... \n", - "\n", - " value_right node1;label_temp \\\n", - "0 [0.22757019, 1.3568109, 0.20142093, -0.136266,... temple \n", - "1 [0.22757019, 1.3568109, 0.20142093, -0.136266,... tram \n", - "2 [0.22757019, 1.3568109, 0.20142093, -0.136266,... number of objects \n", - "3 [-0.4857783, 1.0299897, -0.08442746, 0.0377928... student organization of \n", - "4 [-0.25474873, 1.0963922, -0.07334485, -0.05801... award ceremony \n", - "\n", - " node2;label_temp \n", - "0 quantity \n", - "1 quantity \n", - "2 quantity \n", - "3 represents \n", - "4 facet of \n", - "\n", - "[5 rows x 25 columns]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "advance-bradley", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "36.53356313705444 s\n", - "45.23650908470154 s\n" - ] - } - ], - "source": [ - "wikiDF_wabs1['node1;label_emb'] = pd.Series(list(getBERTSentEmbeddings(wikiDF_wabs1['node1;label_temp'], 'bert-base-nli-mean-tokens')))\n", - "wikiDF_wabs1['node2;label_emb'] = pd.Series(list(getBERTSentEmbeddings(wikiDF_wabs1['node2;label_temp'], 'bert-base-nli-mean-tokens')))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "grand-tooth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 [1.1099516, 0.96340746, 1.9986696, -0.26332825...\n", - "1 [0.11062625, -0.8170154, 1.9477333, 0.6333619,...\n", - "2 [0.6716414, -0.08505987, 1.6483774, 1.0254748,...\n", - "3 [0.11234443, -0.34427452, 1.2779658, 0.5219726...\n", - "4 [-0.20389149, 0.1330459, 2.6067894, 0.7318787,...\n", - " ... \n", - "101766 [-0.19040215, 0.31874508, 0.7144903, 0.2607778...\n", - "101767 [-0.1481771, -0.42037064, 1.2999005, 0.4722842...\n", - "101768 [-0.38610217, -0.26171663, 1.5519874, 0.358043...\n", - "101769 [-0.32396185, -0.2601691, 1.5890372, 0.6090804...\n", - "101770 [0.12058014, 0.57743263, 1.3856344, 0.03655950...\n", - "Name: node1;label_emb, Length: 101771, dtype: object" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['node1;label_emb']" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "satisfactory-minutes", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "def fixAbstractEmbsLeft(row):\n", - " if row['BERT_abstract_emb']:\n", - " return row['BERT_abstract_emb']\n", - " elif row['node1;label']:\n", - " return row['node1;label_emb'].tolist()\n", - " else:\n", - " return None\n", - "wikiDF_wabs1['BERT_abs_label_emb'] = wikiDF_wabs1.apply(fixAbstractEmbsLeft, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "alpha-dressing", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "def fixAbstractEmbsRight(row):\n", - " if row['BERT_abstract_emb_right']:\n", - " return row['BERT_abstract_emb_right']\n", - " elif row['node2;label']:\n", - " return row['node2;label_emb'].tolist()\n", - " else:\n", - " return None\n", - "wikiDF_wabs1['BERT_abs_label_emb_right'] = wikiDF_wabs1.apply(fixAbstractEmbsRight, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "short-consent", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "def fixAbstractFirstSentEmbsLeft(row):\n", - " if row['BERT_abstract_emb']:\n", - " return row['BERT_abstract_firstSent_emb']\n", - " elif row['node1;label']:\n", - " return row['node1;label_emb'].tolist()\n", - " else:\n", - " return None\n", - "wikiDF_wabs1['BERT_abs_firstSent_label_emb'] = wikiDF_wabs1.apply(fixAbstractFirstSentEmbsLeft, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "derived-wholesale", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "def fixAbstractFirstSentEmbsRight(row):\n", - " if row['BERT_abstract_emb_right']:\n", - " return row['BERT_abstract_firstSent_emb_right']\n", - " elif row['node2;label']:\n", - " return row['node2;label_emb'].tolist()\n", - " else:\n", - " return None\n", - "wikiDF_wabs1['BERT_abs_firstSent_label_emb_right'] = wikiDF_wabs1.apply(fixAbstractFirstSentEmbsRight, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "waiting-wholesale", - "metadata": {}, - "outputs": [], - "source": [ - "def getCosSims(wikiDF_wabs1, col1, col2):\n", - " return wikiDF_wabs1.apply(lambda p: cosine_similarity(np.array(p[col1]).reshape(1,-1), np.array(p[col2]).reshape(1,-1))[0][0] if (type(p[col1])==list and type(p[col2])==list) else -1, axis=1)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "id": "invalid-recommendation", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abstract_cosSim'] = getCosSims(wikiDF_wabs1, 'BERT_abstract_emb', 'BERT_abstract_emb_right')\n", - "wikiDF_wabs1['BERT_abstract_firstSent_cosSim'] = getCosSims(wikiDF_wabs1, 'BERT_abstract_firstSent_emb', 'BERT_abstract_firstSent_emb_right')\n", - "wikiDF_wabs1['complex_cosSim'] = getCosSims(wikiDF_wabs1, 'node1_compl_emb', 'node2_compl_emb')\n", - "wikiDF_wabs1['transe_cosSim'] = getCosSims(wikiDF_wabs1, 'node1_transe_emb', 'node2_transe_emb')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 159, - "id": "moderate-bulgarian", - "metadata": {}, - "outputs": [], - "source": [ - "def changeScale(val1, minVal=0, maxVal=1):\n", - " return 4 - 3 * (val1 - minVal) / (maxVal - minVal) if val1 != -1 else -1" - ] - }, - { - "cell_type": "code", - "execution_count": 196, - "id": "imported-offer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 30740.000000\n", - "mean 0.664270\n", - "std 0.132545\n", - "min 0.054277\n", - "25% 0.577663\n", - "50% 0.678386\n", - "75% 0.764839\n", - "max 1.000000\n", - "Name: BERT_abstract_cosSim, dtype: float64" - ] - }, - "execution_count": 196, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['BERT_abstract_cosSim'][wikiDF_wabs1['BERT_abstract_cosSim'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 197, - "id": "assumed-personality", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 30740.000000\n", - "mean 0.614450\n", - "std 0.157435\n", - "min -0.073644\n", - "25% 0.507432\n", - "50% 0.627924\n", - "75% 0.731958\n", - "max 1.000000\n", - "Name: BERT_abstract_firstSent_cosSim, dtype: float64" - ] - }, - "execution_count": 197, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['BERT_abstract_firstSent_cosSim'][wikiDF_wabs1['BERT_abstract_firstSent_cosSim'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 198, - "id": "competitive-practice", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 98495.000000\n", - "mean 0.654858\n", - "std 0.154211\n", - "min -0.033131\n", - "25% 0.560126\n", - "50% 0.671793\n", - "75% 0.764953\n", - "max 1.000000\n", - "Name: complex_cosSim, dtype: float64" - ] - }, - "execution_count": 198, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['complex_cosSim'][wikiDF_wabs1['complex_cosSim'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 199, - "id": "historical-andrews", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 98495.000000\n", - "mean 0.652252\n", - "std 0.176201\n", - "min -0.137044\n", - "25% 0.528159\n", - "50% 0.656617\n", - "75% 0.784122\n", - "max 1.000000\n", - "Name: transe_cosSim, dtype: float64" - ] - }, - "execution_count": 199, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['transe_cosSim'][wikiDF_wabs1['transe_cosSim'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 200, - "id": "buried-catalyst", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 97964.000000\n", - "mean 1.809035\n", - "std 0.387920\n", - "min 1.000000\n", - "25% 1.524458\n", - "50% 1.767705\n", - "75% 2.053570\n", - "max 4.000000\n", - "Name: textEmb_score, dtype: float64" - ] - }, - "execution_count": 200, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['textEmb_score'][wikiDF_wabs1['textEmb_score'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 163, - "id": "unlimited-minnesota", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.05427744093567516" - ] - }, - "execution_count": 163, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 164, - "id": "false-sheep", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abstract_score'] = wikiDF_wabs1['BERT_abstract_cosSim'].apply(changeScale, args=(wikiDF_wabs1['BERT_abstract_cosSim'].where(wikiDF_wabs1['BERT_abstract_cosSim'] != -1).min(), wikiDF_wabs1['BERT_abstract_cosSim'].max()))\n", - "wikiDF_wabs1['BERT_abstract_firstSent_score'] = wikiDF_wabs1['BERT_abstract_firstSent_cosSim'].apply(changeScale, args=(wikiDF_wabs1['BERT_abstract_firstSent_cosSim'].where(wikiDF_wabs1['BERT_abstract_firstSent_cosSim'] != -1).min(), wikiDF_wabs1['BERT_abstract_firstSent_cosSim'].max()))\n", - "wikiDF_wabs1['complex_score'] = wikiDF_wabs1['complex_cosSim'].apply(changeScale, args=(wikiDF_wabs1['complex_cosSim'].where(wikiDF_wabs1['complex_cosSim'] != -1).min(), wikiDF_wabs1['complex_cosSim'].max()))\n", - "wikiDF_wabs1['transe_score'] = wikiDF_wabs1['transe_cosSim'].apply(changeScale, args=(wikiDF_wabs1['transe_cosSim'].where(wikiDF_wabs1['transe_cosSim'] != -1).min(), wikiDF_wabs1['transe_cosSim'].max()))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "caring-passenger", - "metadata": {}, - "outputs": [], - "source": [ - "# wikiDF_wabs1['BERT_abstract_score'] = wikiDF_wabs1['BERT_abstract_cosSim'].apply(lambda p: 4 - 3 * p if p != -1 else -1)\n", - "# wikiDF_wabs1['BERT_abstract_firstSent_score'] = wikiDF_wabs1['BERT_abstract_firstSent_cosSim'].apply(lambda p: 4 - 3 * p if p != -1 else -1)\n", - "# wikiDF_wabs1['complex_score'] = wikiDF_wabs1['complex_cosSim'].apply(lambda p: 4 - 3 * p if p != -1 else -1)\n", - "# wikiDF_wabs1['transe_score'] = wikiDF_wabs1['transe_cosSim'].apply(lambda p: 4 - 3 * p if p != -1 else -1)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 165, - "id": "weighted-heavy", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['textEmb_cosSim'] = getCosSims(wikiDF_wabs1, 'value', 'value_right')\n", - "wikiDF_wabs1['textEmb_score'] = wikiDF_wabs1['textEmb_cosSim'].apply(changeScale, args=(wikiDF_wabs1['textEmb_cosSim'].where(wikiDF_wabs1['textEmb_cosSim'] != -1).min(), wikiDF_wabs1['textEmb_cosSim'].max()))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 166, - "id": "international-neighborhood", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abs_label_cosSim'] = getCosSims(wikiDF_wabs1, 'BERT_abs_label_emb', 'BERT_abs_label_emb_right')\n", - "wikiDF_wabs1['BERT_abs_label_score'] = wikiDF_wabs1['BERT_abs_label_cosSim'].apply(changeScale, args=(wikiDF_wabs1['BERT_abs_label_cosSim'].where(wikiDF_wabs1['BERT_abs_label_cosSim'] != -1).min(), wikiDF_wabs1['BERT_abs_label_cosSim'].max()))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "id": "sized-coupon", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'] = getCosSims(wikiDF_wabs1, 'BERT_abs_firstSent_label_emb', 'BERT_abs_firstSent_label_emb_right')\n", - "wikiDF_wabs1['BERT_abs_firstSent_label_score'] = wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'].apply(changeScale, args=(wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'].where(wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'] != -1).min(), wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'].max()))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "id": "emotional-affect", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs1.rename(columns={'value_score': 'textEmb_score'})" - ] - }, - { - "cell_type": "code", - "execution_count": 169, - "id": "pleased-medline", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BERT_abs_label_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSimcomplex_cosSimtranse_cosSimtextEmb_cosSimBERT_abs_firstSent_label_cosSim
count101771.000000101771.000000101771.000000101771.000000101771.000000101771.000000101771.000000
mean0.560186-0.497306-0.5123540.6015890.5990660.6593610.577693
std0.2197770.7676130.7463060.3291390.3392580.3519680.201635
min-0.199269-1.000000-1.000000-1.000000-1.000000-1.000000-0.200145
25%0.405427-1.000000-1.0000000.5448120.5122820.6247960.439193
50%0.569074-1.000000-1.0000000.6656460.6488720.7313360.582915
75%0.7280680.5366180.4580040.7616540.7793340.8174820.723494
max1.0000001.0000001.0000001.0000001.0000001.0000001.000000
\n", - "
" - ], - "text/plain": [ - " BERT_abs_label_cosSim BERT_abstract_cosSim \\\n", - "count 101771.000000 101771.000000 \n", - "mean 0.560186 -0.497306 \n", - "std 0.219777 0.767613 \n", - "min -0.199269 -1.000000 \n", - "25% 0.405427 -1.000000 \n", - "50% 0.569074 -1.000000 \n", - "75% 0.728068 0.536618 \n", - "max 1.000000 1.000000 \n", - "\n", - " BERT_abstract_firstSent_cosSim complex_cosSim transe_cosSim \\\n", - "count 101771.000000 101771.000000 101771.000000 \n", - "mean -0.512354 0.601589 0.599066 \n", - "std 0.746306 0.329139 0.339258 \n", - "min -1.000000 -1.000000 -1.000000 \n", - "25% -1.000000 0.544812 0.512282 \n", - "50% -1.000000 0.665646 0.648872 \n", - "75% 0.458004 0.761654 0.779334 \n", - "max 1.000000 1.000000 1.000000 \n", - "\n", - " textEmb_cosSim BERT_abs_firstSent_label_cosSim \n", - "count 101771.000000 101771.000000 \n", - "mean 0.659361 0.577693 \n", - "std 0.351968 0.201635 \n", - "min -1.000000 -0.200145 \n", - "25% 0.624796 0.439193 \n", - "50% 0.731336 0.582915 \n", - "75% 0.817482 0.723494 \n", - "max 1.000000 1.000000 " - ] - }, - "execution_count": 169, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1[filter(lambda p: 'cosSim' in p, wikiDF_wabs1.columns)].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "impossible-navigator", - "metadata": {}, - "outputs": [], - "source": [ - "# wikiDF_wabs1.to_csv('../data/M-Pairs/wikidataCS_wemb.csv', index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "welsh-salem", - "metadata": {}, - "outputs": [], - "source": [ - "mapper1 = {'/r/DistinctFrom': 'distinctness',\n", - " '/r/Antonym': 'antonymy',\n", - " '/r/Synonym': 'synonymy',\n", - " '/r/SimilarTo': 'similarity',\n", - " '/r/DerivedFrom': 'derivation',\n", - " '/r/IsA': 'inheritance',\n", - " '/r/PartOf': 'meronymy',\n", - " '/r/MadeOf': 'material',\n", - " '/r/CreatedBy': 'attribution',\n", - " '/r/UsedFor': 'utility',\n", - " '/r/HasProperty': 'properties',\n", - " '/r/Causes': 'causation',\n", - " '/r/HasPrerequisite': 'ordering',\n", - " '/r/HasContext': 'context',\n", - " '/r/RelatedTo': 'other'}\n", - "\n", - "wikiDF_wabs1['dim'] = wikiDF_wabs1['relation'].apply(lambda p: mapper1[p])" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "common-building", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abs_firstSent_label_embBERT_abs_firstSent_label_emb_rightBERT_abs_firstSent_label_cosSimBERT_abstract_scoreBERT_abstract_firstSent_scorecomplex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[0.6187984943389893, 1.4799031019210815, 0.515...[-0.21400201320648193, -0.1853264421224594, 2....0.111954-1.0-1.0-1.0-1.02.5702803.9491283.664139
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.1387496143579483, -1.0609047412872314, -0....[-0.21400196850299835, -0.1853266954421997, 2....0.066402-1.0-1.0-1.0-1.02.6627643.9148973.800794
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......[0.6716414093971252, -0.08505986630916595, 1.6...[-0.21400196850299835, -0.1853266954421997, 2....0.701743-1.0-1.0-1.0-1.02.5190901.8947701.894770
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...[0.11234442889690399, -0.34427452087402344, 1....[0.1607293337583542, -0.1969822645187378, 2.40...0.546000-1.0-1.0-1.0-1.02.1108302.3620012.362001
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......[-0.02503090538084507, 0.4087623953819275, 1.9...[-0.03644487261772156, -0.5494412183761597, 2....0.372485-1.0-1.0-1.0-1.02.4436323.7988962.882546
\n", - "

5 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " BERT_abs_firstSent_label_emb \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... \n", - "2 [0.6716414093971252, -0.08505986630916595, 1.6... \n", - "3 [0.11234442889690399, -0.34427452087402344, 1.... \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... \n", - "\n", - " BERT_abs_firstSent_label_emb_right \\\n", - "0 [-0.21400201320648193, -0.1853264421224594, 2.... \n", - "1 [-0.21400196850299835, -0.1853266954421997, 2.... \n", - "2 [-0.21400196850299835, -0.1853266954421997, 2.... \n", - "3 [0.1607293337583542, -0.1969822645187378, 2.40... \n", - "4 [-0.03644487261772156, -0.5494412183761597, 2.... \n", - "\n", - " BERT_abs_firstSent_label_cosSim BERT_abstract_score \\\n", - "0 0.111954 -1.0 \n", - "1 0.066402 -1.0 \n", - "2 0.701743 -1.0 \n", - "3 0.546000 -1.0 \n", - "4 0.372485 -1.0 \n", - "\n", - " BERT_abstract_firstSent_score complex_score transe_score textEmb_score \\\n", - "0 -1.0 -1.0 -1.0 2.570280 \n", - "1 -1.0 -1.0 -1.0 2.662764 \n", - "2 -1.0 -1.0 -1.0 2.519090 \n", - "3 -1.0 -1.0 -1.0 2.110830 \n", - "4 -1.0 -1.0 -1.0 2.443632 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "0 3.949128 3.664139 \n", - "1 3.914897 3.800794 \n", - "2 1.894770 1.894770 \n", - "3 2.362001 2.362001 \n", - "4 3.798896 2.882546 \n", - "\n", - "[5 rows x 46 columns]" - ] - }, - "execution_count": 141, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "polar-constitutional", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abs_firstSent_label_embBERT_abs_firstSent_label_emb_rightBERT_abs_firstSent_label_cosSimBERT_abstract_scoreBERT_abstract_firstSent_scorecomplex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
\n", - "

0 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: [node2, node1, relation, node1;label, node2;label, relation;label, relation;dimension, source, sentence, node1_compl_emb, node2_compl_emb, node1_transe_emb, node2_transe_emb, abstract, abstract_firstSent, BERT_abstract_emb, BERT_abstract_firstSent_emb, abstract_right, abstract_firstSent_right, BERT_abstract_emb_right, BERT_abstract_firstSent_emb_right, value, value_right, node1;label_temp, node2;label_temp, node1;label_emb, node2;label_emb, BERT_abs_label_emb, BERT_abs_label_emb_right, BERT_abs_label_cosSim, BERT_abstract_cosSim, BERT_abstract_firstSent_cosSim, complex_cosSim, transe_cosSim, textEmb_cosSim, dim, BERT_abs_firstSent_label_emb, BERT_abs_firstSent_label_emb_right, BERT_abs_firstSent_label_cosSim, BERT_abstract_score, BERT_abstract_firstSent_score, complex_score, transe_score, textEmb_score, BERT_abs_label_score, BERT_abs_firstSent_label_score]\n", - "Index: []\n", - "\n", - "[0 rows x 46 columns]" - ] - }, - "execution_count": 185, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1[(wikiDF_wabs1.dim == 'other') & (wikiDF_wabs1.complex_score != -1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 341, - "id": "revolutionary-benchmark", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "inheritance 72707\n", - "meronymy 6886\n", - "context 5541\n", - "distinctness 4934\n", - "utility 2243\n", - "antonymy 2184\n", - "ordering 2107\n", - "material 1426\n", - "synonymy 1070\n", - "properties 1049\n", - "derivation 540\n", - "causation 510\n", - "similarity 345\n", - "attribution 187\n", - "other 42\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 341, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.dim.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 342, - "id": "naughty-station", - "metadata": {}, - "outputs": [], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "cnts = []\n", - "for col in scoreCols:\n", - " cnts.append(wikiDF_wabs1[wikiDF_wabs1[col] > -1].groupby('dim')[col].agg('count'))\n", - "cnts = pd.concat(cnts, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 343, - "id": "missing-fighter", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy2131.02131.0215421842184
attribution181.0181.0181187187
causation494.0494.0481510510
context5409.05409.0541355415541
derivation537.0537.0524540540
distinctness4831.04831.0480749344934
inheritance70211.070211.0697937270772707
material1403.01403.0137214261426
meronymy6791.06791.0650468866886
ordering2105.02105.0210321072107
properties833.0833.0102610491049
similarity343.0343.0345345345
synonymy1033.01033.0103010701070
utility2193.02193.0218922432243
otherNaNNaN424242
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 2131.0 2131.0 2154 \n", - "attribution 181.0 181.0 181 \n", - "causation 494.0 494.0 481 \n", - "context 5409.0 5409.0 5413 \n", - "derivation 537.0 537.0 524 \n", - "distinctness 4831.0 4831.0 4807 \n", - "inheritance 70211.0 70211.0 69793 \n", - "material 1403.0 1403.0 1372 \n", - "meronymy 6791.0 6791.0 6504 \n", - "ordering 2105.0 2105.0 2103 \n", - "properties 833.0 833.0 1026 \n", - "similarity 343.0 343.0 345 \n", - "synonymy 1033.0 1033.0 1030 \n", - "utility 2193.0 2193.0 2189 \n", - "other NaN NaN 42 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 2184 2184 \n", - "attribution 187 187 \n", - "causation 510 510 \n", - "context 5541 5541 \n", - "derivation 540 540 \n", - "distinctness 4934 4934 \n", - "inheritance 72707 72707 \n", - "material 1426 1426 \n", - "meronymy 6886 6886 \n", - "ordering 2107 2107 \n", - "properties 1049 1049 \n", - "similarity 345 345 \n", - "synonymy 1070 1070 \n", - "utility 2243 2243 \n", - "other 42 42 " - ] - }, - "execution_count": 343, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts" - ] - }, - { - "cell_type": "code", - "execution_count": 344, - "id": "endless-globe", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "complex_score 98495.0\n", - "transe_score 98495.0\n", - "textEmb_score 97964.0\n", - "BERT_abs_label_score 101771.0\n", - "BERT_abs_firstSent_label_score 101771.0\n", - "dtype: float64" - ] - }, - "execution_count": 344, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 345, - "id": "perfect-eagle", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "complex_score 0.967810\n", - "transe_score 0.967810\n", - "textEmb_score 0.962592\n", - "BERT_abs_label_score 1.000000\n", - "BERT_abs_firstSent_label_score 1.000000\n", - "dtype: float64" - ] - }, - "execution_count": 345, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts.sum()/len(wikiDF_wabs1)" - ] - }, - { - "cell_type": "code", - "execution_count": 346, - "id": "apart-moisture", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy0.3273020.3660090.4344310.5002740.466038
attribution0.3640510.4178250.3220490.4764010.398419
causation0.3209660.3727310.3959190.5117070.480563
context0.3865230.4087210.4192790.5409790.504633
derivation0.3312560.3884910.3270870.4332890.425505
distinctness0.3703870.4208510.3737560.5260510.463646
inheritance0.4398420.4488560.3730360.5402270.494134
material0.4015280.4483090.3783520.5710340.543981
meronymy0.3530690.4082190.3967280.5405990.486378
ordering0.2011870.1815610.2791720.3601870.352700
properties0.3889600.3771570.4078050.5827260.523747
similarity0.3084850.3165690.3014110.5006540.435636
synonymy0.3526600.3394450.3324320.5325400.461569
utility0.3350690.3515180.3988080.5156610.476737
otherNaNNaN0.3341160.5816740.450678
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 0.327302 0.366009 0.434431 \n", - "attribution 0.364051 0.417825 0.322049 \n", - "causation 0.320966 0.372731 0.395919 \n", - "context 0.386523 0.408721 0.419279 \n", - "derivation 0.331256 0.388491 0.327087 \n", - "distinctness 0.370387 0.420851 0.373756 \n", - "inheritance 0.439842 0.448856 0.373036 \n", - "material 0.401528 0.448309 0.378352 \n", - "meronymy 0.353069 0.408219 0.396728 \n", - "ordering 0.201187 0.181561 0.279172 \n", - "properties 0.388960 0.377157 0.407805 \n", - "similarity 0.308485 0.316569 0.301411 \n", - "synonymy 0.352660 0.339445 0.332432 \n", - "utility 0.335069 0.351518 0.398808 \n", - "other NaN NaN 0.334116 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 0.500274 0.466038 \n", - "attribution 0.476401 0.398419 \n", - "causation 0.511707 0.480563 \n", - "context 0.540979 0.504633 \n", - "derivation 0.433289 0.425505 \n", - "distinctness 0.526051 0.463646 \n", - "inheritance 0.540227 0.494134 \n", - "material 0.571034 0.543981 \n", - "meronymy 0.540599 0.486378 \n", - "ordering 0.360187 0.352700 \n", - "properties 0.582726 0.523747 \n", - "similarity 0.500654 0.435636 \n", - "synonymy 0.532540 0.461569 \n", - "utility 0.515661 0.476737 \n", - "other 0.581674 0.450678 " - ] - }, - "execution_count": 346, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "summsStd = []\n", - "for col in scoreCols:\n", - " summsStd.append(wikiDF_wabs1[(wikiDF_wabs1[col] > -1) & ~(wikiDF_wabs1[col].isna())].groupby('dim')[col].agg('std'))\n", - "summsStd = pd.concat(summsStd, axis=1)\n", - "summsStd" - ] - }, - { - "cell_type": "code", - "execution_count": 347, - "id": "italic-rehabilitation", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy1.4723071.5527081.8901031.9282491.961361
attribution2.0584122.3690821.7952902.0030341.864052
causation1.8781912.0748401.8949132.0588352.034320
context2.1989492.2870101.9258192.1429382.086860
derivation2.1012362.2361872.1171772.0804772.041239
distinctness1.7621271.6893481.7428841.9610341.892194
inheritance2.0523641.9248571.8025732.1410922.098482
material2.1815082.1789091.9860602.1178152.062357
meronymy1.9335471.8896991.8522772.0423961.989395
ordering1.2447151.1614491.3374451.3190641.322444
properties1.9885572.1725642.0175392.1936532.095989
similarity1.7915891.8972461.5542732.0254971.945071
synonymy1.7699291.6961031.6780281.9988861.880054
utility1.9270942.1322641.9186172.0806652.037705
otherNaNNaN1.7738982.1347661.918897
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 1.472307 1.552708 1.890103 \n", - "attribution 2.058412 2.369082 1.795290 \n", - "causation 1.878191 2.074840 1.894913 \n", - "context 2.198949 2.287010 1.925819 \n", - "derivation 2.101236 2.236187 2.117177 \n", - "distinctness 1.762127 1.689348 1.742884 \n", - "inheritance 2.052364 1.924857 1.802573 \n", - "material 2.181508 2.178909 1.986060 \n", - "meronymy 1.933547 1.889699 1.852277 \n", - "ordering 1.244715 1.161449 1.337445 \n", - "properties 1.988557 2.172564 2.017539 \n", - "similarity 1.791589 1.897246 1.554273 \n", - "synonymy 1.769929 1.696103 1.678028 \n", - "utility 1.927094 2.132264 1.918617 \n", - "other NaN NaN 1.773898 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 1.928249 1.961361 \n", - "attribution 2.003034 1.864052 \n", - "causation 2.058835 2.034320 \n", - "context 2.142938 2.086860 \n", - "derivation 2.080477 2.041239 \n", - "distinctness 1.961034 1.892194 \n", - "inheritance 2.141092 2.098482 \n", - "material 2.117815 2.062357 \n", - "meronymy 2.042396 1.989395 \n", - "ordering 1.319064 1.322444 \n", - "properties 2.193653 2.095989 \n", - "similarity 2.025497 1.945071 \n", - "synonymy 1.998886 1.880054 \n", - "utility 2.080665 2.037705 \n", - "other 2.134766 1.918897 " - ] - }, - "execution_count": 347, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "summs = []\n", - "for col in scoreCols:\n", - " summs.append(wikiDF_wabs1[(wikiDF_wabs1[col] > -1) & ~(wikiDF_wabs1[col].isna())].groupby('dim')[col].agg('mean'))\n", - "summs = pd.concat(summs, axis=1)\n", - "summs" - ] - }, - { - "cell_type": "code", - "execution_count": 348, - "id": "abandoned-armor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dim\n", - "ordering 1.277024\n", - "antonymy 1.760945\n", - "synonymy 1.804600\n", - "distinctness 1.809517\n", - "similarity 1.842735\n", - "meronymy 1.941463\n", - "other 1.942520\n", - "causation 1.988220\n", - "inheritance 2.003874\n", - "attribution 2.017974\n", - "utility 2.019269\n", - "properties 2.093660\n", - "material 2.105330\n", - "derivation 2.115263\n", - "context 2.128315\n", - "dtype: float64" - ] - }, - "execution_count": 348, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summs.apply(lambda p: np.mean(list(filter(lambda y12: y12 != -1, [p[x] if not(pd.isna(p[x])) else -1 for x in scoreCols]))), axis=1).sort_values()" - ] - }, - { - "cell_type": "code", - "execution_count": 349, - "id": "accurate-faculty", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy12345
attribution45132
causation15243
context45132
derivation35421
distinctness31254
inheritance32154
material54132
meronymy32154
ordering21534
properties14253
similarity23154
synonymy32154
utility25143
other45132
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 1 2 3 \n", - "attribution 4 5 1 \n", - "causation 1 5 2 \n", - "context 4 5 1 \n", - "derivation 3 5 4 \n", - "distinctness 3 1 2 \n", - "inheritance 3 2 1 \n", - "material 5 4 1 \n", - "meronymy 3 2 1 \n", - "ordering 2 1 5 \n", - "properties 1 4 2 \n", - "similarity 2 3 1 \n", - "synonymy 3 2 1 \n", - "utility 2 5 1 \n", - "other 4 5 1 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 4 5 \n", - "attribution 3 2 \n", - "causation 4 3 \n", - "context 3 2 \n", - "derivation 2 1 \n", - "distinctness 5 4 \n", - "inheritance 5 4 \n", - "material 3 2 \n", - "meronymy 5 4 \n", - "ordering 3 4 \n", - "properties 5 3 \n", - "similarity 5 4 \n", - "synonymy 5 4 \n", - "utility 4 3 \n", - "other 3 2 " - ] - }, - "execution_count": 349, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def rankAlgosRowWise(row):\n", - " return (np.array([row[col] for col in scoreCols])).argsort().argsort() + 1\n", - "pd.DataFrame(summs.apply(rankAlgosRowWise, axis=1).to_list(), columns=scoreCols, index=summs.index)" - ] - }, - { - "cell_type": "code", - "execution_count": 352, - "id": "substantial-seven", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 352, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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bpPDsuF1JFInicM6k+hcRKLTsVgiD5rm0+TMAWyfMip0NImBRG6CgQ8M5vWnZzJn2uzQcSQm2rdrC0CbVi3p06snCxcvVSdLAKjcVM7mWQtp0buHOlkSG3HoZFXthOy6X76P28oBNrh70R7a1Ga7e9yGu18RVbbOAN40s2+7+7p9yCqStXbMmMiOGRMByOnYhbzjT1cHSz7X//arWLPsQ557eEroKBITW7ZW4MkkBQXN2LK1gllvzOHK/j8NHUsCym3dHN9ZSeWmciy/Cc1PLuKfI6r97ltiSKMLZsYRZnaiu/8d+CnwKqlzpnZ5A7jHzNqSOlzwAuDeaFkOcC7w+K513X2Tma0ws/Pc/cnofK5j3X1+NfveDDSvOnNv2zCzTu4+G5htZt8HOgLqZO3Fo4/czym9TqRt29a8v7yUm4beSckYDbMqIrvrXNyVnuecwqolK7lx6jAAJt3xGAunzw2cTEJat76Mq6+7GYDKnZX069ubk04oDpxKQspr34qj7r4aEjmYGeunvMbGF0tDxxL5XBw6WUuBgdH5WIuBkaQGoQDA3deY2W+Bl/li4Is/R4vLgePN7HfAJ8CPo/k/A0ZG8/NIdcKq62Q9C0w0s7PT91nDNoaZWecoy4t72K6kufCigaEjSIwlVy1l26qloWNITLxb+jaXFZ4bOobETMfDOjB57IjQMSRGti5ZyeLTrw0dQ/ZRyFH/MiUOnayd7n5hlXmF6XfcfTwwvrqV3X23vzB3XwGcXs38S6vcfwc4Nm3WzFps40fV5RAREREREYF4dLJERERERCRLNP46VuBOlru/D3xzP9Y/qP7SiIiIiIiI7D9VskREREREJGOyYXTBnNABREREREREGhN1skREREREROqRDhcUEREREZGM8SwY+kKVLBERERERkXqkSpaIiIiIiGSMBr4QERERERGROlElS0REREREMiapc7JERERERESkLlTJamAXH3pi6AgSQ4vvLQsdQWJo3Cf/CB1BYmbcoSezdfXM0DEkZroNahU6gsh+afx1LFWyREREYksdLBGRA5MqWSIiIiIikjE6J0tERERERETqRJUsERERERHJGF0nS0REREREROpElSwREREREckY1zlZIiIiIiIijZOZdTSzl81ssZktMrOrq2ljZnaPmS0zswVm9q2atqtKloiIiIiIZEzMzsnaCfyHu88x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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = pyplot.subplots(figsize=(15,10))\n", - "sns.heatmap(pd.DataFrame(summs.apply(rankAlgosRowWise, axis=1).to_list(), columns=scoreCols, index=summs.index), annot=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 353, - "id": "spatial-wrist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy22927
attribution1114652
causation681089
context1413121413
derivation121215911
distinctness33434
inheritance10771315
material1311131112
meronymy85878
ordering11111
properties910141514
similarity56266
synonymy44343
utility79111010
other15155125
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 2 2 9 \n", - "attribution 11 14 6 \n", - "causation 6 8 10 \n", - "context 14 13 12 \n", - "derivation 12 12 15 \n", - "distinctness 3 3 4 \n", - "inheritance 10 7 7 \n", - "material 13 11 13 \n", - "meronymy 8 5 8 \n", - "ordering 1 1 1 \n", - "properties 9 10 14 \n", - "similarity 5 6 2 \n", - "synonymy 4 4 3 \n", - "utility 7 9 11 \n", - "other 15 15 5 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 2 7 \n", - "attribution 5 2 \n", - "causation 8 9 \n", - "context 14 13 \n", - "derivation 9 11 \n", - "distinctness 3 4 \n", - "inheritance 13 15 \n", - "material 11 12 \n", - "meronymy 7 8 \n", - "ordering 1 1 \n", - "properties 15 14 \n", - "similarity 6 6 \n", - "synonymy 4 3 \n", - "utility 10 10 \n", - "other 12 5 " - ] - }, - "execution_count": 353, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def rankAlgosColWise(colVals):\n", - " return pd.Series(((np.array([colVals.to_list()])).argsort().argsort() + 1)[0], index=summs.index, name=colVals.name)\n", - "pd.concat([rankAlgosColWise(summs[col]) for col in scoreCols], axis=1).head(15)" - ] - }, - { - "cell_type": "code", - "execution_count": 354, - "id": "confused-miami", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 354, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = pyplot.subplots(figsize=(15,10))\n", - "sns.heatmap(pd.concat([rankAlgosColWise(summs[col]) for col in scoreCols], axis=1).head(15), annot=True)" - ] - }, - { - "cell_type": "markdown", - "id": "rocky-power", - "metadata": {}, - "source": [ - "# Examples" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "id": "alive-surprise", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "properties\n", - " node1;label node2;label\n", - "0 temple quantity\n", - "1 tram quantity\n", - "2 number of objects quantity\n", - "4 award ceremony facet of\n", - "5 geography of geographic location facet of\n", - "other\n", - " node1;label node2;label\n", - "3 student organization of represents\n", - "20 name nickname\n", - "25 mission statement motto text\n", - "42 house organ official blog\n", - "44 defender prosecutor\n", - "inheritance\n", - " node1;label node2;label\n", - "69 nickname name\n", - "214 geometric algebra algebra over a field\n", - "215 division algebra algebra over a field\n", - "217 operator algebra algebra over a field\n", - "219 alternative algebra algebra over a field\n", - "context\n", - " node1;label node2;label\n", - "216 mutation algebra over a field\n", - "228 filmmaker cinematic technique\n", - "254 film technician cinematic technique\n", - "264 periodical library periodical\n", - "393 web mechanical engineering\n", - "distinctness\n", - " node1;label node2;label\n", - "218 algebra over a ring algebra over a field\n", - "300 power series formal power series\n", - "311 testing test\n", - "315 test (assessment) test\n", - "338 lawn grassland\n", - "meronymy\n", - " node1;label node2;label\n", - "257 decomposition model geometric modeling\n", - "258 solid model geometric modeling\n", - "262 volume periodical\n", - "279 column periodical\n", - "281 issue periodical\n", - "antonymy\n", - " node1;label node2;label\n", - "260 non-periodical publication periodical\n", - "340 younger sister elder sister\n", - "341 elder brother elder sister\n", - "425 composite knot prime knot\n", - "526 prefix suffix\n", - "utility\n", - " node1;label node2;label\n", - "308 elevator test tower test\n", - "319 dummy load test\n", - "479 prototype experiment\n", - "591 running shoes indoor athletics\n", - "597 room and board boarding\n", - "attribution\n", - " node1;label node2;label\n", - "324 test result test\n", - "328 electronic circuit through-hole technology\n", - "1239 shotgun rifle factory\n", - "1644 image information information visualization\n", - "1985 furniture fabric tapestry stitch\n", - "derivation\n", - " node1;label node2;label\n", - "386 surrogate acronym\n", - "428 milestone milestone\n", - "435 fictional brown dwarf brown dwarf\n", - "582 rose rose\n", - "755 fictional cargo pants cargo pants\n", - "synonymy\n", - " node1;label node2;label\n", - "418 after-name family name\n", - "534 playwright stage author\n", - "539 knight knight\n", - "575 resort town seaside resort\n", - "608 mourning grief\n", - "material\n", - " node1;label node2;label\n", - "586 list of minor planets minor planet\n", - "676 list of educational years educational year\n", - "724 list of martial arts films martial arts film\n", - "828 fur collar fake fur\n", - "857 champagne cocktail sugar cube\n", - "causation\n", - " node1;label node2;label\n", - "606 loss grief\n", - "736 double beta decay beta particle\n", - "778 flight wake turbulence\n", - "1896 spice longevity\n", - "1961 brain cancer vertigo\n", - "ordering\n", - " node1;label node2;label\n", - "766 tomorrow day after tomorrow\n", - "896 group 15 group 16\n", - "1740 secondary source tertiary source\n", - "1965 construction permit groundbreaking\n", - "2065 kilo mega\n", - "similarity\n", - " node1;label node2;label\n", - "1039 expertise specialty\n", - "1040 skilled trade specialty\n", - "1224 multi-purpose hall multi-purpose stadium\n", - "1369 signature song one-hit wonder\n", - "1370 nine days\\' wonder one-hit wonder\n" - ] - } - ], - "source": [ - "for dim1 in wikiDF_wabs1.dim.unique():\n", - " print(dim1)\n", - " print(wikiDF_wabs1[wikiDF_wabs1.dim == dim1].head()[['node1;label', 'node2;label']])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "compact-right", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "vocal-convertible", - "metadata": {}, - "source": [ - "# Sampling" - ] - }, - { - "cell_type": "code", - "execution_count": 205, - "id": "laden-kentucky", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.utils.random import sample_without_replacement" - ] - }, - { - "cell_type": "code", - "execution_count": 246, - "id": "eastern-worth", - "metadata": {}, - "outputs": [], - "source": [ - "sample_wikiDF = wikiDF_wabs1.iloc[sample_without_replacement(len(wikiDF_wabs1), 100, random_state=1000)]" - ] - }, - { - "cell_type": "code", - "execution_count": 247, - "id": "junior-service", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['complex_score'] = sample_wikiDF['complex_cosSim'].apply(changeScale, args=(sample_wikiDF['complex_cosSim'].where(sample_wikiDF['complex_cosSim'] != -1).min(), sample_wikiDF['complex_cosSim'].max()))\n", - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['transe_score'] = sample_wikiDF['transe_cosSim'].apply(changeScale, args=(sample_wikiDF['transe_cosSim'].where(sample_wikiDF['transe_cosSim'] != -1).min(), sample_wikiDF['transe_cosSim'].max()))\n", - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['textEmb_score'] = sample_wikiDF['textEmb_cosSim'].apply(changeScale, args=(sample_wikiDF['textEmb_cosSim'].where(sample_wikiDF['textEmb_cosSim'] != -1).min(), sample_wikiDF['textEmb_cosSim'].max()))\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['BERT_abs_label_score'] = sample_wikiDF['BERT_abs_label_cosSim'].apply(changeScale, args=(sample_wikiDF['BERT_abs_label_cosSim'].where(sample_wikiDF['BERT_abs_label_cosSim'] != -1).min(), sample_wikiDF['BERT_abs_label_cosSim'].max()))\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['BERT_abs_firstSent_label_score'] = sample_wikiDF['BERT_abs_firstSent_label_cosSim'].apply(changeScale, args=(sample_wikiDF['BERT_abs_firstSent_label_cosSim'].where(sample_wikiDF['BERT_abs_firstSent_label_cosSim'] != -1).min(), sample_wikiDF['BERT_abs_firstSent_label_cosSim'].max()))\n" - ] - } - ], - "source": [ - "sample_wikiDF['complex_score'] = sample_wikiDF['complex_cosSim'].apply(changeScale, args=(sample_wikiDF['complex_cosSim'].where(sample_wikiDF['complex_cosSim'] != -1).min(), sample_wikiDF['complex_cosSim'].max()))\n", - "sample_wikiDF['transe_score'] = sample_wikiDF['transe_cosSim'].apply(changeScale, args=(sample_wikiDF['transe_cosSim'].where(sample_wikiDF['transe_cosSim'] != -1).min(), sample_wikiDF['transe_cosSim'].max()))\n", - "sample_wikiDF['textEmb_score'] = sample_wikiDF['textEmb_cosSim'].apply(changeScale, args=(sample_wikiDF['textEmb_cosSim'].where(sample_wikiDF['textEmb_cosSim'] != -1).min(), sample_wikiDF['textEmb_cosSim'].max()))\n", - "sample_wikiDF['BERT_abs_label_score'] = sample_wikiDF['BERT_abs_label_cosSim'].apply(changeScale, args=(sample_wikiDF['BERT_abs_label_cosSim'].where(sample_wikiDF['BERT_abs_label_cosSim'] != -1).min(), sample_wikiDF['BERT_abs_label_cosSim'].max()))\n", - "sample_wikiDF['BERT_abs_firstSent_label_score'] = sample_wikiDF['BERT_abs_firstSent_label_cosSim'].apply(changeScale, args=(sample_wikiDF['BERT_abs_firstSent_label_cosSim'].where(sample_wikiDF['BERT_abs_firstSent_label_cosSim'] != -1).min(), sample_wikiDF['BERT_abs_firstSent_label_cosSim'].max()))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 248, - "id": "musical-penny", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
count100.000000100.000000100.000000100.000000100.000000
mean2.3737342.4676292.1713932.1625352.348227
std0.8972400.9429420.7279550.5941870.658818
min-1.000000-1.000000-1.0000001.0000001.000000
25%1.9267722.0815561.7115011.7883401.874007
50%2.4577552.5812062.0427452.1616762.360556
75%2.8723363.1026542.5994252.5394332.828806
max4.0000004.0000004.0000004.0000004.000000
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score BERT_abs_label_score \\\n", - "count 100.000000 100.000000 100.000000 100.000000 \n", - "mean 2.373734 2.467629 2.171393 2.162535 \n", - "std 0.897240 0.942942 0.727955 0.594187 \n", - "min -1.000000 -1.000000 -1.000000 1.000000 \n", - "25% 1.926772 2.081556 1.711501 1.788340 \n", - "50% 2.457755 2.581206 2.042745 2.161676 \n", - "75% 2.872336 3.102654 2.599425 2.539433 \n", - "max 4.000000 4.000000 4.000000 4.000000 \n", - "\n", - " BERT_abs_firstSent_label_score \n", - "count 100.000000 \n", - "mean 2.348227 \n", - "std 0.658818 \n", - "min 1.000000 \n", - "25% 1.874007 \n", - "50% 2.360556 \n", - "75% 2.828806 \n", - "max 4.000000 " - ] - }, - "execution_count": 248, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "sample_wikiDF[scoreCols].describe()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 249, - "id": "guilty-berkeley", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "inheritance 75\n", - "context 6\n", - "meronymy 5\n", - "distinctness 4\n", - "utility 3\n", - "antonymy 2\n", - "synonymy 1\n", - "causation 1\n", - "ordering 1\n", - "material 1\n", - "properties 1\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 249, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sample_wikiDF.dim.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "id": "funded-geology", - "metadata": {}, - "outputs": [], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "cnts = []\n", - "for col in scoreCols:\n", - " cnts.append(sample_wikiDF[sample_wikiDF[col] > -1].groupby('dim')[col].agg('count'))\n", - "cnts = pd.concat(cnts, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 251, - "id": "threaded-writer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy22222
causation11111
context66666
distinctness33344
inheritance7474757575
material11111
meronymy44555
ordering11111
properties11111
synonymy11111
utility33333
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 2 2 2 \n", - "causation 1 1 1 \n", - "context 6 6 6 \n", - "distinctness 3 3 3 \n", - "inheritance 74 74 75 \n", - "material 1 1 1 \n", - "meronymy 4 4 5 \n", - "ordering 1 1 1 \n", - "properties 1 1 1 \n", - "synonymy 1 1 1 \n", - "utility 3 3 3 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 2 2 \n", - "causation 1 1 \n", - "context 6 6 \n", - "distinctness 4 4 \n", - "inheritance 75 75 \n", - "material 1 1 \n", - "meronymy 5 5 \n", - "ordering 1 1 \n", - "properties 1 1 \n", - "synonymy 1 1 \n", - "utility 3 3 " - ] - }, - "execution_count": 251, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts" - ] - }, - { - "cell_type": "code", - "execution_count": 252, - "id": "weird-employer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "complex_score 97\n", - "transe_score 97\n", - "textEmb_score 99\n", - "BERT_abs_label_score 100\n", - "BERT_abs_firstSent_label_score 100\n", - "dtype: int64" - ] - }, - "execution_count": 252, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 253, - "id": "excellent-principal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "complex_score 0.97\n", - "transe_score 0.97\n", - "textEmb_score 0.99\n", - "BERT_abs_label_score 1.00\n", - "BERT_abs_firstSent_label_score 1.00\n", - "dtype: float64" - ] - }, - "execution_count": 253, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts.sum()/len(sample_wikiDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 254, - "id": "available-example", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy0.6642000.0784571.8082021.2475411.091346
causationNaNNaNNaNNaNNaN
context0.6086260.6657371.0145460.7136130.737005
distinctness0.4780500.8324490.2475070.6620650.737140
inheritance0.6771630.7178810.5919210.5584810.625973
materialNaNNaNNaNNaNNaN
meronymy0.3096350.4965490.4693270.5419850.448966
orderingNaNNaNNaNNaNNaN
propertiesNaNNaNNaNNaNNaN
synonymyNaNNaNNaNNaNNaN
utility0.5165120.4973440.4894400.8091660.995372
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 0.664200 0.078457 1.808202 \n", - "causation NaN NaN NaN \n", - "context 0.608626 0.665737 1.014546 \n", - "distinctness 0.478050 0.832449 0.247507 \n", - "inheritance 0.677163 0.717881 0.591921 \n", - "material NaN NaN NaN \n", - "meronymy 0.309635 0.496549 0.469327 \n", - "ordering NaN NaN NaN \n", - "properties NaN NaN NaN \n", - "synonymy NaN NaN NaN \n", - "utility 0.516512 0.497344 0.489440 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 1.247541 1.091346 \n", - "causation NaN NaN \n", - "context 0.713613 0.737005 \n", - "distinctness 0.662065 0.737140 \n", - "inheritance 0.558481 0.625973 \n", - "material NaN NaN \n", - "meronymy 0.541985 0.448966 \n", - "ordering NaN NaN \n", - "properties NaN NaN \n", - "synonymy NaN NaN \n", - "utility 0.809166 0.995372 " - ] - }, - "execution_count": 254, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "summsStd = []\n", - "for col in scoreCols:\n", - " summsStd.append(sample_wikiDF[(sample_wikiDF[col] > -1) & ~(sample_wikiDF[col].isna())].groupby('dim')[col].agg('std'))\n", - "summsStd = pd.concat(summsStd, axis=1)\n", - "summsStd" - ] - }, - { - "cell_type": "code", - "execution_count": 255, - "id": "bulgarian-essence", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy1.6412621.6354092.5354062.5251132.550744
causation2.8036282.0304272.7692432.0618842.102512
context2.7333422.8962652.4902452.6572542.815580
distinctness1.5321771.7461231.4372662.1878601.958226
inheritance2.5644392.5980652.1906342.1107642.324834
material2.5012232.9500433.0335502.9702783.233506
meronymy2.3448572.8527952.1020231.7427551.817167
ordering1.5319411.4962601.0844692.6129512.893667
properties2.1187383.1758303.4865572.2361752.988376
synonymy1.5245021.5433962.0304042.1991882.016465
utility2.1554383.0040602.2011332.4689392.770659
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 1.641262 1.635409 2.535406 \n", - "causation 2.803628 2.030427 2.769243 \n", - "context 2.733342 2.896265 2.490245 \n", - "distinctness 1.532177 1.746123 1.437266 \n", - "inheritance 2.564439 2.598065 2.190634 \n", - "material 2.501223 2.950043 3.033550 \n", - "meronymy 2.344857 2.852795 2.102023 \n", - "ordering 1.531941 1.496260 1.084469 \n", - "properties 2.118738 3.175830 3.486557 \n", - "synonymy 1.524502 1.543396 2.030404 \n", - "utility 2.155438 3.004060 2.201133 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 2.525113 2.550744 \n", - "causation 2.061884 2.102512 \n", - "context 2.657254 2.815580 \n", - "distinctness 2.187860 1.958226 \n", - "inheritance 2.110764 2.324834 \n", - "material 2.970278 3.233506 \n", - "meronymy 1.742755 1.817167 \n", - "ordering 2.612951 2.893667 \n", - "properties 2.236175 2.988376 \n", - "synonymy 2.199188 2.016465 \n", - "utility 2.468939 2.770659 " - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "summs = []\n", - "for col in scoreCols:\n", - " summs.append(sample_wikiDF[(sample_wikiDF[col] > -1) & ~(sample_wikiDF[col].isna())].groupby('dim')[col].agg('mean'))\n", - "summs = pd.concat(summs, axis=1)\n", - "summs" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "id": "elegant-statement", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dim\n", - "distinctness 1.772331\n", - "synonymy 1.862791\n", - "ordering 1.923858\n", - "meronymy 2.171920\n", - "antonymy 2.177587\n", - "causation 2.353539\n", - "inheritance 2.357747\n", - "utility 2.520046\n", - "context 2.718537\n", - "properties 2.801135\n", - "material 2.937720\n", - "dtype: float64" - ] - }, - "execution_count": 256, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summs.apply(lambda p: np.mean(list(filter(lambda y12: y12 != -1, [p[x] if not(pd.isna(p[x])) else -1 for x in scoreCols]))), axis=1).sort_values()" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "id": "equal-headset", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy21435
causation51423
context35124
distinctness23154
inheritance45213
material12435
meronymy45312
ordering32145
properties14523
synonymy12453
utility15234
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 2 1 4 \n", - "causation 5 1 4 \n", - "context 3 5 1 \n", - "distinctness 2 3 1 \n", - "inheritance 4 5 2 \n", - "material 1 2 4 \n", - "meronymy 4 5 3 \n", - "ordering 3 2 1 \n", - "properties 1 4 5 \n", - "synonymy 1 2 4 \n", - "utility 1 5 2 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 3 5 \n", - "causation 2 3 \n", - "context 2 4 \n", - "distinctness 5 4 \n", - "inheritance 1 3 \n", - "material 3 5 \n", - "meronymy 1 2 \n", - "ordering 4 5 \n", - "properties 2 3 \n", - "synonymy 5 3 \n", - "utility 3 4 " - ] - }, - "execution_count": 257, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def rankAlgosRowWise(row):\n", - " return (np.array([row[col] for col in scoreCols])).argsort().argsort() + 1\n", - "pd.DataFrame(summs.apply(rankAlgosRowWise, axis=1).to_list(), columns=scoreCols, index=summs.index)" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "id": "funky-acting", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy43886
causation115924
context1087108
distinctness34242
inheritance96535
material89101111
meronymy77411
ordering21199
properties51111610
synonymy12353
utility610677
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 4 3 8 \n", - "causation 11 5 9 \n", - "context 10 8 7 \n", - "distinctness 3 4 2 \n", - "inheritance 9 6 5 \n", - "material 8 9 10 \n", - "meronymy 7 7 4 \n", - "ordering 2 1 1 \n", - "properties 5 11 11 \n", - "synonymy 1 2 3 \n", - "utility 6 10 6 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 8 6 \n", - "causation 2 4 \n", - "context 10 8 \n", - "distinctness 4 2 \n", - "inheritance 3 5 \n", - "material 11 11 \n", - "meronymy 1 1 \n", - "ordering 9 9 \n", - "properties 6 10 \n", - "synonymy 5 3 \n", - "utility 7 7 " - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def rankAlgosColWise(colVals):\n", - " return pd.Series(((np.array([colVals.to_list()])).argsort().argsort() + 1)[0], index=summs.index, name=colVals.name)\n", - "pd.concat([rankAlgosColWise(summs[col]) for col in scoreCols], axis=1).head(15)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "filled-bridge", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "armed-incidence", - "metadata": {}, - "source": [ - "# Retrofitting" - ] - }, - { - "cell_type": "code", - "execution_count": 293, - "id": "satisfied-china", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn.metrics.pairwise import euclidean_distances\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.metrics import confusion_matrix\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from tqdm.notebook import tqdm\n", - "from itertools import combinations\n", - "from math import comb\n", - "from sklearn.ensemble import RandomForestClassifier\n", - "\n", - "def normalizeTargetScores(val1, minVal, maxVal):\n", - " return (val1 - minVal) / (maxVal - minVal) if val1 != -1 else -1\n", - "\n", - "def normalize(embedDict):\n", - " for key, val in embedDict.items():\n", - " temp = np.array([float(val1) for val1 in val])\n", - " temp2 = temp**2\n", - " embedDict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - " return embedDict\n", - "\n", - "def fetchEmbeddings(df):\n", - " embedDict = {}\n", - " for _, row in df.iterrows():\n", - " embedDict[row.node] = row.value\n", - " return normalize(embedDict)\n", - "\n", - "def standardizeDataset(df, targetCol, val1):\n", - "# df1 = df[df[targetCol] > -1]\n", - " df1 = df.copy()\n", - " df1['bert2SentSim'] = val1\n", - "# df1['bert2SentSim'] = df1[targetCol].apply(normalizeTargetScores, args=(df1[targetCol].where(df1[targetCol] != -1).min(), df1[targetCol].max()))\n", - "# print(df1[targetCol].describe())\n", - "# print(df1[targetCol+'_norm'].describe())\n", - " return df1\n", - "\n", - "def fetchNeighbours(df):\n", - " \n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row['bert2SentSim']))\n", - " \n", - " if row.node2 not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row['bert2SentSim']))\n", - " print(max([len(neigh) for neigh in neighboursDict.values()]))\n", - " return neighboursDict\n", - "\n", - "def retrofit(embedDict, neighDict, weightCase):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - "# assert len(neighbs) == 1\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " if weightCase == 1:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sumOfEmbs) / ((len(neighbs)) + sumOfSims)\n", - " elif weightCase == 2:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " elif weightCase == 0.5:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sumOfEmbs) / ((len(neighbs))**0.5 + sumOfSims)\n", - " else:\n", - " raise\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict\n", - "\n", - "def determineDistances(embedDict, newEmbedDict):\n", - " dist = []\n", - " for word in embedDict.keys():\n", - " dist.append(euclidean_distances([embedDict[word]], [newEmbedDict[word]])[0][0])\n", - " return dist" - ] - }, - { - "cell_type": "code", - "execution_count": 312, - "id": "enhanced-journalist", - "metadata": {}, - "outputs": [], - "source": [ - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - "\n", - "LABELS = ['I','U','M']\n", - "\n", - "def fetchCorrelationResults(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')\n", - " print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - " wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - " wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - "# wordSimMissingSet\n", - " print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n", - " print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - " print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - " print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " \n", - " print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " \n", - " cm_old = confusion_matrix(wordSim353AnnotDF_New2['category'], wordSim353AnnotDF_New2['textOld'].apply(labelSamples), labels=LABELS)\n", - " cm_new = confusion_matrix(wordSim353AnnotDF_New2['category'], wordSim353AnnotDF_New2['textNew'].apply(labelSamples), labels=LABELS)\n", - " \n", - " return wordSimMissingSet, cm_old, cm_new, accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category']), accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])" - ] - }, - { - "cell_type": "code", - "execution_count": 297, - "id": "dried-subcommittee", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 297, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "transeEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')\n", - "transeEmbeddingsDF['transe_embedding'] = transeEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "transeEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 298, - "id": "italic-stations", - "metadata": {}, - "outputs": [], - "source": [ - "transeEmbeddings = {}\n", - "for _, row in transeEmbeddingsDF.iterrows():\n", - " transeEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 264, - "id": "imperial-baptist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abs_firstSent_label_embBERT_abs_firstSent_label_emb_rightBERT_abs_firstSent_label_cosSimBERT_abstract_scoreBERT_abstract_firstSent_scorecomplex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[0.6187984943389893, 1.4799031019210815, 0.515...[-0.21400201320648193, -0.1853264421224594, 2....0.111954-1.0-1.0-1.0-1.02.5334563.4591053.219849
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.1387496143579483, -1.0609047412872314, -0....[-0.21400196850299835, -0.1853266954421997, 2....0.066402-1.0-1.0-1.0-1.02.6237713.4305623.333714
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......[0.6716414093971252, -0.08505986630916595, 1.6...[-0.21400196850299835, -0.1853266954421997, 2....0.701743-1.0-1.0-1.0-1.02.4834661.7460961.745552
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...[0.11234442889690399, -0.34427452087402344, 1....[0.1607293337583542, -0.1969822645187378, 2.40...0.546000-1.0-1.0-1.0-1.02.0847812.1356932.134864
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......[-0.02503090538084507, 0.4087623953819275, 1.9...[-0.03644487261772156, -0.5494412183761597, 2....0.372485-1.0-1.0-1.0-1.02.4097783.3338352.568600
\n", - "

5 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " BERT_abs_firstSent_label_emb \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... \n", - "2 [0.6716414093971252, -0.08505986630916595, 1.6... \n", - "3 [0.11234442889690399, -0.34427452087402344, 1.... \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... \n", - "\n", - " BERT_abs_firstSent_label_emb_right \\\n", - "0 [-0.21400201320648193, -0.1853264421224594, 2.... \n", - "1 [-0.21400196850299835, -0.1853266954421997, 2.... \n", - "2 [-0.21400196850299835, -0.1853266954421997, 2.... \n", - "3 [0.1607293337583542, -0.1969822645187378, 2.40... \n", - "4 [-0.03644487261772156, -0.5494412183761597, 2.... \n", - "\n", - " BERT_abs_firstSent_label_cosSim BERT_abstract_score \\\n", - "0 0.111954 -1.0 \n", - "1 0.066402 -1.0 \n", - "2 0.701743 -1.0 \n", - "3 0.546000 -1.0 \n", - "4 0.372485 -1.0 \n", - "\n", - " BERT_abstract_firstSent_score complex_score transe_score textEmb_score \\\n", - "0 -1.0 -1.0 -1.0 2.533456 \n", - "1 -1.0 -1.0 -1.0 2.623771 \n", - "2 -1.0 -1.0 -1.0 2.483466 \n", - "3 -1.0 -1.0 -1.0 2.084781 \n", - "4 -1.0 -1.0 -1.0 2.409778 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "0 3.459105 3.219849 \n", - "1 3.430562 3.333714 \n", - "2 1.746096 1.745552 \n", - "3 2.135693 2.134864 \n", - "4 3.333835 2.568600 \n", - "\n", - "[5 rows x 46 columns]" - ] - }, - "execution_count": 264, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 279, - "id": "mexican-dispatch", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 2.000000\n", - "mean -0.031714\n", - "std 0.002003\n", - "min -0.033131\n", - "25% -0.032423\n", - "50% -0.031714\n", - "75% -0.031006\n", - "max -0.030298\n", - "Name: complex_cosSim, dtype: float64\n", - "count 12.000000\n", - "mean -0.063752\n", - "std 0.041979\n", - "min -0.137044\n", - "25% -0.093370\n", - "50% -0.051462\n", - "75% -0.039529\n", - "max -0.009669\n", - "Name: transe_cosSim, dtype: float64\n", - "count 0.0\n", - "mean NaN\n", - "std NaN\n", - "min NaN\n", - "25% NaN\n", - "50% NaN\n", - "75% NaN\n", - "max NaN\n", - "Name: textEmb_cosSim, dtype: float64\n", - "count 313.000000\n", - "mean -0.041530\n", - "std 0.036422\n", - "min -0.181201\n", - "25% -0.059406\n", - "50% -0.031702\n", - "75% -0.013665\n", - "max -0.000024\n", - "Name: BERT_abs_label_cosSim, dtype: float64\n", - "count 79.000000\n", - "mean -0.035752\n", - "std 0.029876\n", - "min -0.122427\n", - "25% -0.054458\n", - "50% -0.026226\n", - "75% -0.009441\n", - "max -0.000182\n", - "Name: BERT_abs_firstSent_label_cosSim, dtype: float64\n" - ] - } - ], - "source": [ - "cosSimCols = ['complex_cosSim', 'transe_cosSim', 'textEmb_cosSim', 'BERT_abs_label_cosSim', 'BERT_abs_firstSent_label_cosSim']\n", - "repelDims = {'other', 'meronymy', 'context', 'material', 'properties', 'utility'}\n", - "for col1 in cosSimCols:\n", - "# print((wikiDF_wabs1[col1] == -1).sum())\n", - " print(wikiDF_wabs1[(wikiDF_wabs1[col1] > -1) & (wikiDF_wabs1[col1] < 0) & (wikiDF_wabs1.dim.apply(lambda p: p not in repelDims))][col1].describe())" - ] - }, - { - "cell_type": "code", - "execution_count": 292, - "id": "talented-indie", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmbAndCosSim.csv\")\n", - "p279Seeded_SiblingsDF3_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmbAndCosSim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 334, - "id": "expensive-warner", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n", - "374\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 7.504525e-03\n", - "std 4.784244e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 0.000000e+00\n", - "75% 1.490116e-08\n", - "max 4.424263e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24716970867633406, pvalue=7.762158676245256e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22502397615435152, pvalue=5.730424928972872e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6034985422740525\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 1.910100e+04\n", - "mean 6.937777e-03\n", - "std 4.561719e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 0.000000e+00\n", - "75% 1.490116e-08\n", - "max 4.424263e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24843225530937377, pvalue=6.217152652954295e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22380720194731576, pvalue=7.083559265864719e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "374\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 2.274155e-04\n", - "std 1.449770e-03\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 0.000000e+00\n", - "75% 1.490116e-08\n", - "max 1.340686e-02\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2507469034952738, pvalue=4.1314425443641745e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22557152137805614, pvalue=5.206423573456538e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 1.910100e+04\n", - "mean 2.120965e-04\n", - "std 1.386917e-03\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 0.000000e+00\n", - "75% 1.490116e-08\n", - "max 1.340686e-02\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2510476149348689, pvalue=3.912200370865155e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2257539655761838, pvalue=5.037446475691195e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.332525\n", - "std 0.085513\n", - "min 0.000000\n", - "25% 0.269043\n", - "50% 0.327801\n", - "75% 0.393660\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.23983260775448598, pvalue=2.752926819013835e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21456745507793118, pvalue=3.4267954366117823e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 19101.000000\n", - "mean 0.242979\n", - "std 0.150562\n", - "min 0.000000\n", - "25% 0.094960\n", - "50% 0.237342\n", - "75% 0.378069\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.244711271374783, pvalue=1.194655795369227e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22603182014110224, pvalue=4.814978154680426e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.60932944606414\n", - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.329680\n", - "std 0.085445\n", - "min 0.000000\n", - "25% 0.266447\n", - "50% 0.323794\n", - "75% 0.390543\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24010565224095312, pvalue=2.6288081698945844e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21420995798618558, pvalue=3.6387685007723226e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6530612244897959\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 19101.000000\n", - "mean 0.238297\n", - "std 0.149913\n", - "min 0.000000\n", - "25% 0.093200\n", - "50% 0.228559\n", - "75% 0.374263\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.244711271374783, pvalue=1.194655795369227e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22445752023550897, pvalue=6.343021648612184e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6064139941690962\n", - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.329605\n", - "std 0.085511\n", - "min 0.000000\n", - "25% 0.266179\n", - "50% 0.323686\n", - "75% 0.390543\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.23974431943095922, pvalue=2.7955198144322416e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21383352064488867, pvalue=3.87455333255265e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6530612244897959\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 19101.000000\n", - "mean 0.238361\n", - "std 0.149862\n", - "min 0.000000\n", - "25% 0.093316\n", - "50% 0.228559\n", - "75% 0.374263\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24453059264517965, pvalue=1.2326605897936912e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2245944158794736, pvalue=6.193255676859552e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6064139941690962\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - } - ], - "source": [ - "results1 = []\n", - "confusionMatrixMaster = {}\n", - "embedDictMaster = {}\n", - "newEmbedDictMaster = {}\n", - "\n", - "\n", - "embedDict = normalize(transeEmbeddings)\n", - "embedDictMaster['transe_19k'] = embedDict\n", - "\n", - "# Version 1: 0.25 for 6 dims of Wiki CS\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - " wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, -0.25)\n", - " neighDict = fetchNeighbours(wikiCSDF)\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['wikiCS_0.25_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, 'wikiCS_0.25',oldAcc, newAcc))\n", - "\n", - "# Version 2: 0.01 for 6 dims of Wiki CS\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - " wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, -0.01)\n", - " neighDict = fetchNeighbours(wikiCSDF)\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['wikiCS_0.01_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, 'wikiCS_0.01',oldAcc, newAcc))\n", - " \n", - "# Version 3: 19k Dataset\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - "# wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, 0.25)\n", - " neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['19k_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, '19k',oldAcc, newAcc))\n", - "\n", - "# Version 4: 19k+0.25 Wiki CS Dataset\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - " wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, -0.25)\n", - " neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, wikiCSDF]))\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['19k_wikiCS_0.25_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, '19k+wikiCS_0.25',oldAcc, newAcc))\n", - "\n", - "# Version 5: 19k+0.01 Wiki CS Dataset\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - " wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, -0.01)\n", - " neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, wikiCSDF]))\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['19k_wikiCS_0.01_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, '19k+wikiCS_0.01',oldAcc, newAcc))" - ] - }, - { - "cell_type": "code", - "execution_count": 337, - "id": "specialized-syria", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'transe_19k_old_1': array([[ 9, 1, 10],\n", - " [ 0, 20, 83],\n", - " [ 2, 41, 177]]),\n", - " 'transe_19k_new_1': array([[ 13, 0, 7],\n", - " [ 0, 10, 93],\n", - " [ 7, 12, 201]]),\n", - " 'transe_19k_old_2': array([[ 9, 1, 10],\n", - " [ 0, 20, 83],\n", - " [ 2, 41, 177]]),\n", - " 'transe_19k_new_2': array([[ 10, 1, 9],\n", - " [ 0, 20, 83],\n", - " [ 3, 39, 178]])}" - ] - }, - "execution_count": 337, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "confusionMatrixMaster" - ] - }, - { - "cell_type": "code", - "execution_count": 303, - "id": "damaged-education", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "17187" - ] - }, - "execution_count": 303, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)])" - ] - }, - { - "cell_type": "code", - "execution_count": 306, - "id": "conservative-compact", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "280" - ] - }, - "execution_count": 306, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)].apply(lambda p: p.node1 in embedDict and p.node2 in embedDict, axis=1)).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "theoretical-delay", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 335, - "id": "swedish-cornwall", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CS_columnweightTargetOld AccuracyNew Accuracy
0complex_cosSim1wikiCS_0.250.6005830.603499
1complex_cosSim2wikiCS_0.250.6005830.600583
2complex_cosSim1wikiCS_0.010.6005830.600583
3complex_cosSim2wikiCS_0.010.6005830.600583
4complex_cosSim119k0.6005830.655977
5complex_cosSim219k0.6005830.609329
6complex_cosSim119k+wikiCS_0.250.6005830.653061
7complex_cosSim219k+wikiCS_0.250.6005830.606414
8complex_cosSim119k+wikiCS_0.010.6005830.653061
9complex_cosSim219k+wikiCS_0.010.6005830.606414
\n", - "
" - ], - "text/plain": [ - " CS_column weight Target Old Accuracy New Accuracy\n", - "0 complex_cosSim 1 wikiCS_0.25 0.600583 0.603499\n", - "1 complex_cosSim 2 wikiCS_0.25 0.600583 0.600583\n", - "2 complex_cosSim 1 wikiCS_0.01 0.600583 0.600583\n", - "3 complex_cosSim 2 wikiCS_0.01 0.600583 0.600583\n", - "4 complex_cosSim 1 19k 0.600583 0.655977\n", - "5 complex_cosSim 2 19k 0.600583 0.609329\n", - "6 complex_cosSim 1 19k+wikiCS_0.25 0.600583 0.653061\n", - "7 complex_cosSim 2 19k+wikiCS_0.25 0.600583 0.606414\n", - "8 complex_cosSim 1 19k+wikiCS_0.01 0.600583 0.653061\n", - "9 complex_cosSim 2 19k+wikiCS_0.01 0.600583 0.606414" - ] - }, - "execution_count": 335, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(results1, columns=['CS_column', 'weight', 'Target', 'Old Accuracy', 'New Accuracy'])" - ] - }, - { - "cell_type": "code", - "execution_count": 336, - "id": "palestinian-strategy", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Length of wordsim dataset: 344\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "fb4967f59df544e2b0cb6806d06dd1bf", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/10 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idWord 1Word 2Avgcategorytranse_19k_word1_oldtranse_19k_word2_oldtranse_19k_word1_newtranse_19k_word2_new...wikiCS_0.25_wt_1_new_cosSimwikiCS_0.25_wt_2_new_cosSimwikiCS_0.01_wt_1_new_cosSimwikiCS_0.01_wt_2_new_cosSim19k_wt_1_new_cosSim19k_wt_2_new_cosSim19k_wikiCS_0.25_wt_1_new_cosSim19k_wikiCS_0.25_wt_2_new_cosSim19k_wikiCS_0.01_wt_1_new_cosSim19k_wikiCS_0.01_wt_2_new_cosSim
0Q34211Q454Arafatpeace3.6U[-0.020990896052782256, -0.0948794050152691, -...[-0.056786171992006404, 0.01787462254737516, 0...[-0.020990896052782256, -0.0948794050152691, -...[-0.050833232942279184, 0.012123900440314235, ......3.7477953.7477953.7477953.7477953.4776653.6766183.4776653.6766183.4776653.676618
1Q34211Q13648784Arafatterror3.6U[-0.020990896052782256, -0.0948794050152691, -...[-0.03512899124845519, -0.06824488430804913, 0...[-0.020990896052782256, -0.0948794050152691, -...[-0.01589834711067725, -0.07306407013094582, 0......2.9550212.9550212.9550212.9550212.9521812.9470662.9521812.9470662.9521812.947066
2Q8333Q178022FBIfingerprint3.6U[0.02753406452429862, -0.14605954884804623, -0...[0.017732972826050936, -0.023766644378558594, ...[0.02753406452429862, -0.14605954884804623, -0...[-0.01674760225052191, -0.04519811208586652, 0......3.1491253.1491253.1491253.1491253.1262093.1262093.1262093.1262093.1262093.126209
3Q8333Q21004260FBIinvestigation3.0M[0.02753406452429862, -0.14605954884804623, -0...[0.052228162576186316, -0.07922249700554501, -...[0.02753406452429862, -0.14605954884804623, -0...[0.051399986151325704, -0.07859687607569352, -......3.1044213.1044213.1044213.1044212.9437503.0799272.9437503.0799272.9437503.079927
4Q13371Q49112HarvardYale2.2M[-0.015944469265519467, 0.22193716590314821, 0...[-0.01835552362856266, 0.11140088837689806, -0...[-0.015944469265519467, 0.22193716590314821, 0...[-0.01835552362856266, 0.11140088837689806, -0......2.0800222.0800222.0800222.0800222.0800222.0800222.0800222.0800222.0800222.080022
\n", - "

5 rows × 21 columns

\n", - "" - ], - "text/plain": [ - " word1_kg_id word2_kg_id Word 1 Word 2 Avg category \\\n", - "0 Q34211 Q454 Arafat peace 3.6 U \n", - "1 Q34211 Q13648784 Arafat terror 3.6 U \n", - "2 Q8333 Q178022 FBI fingerprint 3.6 U \n", - "3 Q8333 Q21004260 FBI investigation 3.0 M \n", - "4 Q13371 Q49112 Harvard Yale 2.2 M \n", - "\n", - " transe_19k_word1_old \\\n", - "0 [-0.020990896052782256, -0.0948794050152691, -... \n", - "1 [-0.020990896052782256, -0.0948794050152691, -... \n", - "2 [0.02753406452429862, -0.14605954884804623, -0... \n", - "3 [0.02753406452429862, -0.14605954884804623, -0... \n", - "4 [-0.015944469265519467, 0.22193716590314821, 0... \n", - "\n", - " transe_19k_word2_old \\\n", - "0 [-0.056786171992006404, 0.01787462254737516, 0... \n", - "1 [-0.03512899124845519, -0.06824488430804913, 0... \n", - "2 [0.017732972826050936, -0.023766644378558594, ... \n", - "3 [0.052228162576186316, -0.07922249700554501, -... \n", - "4 [-0.01835552362856266, 0.11140088837689806, -0... \n", - "\n", - " transe_19k_word1_new \\\n", - "0 [-0.020990896052782256, -0.0948794050152691, -... \n", - "1 [-0.020990896052782256, -0.0948794050152691, -... \n", - "2 [0.02753406452429862, -0.14605954884804623, -0... \n", - "3 [0.02753406452429862, -0.14605954884804623, -0... \n", - "4 [-0.015944469265519467, 0.22193716590314821, 0... \n", - "\n", - " transe_19k_word2_new ... \\\n", - "0 [-0.050833232942279184, 0.012123900440314235, ... ... \n", - "1 [-0.01589834711067725, -0.07306407013094582, 0... ... \n", - "2 [-0.01674760225052191, -0.04519811208586652, 0... ... \n", - "3 [0.051399986151325704, -0.07859687607569352, -... ... \n", - "4 [-0.01835552362856266, 0.11140088837689806, -0... ... \n", - "\n", - " wikiCS_0.25_wt_1_new_cosSim wikiCS_0.25_wt_2_new_cosSim \\\n", - "0 3.747795 3.747795 \n", - "1 2.955021 2.955021 \n", - "2 3.149125 3.149125 \n", - "3 3.104421 3.104421 \n", - "4 2.080022 2.080022 \n", - "\n", - " wikiCS_0.01_wt_1_new_cosSim wikiCS_0.01_wt_2_new_cosSim \\\n", - "0 3.747795 3.747795 \n", - "1 2.955021 2.955021 \n", - "2 3.149125 3.149125 \n", - "3 3.104421 3.104421 \n", - "4 2.080022 2.080022 \n", - "\n", - " 19k_wt_1_new_cosSim 19k_wt_2_new_cosSim 19k_wikiCS_0.25_wt_1_new_cosSim \\\n", - "0 3.477665 3.676618 3.477665 \n", - "1 2.952181 2.947066 2.952181 \n", - "2 3.126209 3.126209 3.126209 \n", - "3 2.943750 3.079927 2.943750 \n", - "4 2.080022 2.080022 2.080022 \n", - "\n", - " 19k_wikiCS_0.25_wt_2_new_cosSim 19k_wikiCS_0.01_wt_1_new_cosSim \\\n", - "0 3.676618 3.477665 \n", - "1 2.947066 2.952181 \n", - "2 3.126209 3.126209 \n", - "3 3.079927 2.943750 \n", - "4 2.080022 2.080022 \n", - "\n", - " 19k_wikiCS_0.01_wt_2_new_cosSim \n", - "0 3.676618 \n", - "1 2.947066 \n", - "2 3.126209 \n", - "3 3.079927 \n", - "4 2.080022 \n", - "\n", - "[5 rows x 21 columns]" - ] - }, - "execution_count": 321, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 323, - "id": "associate-cleaning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['transe_19k_old_cosSim',\n", - " 'wikiCS_0.25_wt_1_new_cosSim',\n", - " 'wikiCS_0.25_wt_2_new_cosSim',\n", - " 'wikiCS_0.01_wt_1_new_cosSim',\n", - " 'wikiCS_0.01_wt_2_new_cosSim',\n", - " '19k_wt_1_new_cosSim',\n", - " '19k_wt_2_new_cosSim',\n", - " '19k_wikiCS_0.25_wt_1_new_cosSim',\n", - " '19k_wikiCS_0.25_wt_2_new_cosSim',\n", - " '19k_wikiCS_0.01_wt_1_new_cosSim',\n", - " '19k_wikiCS_0.01_wt_2_new_cosSim']" - ] - }, - "execution_count": 323, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 317, - "id": "tight-location", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "\n", - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 318, - "id": "scheduled-massachusetts", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " \n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 324, - "id": "starting-slovenia", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.668655462184874" - ] - }, - "execution_count": 324, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, ['transe_19k_old_cosSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 328, - "id": "looking-color", - "metadata": {}, - "outputs": [], - "source": [ - "cosSimNewCols = ['wikiCS_0.25_wt_1_new_cosSim',\n", - " 'wikiCS_0.25_wt_2_new_cosSim',\n", - " 'wikiCS_0.01_wt_1_new_cosSim',\n", - " 'wikiCS_0.01_wt_2_new_cosSim',\n", - " '19k_wt_1_new_cosSim',\n", - " '19k_wt_2_new_cosSim',\n", - " '19k_wikiCS_0.25_wt_1_new_cosSim',\n", - " '19k_wikiCS_0.25_wt_2_new_cosSim',\n", - " '19k_wikiCS_0.01_wt_1_new_cosSim',\n", - " '19k_wikiCS_0.01_wt_2_new_cosSim']\n", - "\n", - "svmResults = []\n", - "for col1 in cosSimNewCols:\n", - " svmResults.append((col1, trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [col1])*100))\n", - "svmResults = pd.DataFrame(svmResults, columns=['target', 'Accuracy'])" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "id": "nutritional-chicken", - "metadata": {}, - "outputs": [], - "source": [ - "svmResults['Increase'] = svmResults['Accuracy'] - trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, ['transe_19k_old_cosSim'])*100" - ] - }, - { - "cell_type": "code", - "execution_count": 332, - "id": "charitable-journalism", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
targetAccuracyIncrease
0wikiCS_0.25_wt_1_new_cosSim66.571429-0.294118
1wikiCS_0.25_wt_2_new_cosSim66.571429-0.294118
2wikiCS_0.01_wt_1_new_cosSim66.8655460.000000
3wikiCS_0.01_wt_2_new_cosSim66.8655460.000000
419k_wt_1_new_cosSim66.571429-0.294118
519k_wt_2_new_cosSim66.571429-0.294118
619k_wikiCS_0.25_wt_1_new_cosSim66.571429-0.294118
719k_wikiCS_0.25_wt_2_new_cosSim66.8655460.000000
819k_wikiCS_0.01_wt_1_new_cosSim66.571429-0.294118
919k_wikiCS_0.01_wt_2_new_cosSim66.8655460.000000
\n", - "
" - ], - "text/plain": [ - " target Accuracy Increase\n", - "0 wikiCS_0.25_wt_1_new_cosSim 66.571429 -0.294118\n", - "1 wikiCS_0.25_wt_2_new_cosSim 66.571429 -0.294118\n", - "2 wikiCS_0.01_wt_1_new_cosSim 66.865546 0.000000\n", - "3 wikiCS_0.01_wt_2_new_cosSim 66.865546 0.000000\n", - "4 19k_wt_1_new_cosSim 66.571429 -0.294118\n", - "5 19k_wt_2_new_cosSim 66.571429 -0.294118\n", - "6 19k_wikiCS_0.25_wt_1_new_cosSim 66.571429 -0.294118\n", - "7 19k_wikiCS_0.25_wt_2_new_cosSim 66.865546 0.000000\n", - "8 19k_wikiCS_0.01_wt_1_new_cosSim 66.571429 -0.294118\n", - "9 19k_wikiCS_0.01_wt_2_new_cosSim 66.865546 0.000000" - ] - }, - "execution_count": 332, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "svmResults" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "naval-avenue", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "384px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Analogical Proj Experiments-Copy1.ipynb b/Analogical Proj Experiments-Copy1.ipynb deleted file mode 100644 index c154c5e..0000000 --- a/Analogical Proj Experiments-Copy1.ipynb +++ /dev/null @@ -1,3989 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 7, - "id": "historic-drive", - "metadata": {}, - "outputs": [], - "source": [ - "# !isa_file=../data/P279_dataset/wikidata-P279.tsv\n", - "# !labels_file=../data/labels.en.tsv\n", - "!kgtk query -i ../data/P279_dataset/wikidata-P279.tsv -i ../data/labels.en.tsv \\\n", - "--match 'i: (x)-[:P279]->(y), l: (x)-[:label]->(lbl), (y)-[:label]->(lbl2)' \\\n", - "--where 'lbl =~ \".* .*\" AND instr(kgtk_unstringify(kgtk_lqstring_text(lbl)), kgtk_unstringify(kgtk_lqstring_text(lbl2))) AND lbl!=lbl2' \\\n", - "--return 'distinct x, y, kgtk_lqstring_text_string(lbl), kgtk_lqstring_text_string(lbl2)' \\\n", - "-o ../data/compositional.tsv\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "geographic-andorra", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "node1\tnode2\tkgtk_lqstring_text_string(graph_2_c2.\"node2\")\tkgtk_lqstring_text_string(graph_2_c3.\"node2\")\r\n", - "Q1000064\tQ11016\t\"nuclear reactor technology\"\t\"technology\"\r\n", - "Q1000120\tQ12510\t\"maximal torus\"\t\"torus\"\r\n", - "Q100061973\tQ1799072\t\"presentation method\"\t\"method\"\r\n", - "Q1000828\tQ918385\t\"team training\"\t\"training\"\r\n", - "Q1000850\tQ748\t\"Buddhism in Germany\"\t\"Buddhism\"\r\n", - "Q1000859\tQ748\t\"Buddhism in Iceland\"\t\"Buddhism\"\r\n", - "Q1000861\tQ748\t\"Buddhism in Ireland\"\t\"Buddhism\"\r\n", - "Q1000863\tQ376\t\"master clock\"\t\"clock\"\r\n", - "Q1000869\tQ748\t\"Buddhism in Bangladesh\"\t\"Buddhism\"\r\n" - ] - } - ], - "source": [ - "!head ../data/compositional.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "prospective-commission", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "comp = pd.read_csv('../data/compositional.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "personalized-liberal", - "metadata": {}, - "outputs": [], - "source": [ - "comp['node1_len'] = comp.node1.apply(lambda p: len(p))\n", - "comp['node2_len'] = comp.node2.apply(lambda p: len(p))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "naval-python", - "metadata": {}, - "outputs": [], - "source": [ - "comp = comp.sort_values(by=['node1_len', 'node2_len'])" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "postal-baseline", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2kgtk_lqstring_text_string(graph_2_c2.\"node2\")kgtk_lqstring_text_string(graph_2_c3.\"node2\")node1_lennode2_len
67979Q561Q553human toothtooth44
55355Q416Q41298disk magazinemagazine46
98710Q944Q41217quantum mechanicsmechanics46
49124Q305Q186361corporal punishmentpunishment47
41635Q250Q1921606computer keyboardkeyboard48
\n", - "
" - ], - "text/plain": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") \\\n", - "67979 Q561 Q553 human tooth \n", - "55355 Q416 Q41298 disk magazine \n", - "98710 Q944 Q41217 quantum mechanics \n", - "49124 Q305 Q186361 corporal punishment \n", - "41635 Q250 Q1921606 computer keyboard \n", - "\n", - " kgtk_lqstring_text_string(graph_2_c3.\"node2\") node1_len node2_len \n", - "67979 tooth 4 4 \n", - "55355 magazine 4 6 \n", - "98710 mechanics 4 6 \n", - "49124 punishment 4 7 \n", - "41635 keyboard 4 8 " - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comp.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "median-singer", - "metadata": {}, - "outputs": [], - "source": [ - "from tabulate import tabulate" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "charitable-abraham", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2kgtk_lqstring_text_string(graph_2_c2.\"node2\")kgtk_lqstring_text_string(graph_2_c3.\"node2\")node1_lennode2_len
94514Q8141Q9288Modern HebrewHebrew55
41635Q250Q1921606computer keyboardkeyboard48
93984Q7991Q336natural sciencescience54
98024Q9192Q7850Mandarin ChineseChinese55
67979Q561Q553human toothtooth44
69745Q5856Q161synthetic fiberfiber54
87295Q6754Q6718charm quarkquark55
57146Q4543Q1734beach volleyballvolleyball55
99864Q9778Q638electronic musicmusic54
88511Q699Q17991521fairy taletale49
43353Q2642Q2638exponential-Golomb codingGolomb coding55
98991Q9585Q432Shia IslamIslam54
87447Q6786Q6718bottom quarkquark55
89314Q7141Q420cell biologybiology54
69759Q5860Q161carbon fibersfiber54
73413Q6311Q8104stellar atmosphereatmosphere55
95355Q8494Q8481human sternumsternum55
55941Q426Q2386606animal rightsright48
49124Q305Q186361corporal punishmentpunishment47
94475Q8124Q58human penispenis53
94875Q8345Q8343bass clarinetclarinet55
58838Q4812Q527day skysky54
18599Q1827Q282red winewine54
88919Q7076Q6199individualist anarchismanarchism55
3014Q1111Q73792electric chargecharge56
\n", - "
" - ], - "text/plain": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") \\\n", - "94514 Q8141 Q9288 Modern Hebrew \n", - "41635 Q250 Q1921606 computer keyboard \n", - "93984 Q7991 Q336 natural science \n", - "98024 Q9192 Q7850 Mandarin Chinese \n", - "67979 Q561 Q553 human tooth \n", - "69745 Q5856 Q161 synthetic fiber \n", - "87295 Q6754 Q6718 charm quark \n", - "57146 Q4543 Q1734 beach volleyball \n", - "99864 Q9778 Q638 electronic music \n", - "88511 Q699 Q17991521 fairy tale \n", - "43353 Q2642 Q2638 exponential-Golomb coding \n", - "98991 Q9585 Q432 Shia Islam \n", - "87447 Q6786 Q6718 bottom quark \n", - "89314 Q7141 Q420 cell biology \n", - "69759 Q5860 Q161 carbon fibers \n", - "73413 Q6311 Q8104 stellar atmosphere \n", - "95355 Q8494 Q8481 human sternum \n", - "55941 Q426 Q2386606 animal rights \n", - "49124 Q305 Q186361 corporal punishment \n", - "94475 Q8124 Q58 human penis \n", - "94875 Q8345 Q8343 bass clarinet \n", - "58838 Q4812 Q527 day sky \n", - "18599 Q1827 Q282 red wine \n", - "88919 Q7076 Q6199 individualist anarchism \n", - "3014 Q1111 Q73792 electric charge \n", - "\n", - " kgtk_lqstring_text_string(graph_2_c3.\"node2\") node1_len node2_len \n", - "94514 Hebrew 5 5 \n", - "41635 keyboard 4 8 \n", - "93984 science 5 4 \n", - "98024 Chinese 5 5 \n", - "67979 tooth 4 4 \n", - "69745 fiber 5 4 \n", - "87295 quark 5 5 \n", - "57146 volleyball 5 5 \n", - "99864 music 5 4 \n", - "88511 tale 4 9 \n", - "43353 Golomb coding 5 5 \n", - "98991 Islam 5 4 \n", - "87447 quark 5 5 \n", - "89314 biology 5 4 \n", - "69759 fiber 5 4 \n", - "73413 atmosphere 5 5 \n", - "95355 sternum 5 5 \n", - "55941 right 4 8 \n", - "49124 punishment 4 7 \n", - "94475 penis 5 3 \n", - "94875 clarinet 5 5 \n", - "58838 sky 5 4 \n", - "18599 wine 5 4 \n", - "88919 anarchism 5 5 \n", - "3014 charge 5 6 " - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comp[:50].sample(n=25, random_state=13)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "random-dress", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") kgtk_lqstring_text_string(graph_2_c3.\"node2\") node1_len node2_len\n", - "----- ------- --------- ----------------------------------------------- ----------------------------------------------- ----------- -----------\n", - "94514 Q8141 Q9288 Modern Hebrew Hebrew 5 5\n", - "41635 Q250 Q1921606 computer keyboard keyboard 4 8\n", - "93984 Q7991 Q336 natural science science 5 4\n", - "98024 Q9192 Q7850 Mandarin Chinese Chinese 5 5\n", - "67979 Q561 Q553 human tooth tooth 4 4\n", - "69745 Q5856 Q161 synthetic fiber fiber 5 4\n", - "87295 Q6754 Q6718 charm quark quark 5 5\n", - "57146 Q4543 Q1734 beach volleyball volleyball 5 5\n", - "99864 Q9778 Q638 electronic music music 5 4\n", - "88511 Q699 Q17991521 fairy tale tale 4 9\n", - "43353 Q2642 Q2638 exponential-Golomb coding Golomb coding 5 5\n", - "98991 Q9585 Q432 Shia Islam Islam 5 4\n", - "87447 Q6786 Q6718 bottom quark quark 5 5\n", - "89314 Q7141 Q420 cell biology biology 5 4\n", - "69759 Q5860 Q161 carbon fibers fiber 5 4\n", - "73413 Q6311 Q8104 stellar atmosphere atmosphere 5 5\n", - "95355 Q8494 Q8481 human sternum sternum 5 5\n", - "55941 Q426 Q2386606 animal rights right 4 8\n", - "49124 Q305 Q186361 corporal punishment punishment 4 7\n", - "94475 Q8124 Q58 human penis penis 5 3\n", - "94875 Q8345 Q8343 bass clarinet clarinet 5 5\n", - "58838 Q4812 Q527 day sky sky 5 4\n", - "18599 Q1827 Q282 red wine wine 5 4\n", - "88919 Q7076 Q6199 individualist anarchism anarchism 5 5\n", - " 3014 Q1111 Q73792 electric charge charge 5 6\n" - ] - } - ], - "source": [ - "print(tabulate(comp[:50].sample(n=25, random_state=13), headers = 'keys', tablefmt = 'simple'))" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "governing-execution", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2kgtk_lqstring_text_string(graph_2_c2.\"node2\")kgtk_lqstring_text_string(graph_2_c3.\"node2\")
76391Q66502527Q27058096right fifth intercostal nervefifth intercostal nerve
64439Q5453438Q392316First Nations in AlbertaFirst Nations
54764Q3998922Q43304311clarinet-violin-piano triopiano trio
71844Q60687320Q29385978President of Communal Council of TremithousaPresident of Communal Council
26611Q21116244Q14878311glutamate catabolic process to 2-oxoglutarateglutamate catabolic process
76415Q66502641Q66502435medial branch of cervicothoracic ganglionbranch of cervicothoracic ganglion
24160Q20901636Q705135Grand Officer of the Order of Adolphe of NassauOrder of Adolphe of Nassau
27271Q21127225Q133492letters of Pliny the Youngerletter
3924Q1152224Q12050496distinctive featurefeature
84513Q66571241Q66570136right cuneate fasciculus of medullacuneate fasciculus of medulla
92282Q7624573Q1084strong nounnoun
23304Q20205194Q1644573Orthodox pilgrimagepilgrimage
9611Q14860562Q14862215positive regulation of cell motilityregulation of cell motility
92883Q77584712Q837924skew-symmetric bilinear formbilinear form
42826Q2593298Q1319755European Speed Skating Championships for MenEuropean Speed Skating Championships
29359Q2213536Q193343extensional tectonicstectonics
38430Q22328939Q22328937nuclear subtelomeric heterochromatinsubtelomeric heterochromatin
51013Q32861734Q5758703Western Highland ChatinoHighland Chatino
70167Q5898386Q105688hypobaric hypoxiahypoxia
7736Q13631670Q588723Passenger rail transport in Chinarail transport in China
\n", - "
" - ], - "text/plain": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") \\\n", - "76391 Q66502527 Q27058096 right fifth intercostal nerve \n", - "64439 Q5453438 Q392316 First Nations in Alberta \n", - "54764 Q3998922 Q43304311 clarinet-violin-piano trio \n", - "71844 Q60687320 Q29385978 President of Communal Council of Tremithousa \n", - "26611 Q21116244 Q14878311 glutamate catabolic process to 2-oxoglutarate \n", - "76415 Q66502641 Q66502435 medial branch of cervicothoracic ganglion \n", - "24160 Q20901636 Q705135 Grand Officer of the Order of Adolphe of Nassau \n", - "27271 Q21127225 Q133492 letters of Pliny the Younger \n", - "3924 Q1152224 Q12050496 distinctive feature \n", - "84513 Q66571241 Q66570136 right cuneate fasciculus of medulla \n", - "92282 Q7624573 Q1084 strong noun \n", - "23304 Q20205194 Q1644573 Orthodox pilgrimage \n", - "9611 Q14860562 Q14862215 positive regulation of cell motility \n", - "92883 Q77584712 Q837924 skew-symmetric bilinear form \n", - "42826 Q2593298 Q1319755 European Speed Skating Championships for Men \n", - "29359 Q2213536 Q193343 extensional tectonics \n", - "38430 Q22328939 Q22328937 nuclear subtelomeric heterochromatin \n", - "51013 Q32861734 Q5758703 Western Highland Chatino \n", - "70167 Q5898386 Q105688 hypobaric hypoxia \n", - "7736 Q13631670 Q588723 Passenger rail transport in China \n", - "\n", - " kgtk_lqstring_text_string(graph_2_c3.\"node2\") \n", - "76391 fifth intercostal nerve \n", - "64439 First Nations \n", - "54764 piano trio \n", - "71844 President of Communal Council \n", - "26611 glutamate catabolic process \n", - "76415 branch of cervicothoracic ganglion \n", - "24160 Order of Adolphe of Nassau \n", - "27271 letter \n", - "3924 feature \n", - "84513 cuneate fasciculus of medulla \n", - "92282 noun \n", - "23304 pilgrimage \n", - "9611 regulation of cell motility \n", - "92883 bilinear form \n", - "42826 European Speed Skating Championships \n", - "29359 tectonics \n", - "38430 subtelomeric heterochromatin \n", - "51013 Highland Chatino \n", - "70167 hypoxia \n", - "7736 rail transport in China " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comp.sample(n=20, random_state=13)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "bacterial-commerce", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " node1 node2 kgtk_lqstring_text_string(graph_2_c2.\"node2\") kgtk_lqstring_text_string(graph_2_c3.\"node2\")\n", - "----- --------- --------- ----------------------------------------------- -----------------------------------------------\n", - "76391 Q66502527 Q27058096 right fifth intercostal nerve fifth intercostal nerve\n", - "64439 Q5453438 Q392316 First Nations in Alberta First Nations\n", - "54764 Q3998922 Q43304311 clarinet-violin-piano trio piano trio\n", - "71844 Q60687320 Q29385978 President of Communal Council of Tremithousa President of Communal Council\n", - "26611 Q21116244 Q14878311 glutamate catabolic process to 2-oxoglutarate glutamate catabolic process\n", - "76415 Q66502641 Q66502435 medial branch of cervicothoracic ganglion branch of cervicothoracic ganglion\n", - "24160 Q20901636 Q705135 Grand Officer of the Order of Adolphe of Nassau Order of Adolphe of Nassau\n", - "27271 Q21127225 Q133492 letters of Pliny the Younger letter\n", - " 3924 Q1152224 Q12050496 distinctive feature feature\n", - "84513 Q66571241 Q66570136 right cuneate fasciculus of medulla cuneate fasciculus of medulla\n", - "92282 Q7624573 Q1084 strong noun noun\n", - "23304 Q20205194 Q1644573 Orthodox pilgrimage pilgrimage\n", - " 9611 Q14860562 Q14862215 positive regulation of cell motility regulation of cell motility\n", - "92883 Q77584712 Q837924 skew-symmetric bilinear form bilinear form\n", - "42826 Q2593298 Q1319755 European Speed Skating Championships for Men European Speed Skating Championships\n", - "29359 Q2213536 Q193343 extensional tectonics tectonics\n", - "38430 Q22328939 Q22328937 nuclear subtelomeric heterochromatin subtelomeric heterochromatin\n", - "51013 Q32861734 Q5758703 Western Highland Chatino Highland Chatino\n", - "70167 Q5898386 Q105688 hypobaric hypoxia hypoxia\n", - " 7736 Q13631670 Q588723 Passenger rail transport in China rail transport in China\n" - ] - } - ], - "source": [ - "print(tabulate(comp.sample(n=20, random_state=13), headers = 'keys', tablefmt = 'simple'))" - ] - }, - { - "cell_type": "markdown", - "id": "future-peace", - "metadata": {}, - "source": [ - "# Determine Top Parents based on transitive child count" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "attempted-calgary", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import gzip\n", - "\n", - "p279StarDF = pd.read_csv('../../wd-correctness/wikidata-20210215/derived.P279star.tsv.gz', sep='\\t', compression='gzip')" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "blocked-monitor", - "metadata": {}, - "outputs": [], - "source": [ - "p279StarDF_node2_counts = p279StarDF.node2.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "informal-destruction", - "metadata": {}, - "outputs": [], - "source": [ - "p279StarDF_node2_counts = p279StarDF_node2_counts.sort_values(ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "mathematical-mandate", - "metadata": {}, - "outputs": [], - "source": [ - "p279StarDF_node2_counts_dict = p279StarDF_node2_counts.to_dict()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "median-details", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Q35120 2461316\n", - "Q99527517 2254480\n", - "Q28813620 1363013\n", - "Q16887380 1362538\n", - "Q488383 1286312\n", - "Q20937557 1267164\n", - "Q58415929 1201300\n", - "Q4406616 1175217\n", - "Q223557 1164930\n", - "Q6671777 1122346\n", - "Q337060 1079449\n", - "Q7184903 1072421\n", - "Q219858 1057006\n", - "Q50365914 1056956\n", - "Q23958946 1038346\n", - "Q97669203 1007383\n", - "Q15712714 1007381\n", - "Q3511065 1007335\n", - "Q3771876 1004686\n", - "Q37500013 1004683\n", - "Name: node2, dtype: int64" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279StarDF_node2_counts[:20]" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "beginning-element", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Q35120,entity,2461316\n", - "Q99527517,collection entity,2254480\n", - "Q28813620,set,1363013\n", - "Q16887380,group,1362538\n", - "Q488383,object,1286312\n", - "Q20937557,series,1267164\n", - "Q58415929,spatio-temporal entity,1201300\n", - "Q4406616,concrete object,1175217\n", - "Q223557,physical object,1164930\n", - "Q6671777,structure,1122346\n", - "Q337060,perceptible object,1079449\n", - "Q7184903,abstract object,1072421\n", - "Q219858,zone,1057006\n", - "Q50365914,biological region,1056956\n", - "Q23958946,individual entity,1038346\n", - "Q97669203,molecular conformation,1007383\n", - "Q15712714,biomolecular structure,1007381\n", - "Q3511065,biological sequence,1007335\n", - "Q3771876,nucleic acid structure,1004686\n", - "Q37500013,primary structure,1004683\n", - "Q863908,nucleic acid sequence,1004680\n", - "Q7187,gene,1004634\n", - "Q103940464,continuant,1003328\n", - "Q53617489,independent continuant,1003327\n", - "Q27043950,anatomical entity,1003325\n", - "Q28732711,physical substance,977526\n", - "Q4503801,part and whole,969424\n", - "Q1310239,component,960112\n", - "Q20747295,protein-coding gene,942018\n", - "Q58416391,spatial entity,927246\n", - "Q43460564,chemical entity,894604\n", - "Q79529,chemical substance,893534\n", - "Q28728771,material substance,892254\n", - "Q35758,matter,891736\n", - "Q66394244,physical anatomical entity,877724\n", - "Q5127848,class,875770\n", - "Q578779,pure substance,874023\n", - "Q19478619,metaclass,873959\n", - "Q20026787,chemical component,873903\n", - "Q11173,chemical compound,873902\n", - "Q29651224,natural object,866276\n", - "Q16686022,natural physical object,866273\n", - "Q53617407,material entity,865793\n", - "Q27043948,material anatomical entity,865792\n", - "Q28845870,biological component,862053\n", - "Q4936952,anatomical structure,862034\n", - "Q1621273,particle,856456\n", - "Q46344,quantum,856370\n", - "Q28693603,quantum particle,856367\n", - "Q2923525,massive particle,856265\n", - "Q28877390,massive quantum particle,856264\n", - "Q908049,bound state,856239\n", - "Q3366856,composite particle,856208\n", - "Q2393187,molecular entity,856080\n", - "Q2901852,compound of carbon,855799\n", - "Q174211,organic compound,855763\n", - "Q169336,mixture,853910\n", - "Q11369,molecule,853417\n", - "Q178593,macromolecule,853231\n", - "Q206229,biomolecule,852989\n", - "Q81163,polymer,851896\n", - "Q422649,biopolymer,851714\n", - "Q424689,gene product,851333\n", - "Q66560214,biological macromolecule,789641\n", - "Q181394,nutrient,788439\n", - "Q145273,polyamide,788369\n", - "Q8054,protein,788357\n", - "Q16686448,artificial entity,309666\n", - "Q26907166,temporal entity,281532\n", - "Q1190554,occurrence,273428\n", - "Q4026292,action,231193\n", - "Q15401930,product,227605\n", - "Q937228,property,219920\n", - "Q8205328,artificial physical object,218567\n", - "Q1914636,activity,198404\n", - "Q1207505,quality,193010\n", - "Q24229398,agent,156590\n", - "Q61788060,human activity,148527\n", - "Q830077,subject,141105\n", - "Q28877,goods,139125\n", - "Q1150070,change,134268\n", - "Q18336849,item with given name property,133824\n", - "Q795052,individual,131442\n", - "Q3249551,process,130568\n", - "Q2424752,product,129982\n", - "Q215627,person,129884\n", - "Q4897819,role,129416\n", - "Q26720107,subject of a right,128685\n", - "Q3778211,legal person,128684\n", - "Q7239,organism,125704\n", - "Q16889133,class,125538\n", - "Q11028,information,122503\n", - "Q159344,heterotroph,122144\n", - "Q72638,consumer,122136\n", - "Q154954,natural person,121570\n", - "Q45983014,organisms by adaptation,121568\n", - "Q164509,omnivore,121567\n", - "Q5,human,121566\n", - "Q930933,relation,121018\n", - "Q16722960,phenomenon,120253\n" - ] - } - ], - "source": [ - "import requests\n", - "\n", - "top_parents = []\n", - "\n", - "for qnode,qnode_count in zip(p279StarDF_node2_counts[:100].index, p279StarDF_node2_counts[:100]):\n", - " top_parents.append((qnode,requests.get('http://ckg07:9200/wikidatadwd-augmented/_doc/'+qnode).json()['_source']['labels']['en'][0],qnode_count))\n", - " print(qnode+','+requests.get('http://ckg07:9200/wikidatadwd-augmented/_doc/'+qnode).json()['_source']['labels']['en'][0] + \",\" + str(qnode_count))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "proud-remainder", - "metadata": {}, - "outputs": [], - "source": [ - "top_parents = pd.DataFrame(top_parents, columns=['qnode','label','count'])" - ] - }, - { - "cell_type": "markdown", - "id": "asian-pleasure", - "metadata": {}, - "source": [ - "## Analyze Parents" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "cardiac-prison", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3caff386d7254beab10e799a453273bb", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from collections import defaultdict\n", - "from tqdm.notebook import tqdm\n", - "\n", - "child_parent_dict = defaultdict(set)\n", - "parent_child_dict = defaultdict(set)\n", - "with gzip.open('../../wd-correctness/wikidata-20210215/derived.P279.tsv.gz') as fIN:\n", - " first_line = True\n", - " for line in tqdm(fIN):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line_s = line.decode(\"utf-8\").strip().split('\\t')\n", - " child_parent_dict[line_s[1]].add(line_s[3])\n", - " parent_child_dict[line_s[3]].add(line_s[1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "defined-darwin", - "metadata": {}, - "outputs": [], - "source": [ - "max_depths = {}\n", - "min_depths = {}" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "bibliographic-layout", - "metadata": {}, - "outputs": [], - "source": [ - "def find_max_depth(qnode, depth=0, visited=set()):\n", - " global parent_child_dict\n", - "# print(qnode, depth, visited)\n", - " if qnode not in parent_child_dict:\n", - " return depth\n", - " max_val = depth\n", - " for child in parent_child_dict[qnode]:\n", - " if child not in visited:\n", - " if child not in max_depths:\n", - " max_depths[child] = find_max_depth(child, depth+1, visited | {child})\n", - " max_val = max(max_val, max_depths[child])\n", - " return max_val\n", - "\n", - "def find_min_depth(qnode, depth=0, visited=set()):\n", - " global parent_child_dict\n", - "# print(qnode, depth, visited)\n", - " if qnode not in parent_child_dict:\n", - " return depth\n", - " min_val = float('inf')\n", - " for child in parent_child_dict[qnode]:\n", - " if child not in visited:\n", - " if child not in min_depths:\n", - " min_depths[child] = find_min_depth(child, depth+1, visited | {child})\n", - " min_val = min(min_val, min_depths[child])\n", - " if min_val == float('inf'):\n", - " return depth\n", - " else:\n", - " return min_val" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "opponent-vertex", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "def entropy_of_children(qnode):\n", - " entropy_sum = 0\n", - " for child in parent_child_dict[qnode]:\n", - " if child in p279StarDF_node2_counts_dict:\n", - " assert p279StarDF_node2_counts_dict[child] <= p279StarDF_node2_counts_dict[qnode], (child, qnode)\n", - " entropy_sum -= p279StarDF_node2_counts_dict[child] / p279StarDF_node2_counts_dict[qnode] * np.log2(p279StarDF_node2_counts_dict[child] / p279StarDF_node2_counts_dict[qnode])\n", - " return float(entropy_sum)" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "id": "widespread-storage", - "metadata": {}, - "outputs": [], - "source": [ - "def get_reduction_ratio(qnode):\n", - " return [p279StarDF_node2_counts_dict[qnode] / p279StarDF_node2_counts_dict[parent] for parent in child_parent_dict[qnode]]" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "id": "exciting-representation", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "9e0f343423654e6d93249f3f454fae38", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "newRows = []\n", - "for _, row in tqdm(top_parents.iterrows()):\n", - " row['child_count'] = len(parent_child_dict[row['qnode']])\n", - " row['max_no_of_siblings'] = max([len(parent_child_dict[parent]) - 1 for parent in child_parent_dict[row['qnode']]]) if child_parent_dict[row['qnode']] else 0\n", - " row['min_no_of_siblings'] = min([len(parent_child_dict[parent]) - 1 for parent in child_parent_dict[row['qnode']]]) if child_parent_dict[row['qnode']] else 0\n", - " row['max_depth'] = find_max_depth(row['qnode'])\n", - " row['min_depth'] = find_min_depth(row['qnode'])\n", - " row['entropy'] = entropy_of_children(row['qnode'])\n", - " row['red_ratios'] = get_reduction_ratio(row['qnode'])\n", - " newRows.append(row)" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "lucky-teens", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Q15401930', 'Q28877', 'Q8205328'}" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "parent_child_dict['Q2424752']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "numerical-sharp", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "intense-bibliography", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "blessed-biodiversity", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "common-cooking", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "chinese-competition", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "solid-final", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "known-logan", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "careful-linux", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
qnodelabelcountchild_countmax_no_of_siblingsmin_no_of_siblingsmax_depthmin_depthentropyred_ratios
0Q35120entity246131660002914.986354[]
1Q99527517collection entity2254480659592921.201021[0.9159652803622127]
2Q28813620set136301341552520.035319[0.6045797700578404]
3Q16887380group136253814740402520.786249[0.999651507359064]
4Q488383object12863125659592911.487792[0.5226114810125965]
.................................
95Q45983014organisms by adaptation12156811461462120.000012[0.08922173179757188]
96Q164509omnivore1215671502120.000012[0.9953412589244777, 0.9999917741510924]
97Q5human12156625454202120.311051[0.9999917740834272, 0.9999670971456774, 0.935...
98Q930933relation1210185644442921.937792[0.11284560820797056]
99Q16722960phenomenon120253959592520.341837[0.04885719671915349]
\n", - "

100 rows × 10 columns

\n", - "
" - ], - "text/plain": [ - " qnode label count child_count \\\n", - "0 Q35120 entity 2461316 60 \n", - "1 Q99527517 collection entity 2254480 6 \n", - "2 Q28813620 set 1363013 41 \n", - "3 Q16887380 group 1362538 147 \n", - "4 Q488383 object 1286312 56 \n", - ".. ... ... ... ... \n", - "95 Q45983014 organisms by adaptation 121568 1 \n", - "96 Q164509 omnivore 121567 1 \n", - "97 Q5 human 121566 254 \n", - "98 Q930933 relation 121018 56 \n", - "99 Q16722960 phenomenon 120253 9 \n", - "\n", - " max_no_of_siblings min_no_of_siblings max_depth min_depth entropy \\\n", - "0 0 0 29 1 4.986354 \n", - "1 59 59 29 2 1.201021 \n", - "2 5 5 25 2 0.035319 \n", - "3 40 40 25 2 0.786249 \n", - "4 59 59 29 1 1.487792 \n", - ".. ... ... ... ... ... \n", - "95 146 146 21 2 0.000012 \n", - "96 5 0 21 2 0.000012 \n", - "97 542 0 21 2 0.311051 \n", - "98 44 44 29 2 1.937792 \n", - "99 59 59 25 2 0.341837 \n", - "\n", - " red_ratios \n", - "0 [] \n", - "1 [0.9159652803622127] \n", - "2 [0.6045797700578404] \n", - "3 [0.999651507359064] \n", - "4 [0.5226114810125965] \n", - ".. ... \n", - "95 [0.08922173179757188] \n", - "96 [0.9953412589244777, 0.9999917741510924] \n", - "97 [0.9999917740834272, 0.9999670971456774, 0.935... \n", - "98 [0.11284560820797056] \n", - "99 [0.04885719671915349] \n", - "\n", - "[100 rows x 10 columns]" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(newRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "interested-reply", - "metadata": {}, - "outputs": [], - "source": [ - "pd.DataFrame(newRows).to_csv('../data/Analogical_Dataset/top_parents_analysis.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sporting-radius", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "pacific-hughes", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "needed-grenada", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "ordinary-schema", - "metadata": {}, - "source": [ - "# Determine if training file has common parent or common ancestor" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "anonymous-penalty", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "comp = pd.read_csv('../data/compositional.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "statutory-supplier", - "metadata": {}, - "outputs": [], - "source": [ - "compDict = {row['node1']: row['node2'] for _, row in comp.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 158, - "id": "legal-handy", - "metadata": {}, - "outputs": [], - "source": [ - "trainingDF = pd.read_csv('../data/Analogical_Dataset/Analogical_Test_File.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "democratic-hebrew", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2node1_labelnode2_labelrelationother_node1other_node2other_node1_labelother_node2_labelother_relationtype
25Q250Q1921606computer keyboardkeyboardPURPOSEQ444321Q2009740telephone keybadkeypadPURPOSEPOS_SAME_PAR
26Q250Q1921606computer keyboardkeyboardPURPOSEQ807980Q82744barcode readerimage scannerPURPOSEPOS_SAME_PAR
27Q7991Q336natural sciencesciencePROPERTYQ2914650Q7163identity politicspoliticsPROPERTYPOS_SAME_PAR
28Q7991Q336natural sciencesciencePROPERTYQ4259813Q9174liberal religionreligionPROPERTYPOS_SAME_PAR
29Q7991Q336natural sciencesciencePROPERTYQ10404171Q186005thermal therapyphysiotherapyPROPERTYPOS_SAME_PAR
\n", - "
" - ], - "text/plain": [ - " node1 node2 node1_label node2_label relation other_node1 \\\n", - "25 Q250 Q1921606 computer keyboard keyboard PURPOSE Q444321 \n", - "26 Q250 Q1921606 computer keyboard keyboard PURPOSE Q807980 \n", - "27 Q7991 Q336 natural science science PROPERTY Q2914650 \n", - "28 Q7991 Q336 natural science science PROPERTY Q4259813 \n", - "29 Q7991 Q336 natural science science PROPERTY Q10404171 \n", - "\n", - " other_node2 other_node1_label other_node2_label other_relation \\\n", - "25 Q2009740 telephone keybad keypad PURPOSE \n", - "26 Q82744 barcode reader image scanner PURPOSE \n", - "27 Q7163 identity politics politics PROPERTY \n", - "28 Q9174 liberal religion religion PROPERTY \n", - "29 Q186005 thermal therapy physiotherapy PROPERTY \n", - "\n", - " type \n", - "25 POS_SAME_PAR \n", - "26 POS_SAME_PAR \n", - "27 POS_SAME_PAR \n", - "28 POS_SAME_PAR \n", - "29 POS_SAME_PAR " - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingDF[trainingDF.type == 'POS_SAME_PAR'].head()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "scientific-charles", - "metadata": {}, - "outputs": [], - "source": [ - "trainingDFSubset = trainingDF[trainingDF.type == 'POS_SAME_PAR']" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "moral-shaft", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2node1_labelnode2_labelrelationother_node1other_node2other_node1_labelother_node2_labelother_relationtypeUnnamed: 11
25Q250Q1921606computer keyboardkeyboardPURPOSEQ444321Q2009740telephone keybadkeypadPURPOSEPOS_SAME_PARNaN
26Q54854916Q1921606typewriter keyboardkeyboardPURPOSEQ807980Q82744barcode readerimage scannerPURPOSEPOS_SAME_PARNaN
27Q7991Q336natural sciencesciencePROPERTYQ2914650Q7163identity politicspoliticsPROPERTYPOS_SAME_PARNaN
28Q1637030Q336food sciencesciencePROPERTYQ4259813Q9174liberal religionreligionPROPERTYPOS_SAME_PARNaN
29Q16387Q336information sciencesciencePROPERTYQ10404171Q186005thermal therapyphysiotherapyPROPERTYPOS_SAME_PARNaN
\n", - "
" - ], - "text/plain": [ - " node1 node2 node1_label node2_label relation \\\n", - "25 Q250 Q1921606 computer keyboard keyboard PURPOSE \n", - "26 Q54854916 Q1921606 typewriter keyboard keyboard PURPOSE \n", - "27 Q7991 Q336 natural science science PROPERTY \n", - "28 Q1637030 Q336 food science science PROPERTY \n", - "29 Q16387 Q336 information science science PROPERTY \n", - "\n", - " other_node1 other_node2 other_node1_label other_node2_label \\\n", - "25 Q444321 Q2009740 telephone keybad keypad \n", - "26 Q807980 Q82744 barcode reader image scanner \n", - "27 Q2914650 Q7163 identity politics politics \n", - "28 Q4259813 Q9174 liberal religion religion \n", - "29 Q10404171 Q186005 thermal therapy physiotherapy \n", - "\n", - " other_relation type Unnamed: 11 \n", - "25 PURPOSE POS_SAME_PAR NaN \n", - "26 PURPOSE POS_SAME_PAR NaN \n", - "27 PROPERTY POS_SAME_PAR NaN \n", - "28 PROPERTY POS_SAME_PAR NaN \n", - "29 PROPERTY POS_SAME_PAR NaN " - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingDFSubset.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "competitive-medication", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " trainingDFSubset['pair1_exists'] = trainingDFSubset.apply(checkIfExists, args=('node1','node2'), axis=1)\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " trainingDFSubset['pair2_exists'] = trainingDFSubset.apply(checkIfExists, args=('other_node1','other_node2'), axis=1)\n" - ] - } - ], - "source": [ - "def checkIfExists(row, node1_col, node2_col):\n", - " return row[node1_col] in compDict and row[node2_col] == compDict[row[node1_col]]\n", - "trainingDFSubset['pair1_exists'] = trainingDFSubset.apply(checkIfExists, args=('node1','node2'), axis=1)\n", - "trainingDFSubset['pair2_exists'] = trainingDFSubset.apply(checkIfExists, args=('other_node1','other_node2'), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "wrapped-softball", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True 35\n", - "False 15\n", - "Name: pair2_exists, dtype: int64" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingDFSubset['pair2_exists'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "physical-fireplace", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "25 -1\n", - "26 -1\n", - "27 -1\n", - "28 -1\n", - "29 -1\n", - "30 -1\n", - "31 -1\n", - "32 -1\n", - "33 -1\n", - "34 -1\n", - "35 -1\n", - "36 -1\n", - "37 -1\n", - "38 -1\n", - "39 -1\n", - "40 -1\n", - "41 -1\n", - "42 -1\n", - "43 -1\n", - "44 -1\n", - "45 -1\n", - "46 -1\n", - "47 -1\n", - "48 -1\n", - "49 -1\n", - "50 -1\n", - "51 -1\n", - "52 -1\n", - "53 -1\n", - "54 -1\n", - "55 -1\n", - "56 -1\n", - "57 -1\n", - "58 -1\n", - "59 -1\n", - "60 -1\n", - "61 -1\n", - "62 -1\n", - "63 -1\n", - "64 -1\n", - "65 -1\n", - "66 -1\n", - "67 -1\n", - "68 -1\n", - "69 -1\n", - "70 -1\n", - "71 -1\n", - "72 -1\n", - "73 -1\n", - "74 -1\n", - "dtype: int64" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def checkIfCommonParent(row):\n", - " if row['node2'] not in compDict or row['other_node2'] not in compDict:\n", - " return -1\n", - " elif compDict[row['node2']] == compDict[row['other_node2']]:\n", - " return 1\n", - " else:\n", - " return 0\n", - "trainingDFSubset.apply(checkIfCommonParent, axis=1)" - ] - }, - { - "cell_type": "markdown", - "id": "according-shark", - "metadata": {}, - "source": [ - "# Same Ancestor Subset Top Parent Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 175, - "id": "hourly-december", - "metadata": {}, - "outputs": [], - "source": [ - "trainingDF = pd.read_csv('../data/Analogical_Dataset/Analogical_Test_File.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 176, - "id": "alternate-bookmark", - "metadata": {}, - "outputs": [], - "source": [ - "trainingDFSubset = trainingDF[trainingDF.type == 'POS_SAME_ANC']" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "existing-gauge", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2node1_labelnode2_labelrelationother_node1other_node2other_node1_labelother_node2_labelother_relationtypeVerifiedcommentpar_nodepar_labelpair1_ancestorpair2_ancestortop_pars_listUnnamed: 18
75Q250Q1921606computer keyboardkeyboardPURPOSEQ7708416Q327065Text displaydisplay devicePURPOSEPOS_SAME_ANCVERIFIEDNaNNaNNaNQ1921606:keyboard|Q864114:input device|Q47146:...Q327065:display device|Q778637:output device|Q...entity,object,physical object,abstract object,...entity,object,physical object,abstract object,...
76Q7991Q336natural sciencesciencePROPERTYQ1140700Q11635improvisational theatretheatrePROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ336:science|Q11862829:academic discipline|Q10...Q11635:theater|Q184485:performing arts|Q201852...entity,object,abstract objectentity,object,abstract object,structure
77Q16387Q336information sciencesciencePROPERTYQ107181871Q11032manuscript newspapernewspaperPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ336:science|Q11862829:academic discipline|Q10...Q11032:newspaper|Q1002697:periodical|Q234460:t...entity,object,abstract objectentity,object,physical object,abstract object,...
78Q9192Q7850Mandarin ChineseChineseLOCATIONQ1122452Q29536Germanic paganismpaganismLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ7850:Chinese|Q33857:Sinitic languages|Q45961:...Q29536:paganism|Q9174:religion|Q3702971:person...entity,object,abstract object,propertyentity,object,abstract object,structure,proper...
79Q56479Q7850Jin ChineseChineseLOCATIONQ702065Q9134Korean mythologymythologyLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ7850:Chinese|Q33857:Sinitic languages|Q45961:...Q9134:mythology|Q49447:world view|Q20978643:po...entity,object,abstract object,propertyentity,object,abstract object,property,relatio...
80Q561Q553human toothtoothOWNERSHIPQ106907987Q106907993mammalian oocytevertebrate oocyteOWNERSHIPPOS_SAME_ANCVERIFIEDNaNNaNNaNNaNNaNentity,object,physical objectNaN
81Q5856Q161synthetic fiberfiberMATERIALQ16676963Q6584340mint syrupsyrupMATERIALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ161:fiber|Q214609:material|Q2424752:productQ6584340:syrup|Q40050:drink|Q2095:food|Q119405...entity,object,physical object,productentity,object,physical object,product
82Q4543Q1734beach volleyballvolleyballLOCATIONQ55491Q55488underground railway stationrailway stationLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ1734:volleyball|Q877517:ball game|Q4438147:sp...Q55488:railway station|Q1318558:operation poin...entity,object,action,phenomenonentity,object,physical object,structure
83Q15728017Q1734snow volleyballvolleyballLOCATIONQ99689267Q3305213leather paintingpaintingLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ1734:volleyball|Q877517:ball game|Q4438147:sp...Q3305213:painting|Q4502142:visual artwork|Q838...entity,object,action,phenomenonentity,object,physical object
84Q9778Q638electronic musicmusicPROPERTYQ20358335Q8261political novelnovelPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ638:music|Q735:art|Q2018526:arts|Q80083:human...Q8261:novel|Q571:book|Q49848:document|Q234460:...entity,object,abstract object,structure,actionentity,object,physical object,abstract object,...
85Q1045756Q638microtonal musicmusicPROPERTYQ5707594Q191067news articlearticlePROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ638:music|Q735:art|Q2018526:arts|Q80083:human...Q191067:article|Q234460:text|Q11028:informatio...entity,object,abstract object,structure,actionentity,object,abstract object
86Q699Q17991521fairy taletalePROPERTYQ58079064Q2977protestant cathedralcathedralPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ17991521:tale|Q1318295:narrative|Q17537576:cr...Q2977:cathedral|Q16970:church building|Q137059...entity,objectentity,object,physical object,structure
87Q9585Q432Shia IslamIslamINSTANCEQ4775051Q132203Antiochian GreeksGreek diasporaINSTANCEPOS_SAME_ANCVERIFIEDNaNNaNNaNNaNNaNentity,object,abstract object,structure,proper...NaN
88Q6786Q6718bottom quarkquarkPROPERTYQ55511397Q107968monoatomic anionanionPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ6718:quark|Q52234516:elementary fermion|Q4311...Q107968:anion|Q36496:ion|Q2393187:molecular en...entity,object,physical object,particleentity,object,physical object,particle
89Q7141Q420cell biologybiologyPROPERTYQ81197Q413nuclear physicsphysicsPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ420:biology|Q7991:natural science|Q336:scienc...Q413:physics|Q14632398:physical sciences|Q7991...entity,object,abstract objectentity,object,abstract object
90Q5860Q161carbon fibersfiberMATERIALQ5567094Q80228glass bottlebottleMATERIALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ161:fiber|Q214609:material|Q2424752:productQ80228:bottle|Q16896124:bin|Q987767:container|...entity,object,physical object,productentity,object,physical object,structure,product
91Q6311Q8104stellar atmosphereatmosphereLOCATIONQ1037499Q36133lunar soilsoilLOCATIONPOS_SAME_ANCVERIFIEDNaNNaNNaNQ8104:atmosphere|Q47495022:shell of an astrono...Q36133:soil|Q1155083:granular material|Q214609...entity,object,physical objectentity,object,physical object,product
92Q426Q2386606animal rightsrightPROPERTYQ2845837Q11210tripolar coordinatescoordinate systemPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ2386606:right|Q7748:law|Q1151067:rule|Q268459...Q11210:coordinate system|Q184876:frame of refe...entity,object,abstract objectentity,object,abstract object,structure,relation
93Q305Q186361corporal punishmentpunishmentPROPERTYQ3436733Q50000decisive victoryvictoryPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ186361:punishment|Q2995644:result|Q733541:con...Q50000:victory|Q2995644:result|Q733541:consequ...entity,actionentity,property
94Q4812Q527day skyskyTEMPORALQ9182675Q1107656perennial gardengardenTEMPORALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ527:sky|Q107:space|Q3054889:measurable set|Q3...Q1107656:garden|Q35145743:human-made landform|...entity,object,abstract object,relationentity,object,physical object,abstract object,...
95Q318887Q527evening skyskyTEMPORALQ18354756Q344far futurefutureTEMPORALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ527:sky|Q107:space|Q3054889:measurable set|Q3...Q344:future|Q11471:time|Q3054889:measurable se...entity,object,abstract object,relationentity,object,abstract object,relation
96Q104857623Q374raspberry vodkavodkaMATERIALQ1757352Q13317soy yogurtyogurtMATERIALPOS_SAME_ANCVERIFIEDNaNNaNNaNQ374:vodka|Q56139:liquor|Q17562878:spirit drin...Q281:whisky|Q1479546:grain spirit|Q56139:liquo...entity,object,physical object,productentity,object,physical object,product
97Q7076Q6199individualist anarchismanarchismPROPERTYQ2300258Q200726conditional probability distributionprobability distributionPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNNaNNaNNaNentity,object,abstract object,property,relation
98Q380528Q73792color chargechargePROPERTYQ184550Q11379mechanical energyenergyPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ73792:charge|Q4373292:physical property|Q9372...Q11379:energy|Q107715:physical quantity|Q30931...entity,object,abstract object,property,relationentity,object,abstract object,property,relation
99Q1364131Q73792weak hyperchargechargePROPERTYQ240105Q11465radial velocityvelocityPROPERTYPOS_SAME_ANCVERIFIEDNaNNaNNaNQ73792:charge|Q4373292:physical property|Q9372...Q11465:velocity|Q107715:physical quantity|Q309...entity,object,abstract object,property,relationentity,object,abstract object,property,relation
\n", - "
" - ], - "text/plain": [ - " node1 node2 node1_label node2_label relation \\\n", - "75 Q250 Q1921606 computer keyboard keyboard PURPOSE \n", - "76 Q7991 Q336 natural science science PROPERTY \n", - "77 Q16387 Q336 information science science PROPERTY \n", - "78 Q9192 Q7850 Mandarin Chinese Chinese LOCATION \n", - "79 Q56479 Q7850 Jin Chinese Chinese LOCATION \n", - "80 Q561 Q553 human tooth tooth OWNERSHIP \n", - "81 Q5856 Q161 synthetic fiber fiber MATERIAL \n", - "82 Q4543 Q1734 beach volleyball volleyball LOCATION \n", - "83 Q15728017 Q1734 snow volleyball volleyball LOCATION \n", - "84 Q9778 Q638 electronic music music PROPERTY \n", - "85 Q1045756 Q638 microtonal music music PROPERTY \n", - "86 Q699 Q17991521 fairy tale tale PROPERTY \n", - "87 Q9585 Q432 Shia Islam Islam INSTANCE \n", - "88 Q6786 Q6718 bottom quark quark PROPERTY \n", - "89 Q7141 Q420 cell biology biology PROPERTY \n", - "90 Q5860 Q161 carbon fibers fiber MATERIAL \n", - "91 Q6311 Q8104 stellar atmosphere atmosphere LOCATION \n", - "92 Q426 Q2386606 animal rights right PROPERTY \n", - "93 Q305 Q186361 corporal punishment punishment PROPERTY \n", - "94 Q4812 Q527 day sky sky TEMPORAL \n", - "95 Q318887 Q527 evening sky sky TEMPORAL \n", - "96 Q104857623 Q374 raspberry vodka vodka MATERIAL \n", - "97 Q7076 Q6199 individualist anarchism anarchism PROPERTY \n", - "98 Q380528 Q73792 color charge charge PROPERTY \n", - "99 Q1364131 Q73792 weak hypercharge charge PROPERTY \n", - "\n", - " other_node1 other_node2 other_node1_label \\\n", - "75 Q7708416 Q327065 Text display \n", - "76 Q1140700 Q11635 improvisational theatre \n", - "77 Q107181871 Q11032 manuscript newspaper \n", - "78 Q1122452 Q29536 Germanic paganism \n", - "79 Q702065 Q9134 Korean mythology \n", - "80 Q106907987 Q106907993 mammalian oocyte \n", - "81 Q16676963 Q6584340 mint syrup \n", - "82 Q55491 Q55488 underground railway station \n", - "83 Q99689267 Q3305213 leather painting \n", - "84 Q20358335 Q8261 political novel \n", - "85 Q5707594 Q191067 news article \n", - "86 Q58079064 Q2977 protestant cathedral \n", - "87 Q4775051 Q132203 Antiochian Greeks \n", - "88 Q55511397 Q107968 monoatomic anion \n", - "89 Q81197 Q413 nuclear physics \n", - "90 Q5567094 Q80228 glass bottle \n", - "91 Q1037499 Q36133 lunar soil \n", - "92 Q2845837 Q11210 tripolar coordinates \n", - "93 Q3436733 Q50000 decisive victory \n", - "94 Q9182675 Q1107656 perennial garden \n", - "95 Q18354756 Q344 far future \n", - "96 Q1757352 Q13317 soy yogurt \n", - "97 Q2300258 Q200726 conditional probability distribution \n", - "98 Q184550 Q11379 mechanical energy \n", - "99 Q240105 Q11465 radial velocity \n", - "\n", - " other_node2_label other_relation type Verified comment \\\n", - "75 display device PURPOSE POS_SAME_ANC VERIFIED NaN \n", - "76 theatre PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "77 newspaper PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "78 paganism LOCATION POS_SAME_ANC VERIFIED NaN \n", - "79 mythology LOCATION POS_SAME_ANC VERIFIED NaN \n", - "80 vertebrate oocyte OWNERSHIP POS_SAME_ANC VERIFIED NaN \n", - "81 syrup MATERIAL POS_SAME_ANC VERIFIED NaN \n", - "82 railway station LOCATION POS_SAME_ANC VERIFIED NaN \n", - "83 painting LOCATION POS_SAME_ANC VERIFIED NaN \n", - "84 novel PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "85 article PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "86 cathedral PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "87 Greek diaspora INSTANCE POS_SAME_ANC VERIFIED NaN \n", - "88 anion PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "89 physics PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "90 bottle MATERIAL POS_SAME_ANC VERIFIED NaN \n", - "91 soil LOCATION POS_SAME_ANC VERIFIED NaN \n", - "92 coordinate system PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "93 victory PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "94 garden TEMPORAL POS_SAME_ANC VERIFIED NaN \n", - "95 future TEMPORAL POS_SAME_ANC VERIFIED NaN \n", - "96 yogurt MATERIAL POS_SAME_ANC VERIFIED NaN \n", - "97 probability distribution PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "98 energy PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "99 velocity PROPERTY POS_SAME_ANC VERIFIED NaN \n", - "\n", - " par_node par_label pair1_ancestor \\\n", - "75 NaN NaN Q1921606:keyboard|Q864114:input device|Q47146:... \n", - "76 NaN NaN Q336:science|Q11862829:academic discipline|Q10... \n", - "77 NaN NaN Q336:science|Q11862829:academic discipline|Q10... \n", - "78 NaN NaN Q7850:Chinese|Q33857:Sinitic languages|Q45961:... \n", - "79 NaN NaN Q7850:Chinese|Q33857:Sinitic languages|Q45961:... \n", - "80 NaN NaN NaN \n", - "81 NaN NaN Q161:fiber|Q214609:material|Q2424752:product \n", - "82 NaN NaN Q1734:volleyball|Q877517:ball game|Q4438147:sp... \n", - "83 NaN NaN Q1734:volleyball|Q877517:ball game|Q4438147:sp... \n", - "84 NaN NaN Q638:music|Q735:art|Q2018526:arts|Q80083:human... \n", - "85 NaN NaN Q638:music|Q735:art|Q2018526:arts|Q80083:human... \n", - "86 NaN NaN Q17991521:tale|Q1318295:narrative|Q17537576:cr... \n", - "87 NaN NaN NaN \n", - "88 NaN NaN Q6718:quark|Q52234516:elementary fermion|Q4311... \n", - "89 NaN NaN Q420:biology|Q7991:natural science|Q336:scienc... \n", - "90 NaN NaN Q161:fiber|Q214609:material|Q2424752:product \n", - "91 NaN NaN Q8104:atmosphere|Q47495022:shell of an astrono... \n", - "92 NaN NaN Q2386606:right|Q7748:law|Q1151067:rule|Q268459... \n", - "93 NaN NaN Q186361:punishment|Q2995644:result|Q733541:con... \n", - "94 NaN NaN Q527:sky|Q107:space|Q3054889:measurable set|Q3... \n", - "95 NaN NaN Q527:sky|Q107:space|Q3054889:measurable set|Q3... \n", - "96 NaN NaN Q374:vodka|Q56139:liquor|Q17562878:spirit drin... \n", - "97 NaN NaN NaN \n", - "98 NaN NaN Q73792:charge|Q4373292:physical property|Q9372... \n", - "99 NaN NaN Q73792:charge|Q4373292:physical property|Q9372... \n", - "\n", - " pair2_ancestor \\\n", - "75 Q327065:display device|Q778637:output device|Q... \n", - "76 Q11635:theater|Q184485:performing arts|Q201852... \n", - "77 Q11032:newspaper|Q1002697:periodical|Q234460:t... \n", - "78 Q29536:paganism|Q9174:religion|Q3702971:person... \n", - "79 Q9134:mythology|Q49447:world view|Q20978643:po... \n", - "80 NaN \n", - "81 Q6584340:syrup|Q40050:drink|Q2095:food|Q119405... \n", - "82 Q55488:railway station|Q1318558:operation poin... \n", - "83 Q3305213:painting|Q4502142:visual artwork|Q838... \n", - "84 Q8261:novel|Q571:book|Q49848:document|Q234460:... \n", - "85 Q191067:article|Q234460:text|Q11028:informatio... \n", - "86 Q2977:cathedral|Q16970:church building|Q137059... \n", - "87 NaN \n", - "88 Q107968:anion|Q36496:ion|Q2393187:molecular en... \n", - "89 Q413:physics|Q14632398:physical sciences|Q7991... \n", - "90 Q80228:bottle|Q16896124:bin|Q987767:container|... \n", - "91 Q36133:soil|Q1155083:granular material|Q214609... \n", - "92 Q11210:coordinate system|Q184876:frame of refe... \n", - "93 Q50000:victory|Q2995644:result|Q733541:consequ... \n", - "94 Q1107656:garden|Q35145743:human-made landform|... \n", - "95 Q344:future|Q11471:time|Q3054889:measurable se... \n", - "96 Q281:whisky|Q1479546:grain spirit|Q56139:liquo... \n", - "97 NaN \n", - "98 Q11379:energy|Q107715:physical quantity|Q30931... \n", - "99 Q11465:velocity|Q107715:physical quantity|Q309... \n", - "\n", - " top_pars_list \\\n", - "75 entity,object,physical object,abstract object,... \n", - "76 entity,object,abstract object \n", - "77 entity,object,abstract object \n", - "78 entity,object,abstract object,property \n", - "79 entity,object,abstract object,property \n", - "80 entity,object,physical object \n", - "81 entity,object,physical object,product \n", - "82 entity,object,action,phenomenon \n", - "83 entity,object,action,phenomenon \n", - "84 entity,object,abstract object,structure,action \n", - "85 entity,object,abstract object,structure,action \n", - "86 entity,object \n", - "87 entity,object,abstract object,structure,proper... \n", - "88 entity,object,physical object,particle \n", - "89 entity,object,abstract object \n", - "90 entity,object,physical object,product \n", - "91 entity,object,physical object \n", - "92 entity,object,abstract object \n", - "93 entity,action \n", - "94 entity,object,abstract object,relation \n", - "95 entity,object,abstract object,relation \n", - "96 entity,object,physical object,product \n", - "97 NaN \n", - "98 entity,object,abstract object,property,relation \n", - "99 entity,object,abstract object,property,relation \n", - "\n", - " Unnamed: 18 \n", - "75 entity,object,physical object,abstract object,... \n", - "76 entity,object,abstract object,structure \n", - "77 entity,object,physical object,abstract object,... \n", - "78 entity,object,abstract object,structure,proper... \n", - "79 entity,object,abstract object,property,relatio... \n", - "80 NaN \n", - "81 entity,object,physical object,product \n", - "82 entity,object,physical object,structure \n", - "83 entity,object,physical object \n", - "84 entity,object,physical object,abstract object,... \n", - "85 entity,object,abstract object \n", - "86 entity,object,physical object,structure \n", - "87 NaN \n", - "88 entity,object,physical object,particle \n", - "89 entity,object,abstract object \n", - "90 entity,object,physical object,structure,product \n", - "91 entity,object,physical object,product \n", - "92 entity,object,abstract object,structure,relation \n", - "93 entity,property \n", - "94 entity,object,physical object,abstract object,... \n", - "95 entity,object,abstract object,relation \n", - "96 entity,object,physical object,product \n", - "97 entity,object,abstract object,property,relation \n", - "98 entity,object,abstract object,property,relation \n", - "99 entity,object,abstract object,property,relation " - ] - }, - "execution_count": 177, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingDFSubset" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "id": "running-conspiracy", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a178a238123f40b19e775fa110bcaaa6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from collections import defaultdict\n", - "from tqdm.notebook import tqdm\n", - "\n", - "subset_nodes = set(trainingDFSubset.node1.to_list() + trainingDFSubset.node2.to_list() + trainingDFSubset.other_node1.to_list() + trainingDFSubset.other_node2.to_list())\n", - "parent_dict = defaultdict(set)\n", - "with gzip.open('../../wd-correctness/wikidata-20210215/derived.P279star.tsv.gz') as fIN:\n", - " first_line = True\n", - " for line in tqdm(fIN):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line_s = line.decode(\"utf-8\").strip().split('\\t')\n", - " if line_s[0] in subset_nodes:\n", - " parent_dict[line_s[0]].add(line_s[2])" - ] - }, - { - "cell_type": "code", - "execution_count": 166, - "id": "private-catch", - "metadata": {}, - "outputs": [], - "source": [ - "top_nodes = {'Q35120': 'entity', 'Q488383': 'object', 'Q223557': 'physical object', 'Q7184903': 'abstract object',\n", - " 'Q6671777': 'structure', 'Q219858': 'zone', 'Q1621273': 'particle', 'Q174211': 'organic compound', \n", - " 'Q4026292': 'action', 'Q937228': 'property', 'Q2424752': 'product', 'Q215627': 'person', 'Q4897819': 'role',\n", - " 'Q7239': 'organism', 'Q930933': 'relation', 'Q16722960': 'phenomenon'}" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "id": "prepared-senegal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['entity',\n", - " 'object',\n", - " 'physical object',\n", - " 'abstract object',\n", - " 'structure',\n", - " 'zone',\n", - " 'particle',\n", - " 'organic compound',\n", - " 'action',\n", - " 'property',\n", - " 'product',\n", - " 'person',\n", - " 'role',\n", - " 'organism',\n", - " 'relation',\n", - " 'phenomenon']" - ] - }, - "execution_count": 167, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(top_nodes.values())" - ] - }, - { - "cell_type": "markdown", - "id": "detailed-painting", - "metadata": {}, - "source": [ - "# Pairwise Top Parent Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "id": "brief-postcard", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "369de020404143008c60621efca55090", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from collections import defaultdict\n", - "from tqdm.notebook import tqdm\n", - "\n", - "child_parent_dict = defaultdict(set)\n", - "parent_child_dict = defaultdict(set)\n", - "with gzip.open('../../wd-correctness/wikidata-20210215/derived.P279.tsv.gz') as fIN:\n", - " first_line = True\n", - " for line in tqdm(fIN):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line_s = line.decode(\"utf-8\").strip().split('\\t')\n", - " child_parent_dict[line_s[1]].add(line_s[3])\n", - " parent_child_dict[line_s[3]].add(line_s[1])" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "careful-divorce", - "metadata": {}, - "outputs": [], - "source": [ - "def find_parent_path(curr, top_parent, path):\n", - " if curr == top_parent:\n", - " return path + [top_parent]\n", - " elif curr not in child_parent_dict:\n", - " return False\n", - " \n", - " for par in child_parent_dict[curr]:\n", - " new_path = find_parent_path(par, top_parent, path + [curr])\n", - " if new_path:\n", - " return new_path\n", - "\n", - " return None" - ] - }, - { - "cell_type": "code", - "execution_count": 143, - "id": "atlantic-cornwall", - "metadata": {}, - "outputs": [], - "source": [ - "def find_common_top_parents(node1, node2):\n", - " pars1, pars2 = set(), set()\n", - " for top_node in top_nodes:\n", - " if top_node in parent_dict[node1]:\n", - " pars1.add(top_node)\n", - " if top_node in parent_dict[node2]:\n", - " pars2.add(top_node)\n", - " return pars1 & pars2" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "id": "black-confidentiality", - "metadata": {}, - "outputs": [], - "source": [ - "def shortest_common_path(node1, node2):\n", - " node1_shortest, node2_shortest = [], []\n", - " shortest_len = float('inf')\n", - " for top_par in find_common_top_parents(node1, node2):\n", - " node1_path = find_parent_path(node1, top_par, [])\n", - " node2_path = find_parent_path(node2, top_par, [])\n", - " \n", - " if node1_path and node2_path and max(len(node1_path), len(node2_path)) < shortest_len:\n", - " node1_shortest = node1_path\n", - " node2_shortest = node2_path\n", - " shortest_len = max(len(node1_path), len(node2_path))\n", - " node1_shortest = \"|\".join([node + ':' + fetch_label(node) for node in node1_shortest])\n", - " node2_shortest = \"|\".join([node + ':' + fetch_label(node) for node in node2_shortest])\n", - " pars1 = {}\n", - " pars2 = {}\n", - " for top_node in top_nodes:\n", - " if top_node in parent_dict[row['node2']]:\n", - " pars1[top_node] = top_nodes[top_node]\n", - " if top_node in parent_dict[row['other_node2']]:\n", - " pars2[top_node] = top_nodes[top_node]\n", - " return node1_shortest + \";\" + node2_shortest + ';' + \",\".join(list(pars1.values())) + ';' + \",\".join(list(pars2.values()))" - ] - }, - { - "cell_type": "code", - "execution_count": 198, - "id": "laden-charter", - "metadata": {}, - "outputs": [], - "source": [ - "def fetch_label(qnode):\n", - " try:\n", - " return requests.get('http://ckg07:9200/wikidatadwd-augmented/_doc/'+qnode).json()['_source']['labels']['en'][0]\n", - " except:\n", - " return str(False)" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "id": "material-interpretation", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e73c4a3b211f45ec9d1ebc8d6895bbae", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "trainingSubsetCommonPaths = []\n", - "for _,row in tqdm(trainingDFSubset.iterrows()):\n", - " trainingSubsetCommonPaths.append(shortest_common_path(row['node2'], row['other_node2']))" - ] - }, - { - "cell_type": "code", - "execution_count": 180, - "id": "promotional-diamond", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Q1921606:keyboard|Q864114:input device|Q47146:user interface|Q23808:interface|Q230629:connection|Q930933:relation;Q327065:display device|Q778637:output device|Q47146:user interface|Q23808:interface|Q230629:connection|Q930933:relation;entity,object,physical object,abstract object,product,person,relation;entity,object,physical object,abstract object,product,relation',\n", - " 'Q336:science|Q11862829:academic discipline|Q1047113:specialty|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q11635:theater|Q184485:performing arts|Q2018526:arts|Q80083:humanities|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;entity,object,abstract object;entity,object,abstract object,structure',\n", - " 'Q336:science|Q11862829:academic discipline|Q1047113:specialty|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q11032:newspaper|Q1002697:periodical|Q234460:text|Q11028:information|Q7184903:abstract object;entity,object,abstract object;entity,object,physical object,abstract object,structure,action',\n", - " 'Q7850:Chinese|Q33857:Sinitic languages|Q45961:Sino-Tibetan languages|Q7524744:Sino-Austronesian languages|Q20162172:human language|Q315:language|Q17376908:languoid|Q7184903:abstract object;Q29536:paganism|Q9174:religion|Q3702971:personal data|Q61151961:individual data|Q42848:data|Q11028:information|Q7184903:abstract object;entity,object,abstract object,property;entity,object,abstract object,structure,property,relation',\n", - " 'Q7850:Chinese|Q33857:Sinitic languages|Q45961:Sino-Tibetan languages|Q7524744:Sino-Austronesian languages|Q20162172:human language|Q315:language|Q17376908:languoid|Q7184903:abstract object;Q9134:mythology|Q49447:world view|Q20978643:point of view|Q595523:notion|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;entity,object,abstract object,property;entity,object,abstract object,property,relation,phenomenon',\n", - " ';;entity,object,physical object;',\n", - " 'Q161:fiber|Q214609:material|Q2424752:product;Q6584340:syrup|Q40050:drink|Q2095:food|Q1194058:disposable product|Q2424752:product;entity,object,physical object,product;entity,object,physical object,product',\n", - " 'Q1734:volleyball|Q877517:ball game|Q4438147:sport games|Q11410:game|Q17538258:recreative work|Q386724:work|Q15401930:product|Q488383:object;Q55488:railway station|Q1318558:operation point|Q800279:railway facility|Q27096235:artificial geographic entity|Q8205328:artificial physical object|Q223557:physical object|Q4406616:concrete object|Q488383:object;entity,object,action,phenomenon;entity,object,physical object,structure',\n", - " 'Q1734:volleyball|Q877517:ball game|Q4438147:sport games|Q11410:game|Q17538258:recreative work|Q386724:work|Q15401930:product|Q488383:object;Q3305213:painting|Q4502142:visual artwork|Q838948:work of art|Q28877:goods|Q337060:perceptible object|Q223557:physical object|Q4406616:concrete object|Q488383:object;entity,object,action,phenomenon;entity,object,physical object',\n", - " 'Q638:music|Q735:art|Q2018526:arts|Q80083:humanities|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q8261:novel|Q571:book|Q49848:document|Q234460:text|Q11028:information|Q7184903:abstract object;entity,object,abstract object,structure,action;entity,object,physical object,abstract object,structure,action',\n", - " 'Q638:music|Q735:art|Q2018526:arts|Q80083:humanities|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q191067:article|Q234460:text|Q11028:information|Q7184903:abstract object;entity,object,abstract object,structure,action;entity,object,abstract object',\n", - " 'Q17991521:tale|Q1318295:narrative|Q17537576:creative work|Q15621286:intellectual work|Q386724:work|Q15401930:product|Q488383:object|Q35120:entity;Q2977:cathedral|Q16970:church building|Q1370598:place of worship|Q811979:architectural structure|Q811430:human-made geographic feature|Q35145743:human-made landform|Q27096235:artificial geographic entity|Q27096213:geographic entity|Q58416391:spatial entity|Q58415929:spatio-temporal entity|Q35120:entity;entity,object;entity,object,physical object,structure',\n", - " ';;entity,object,abstract object,structure,property,relation;',\n", - " 'Q6718:quark|Q52234516:elementary fermion|Q43116:elementary particle|Q63243922:elementary object|Q488383:object|Q35120:entity;Q107968:anion|Q36496:ion|Q2393187:molecular entity|Q43460564:chemical entity|Q58416391:spatial entity|Q58415929:spatio-temporal entity|Q35120:entity;entity,object,physical object,particle;entity,object,physical object,particle',\n", - " 'Q420:biology|Q7991:natural science|Q336:science|Q11862829:academic discipline|Q1047113:specialty|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;Q413:physics|Q14632398:physical sciences|Q7991:natural science|Q336:science|Q11862829:academic discipline|Q1047113:specialty|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;entity,object,abstract object;entity,object,abstract object',\n", - " 'Q161:fiber|Q214609:material|Q2424752:product;Q80228:bottle|Q16896124:bin|Q987767:container|Q39546:tool|Q16798631:equipment|Q2424752:product;entity,object,physical object,product;entity,object,physical object,structure,product',\n", - " 'Q8104:atmosphere|Q47495022:shell of an astronomical object|Q23497974:covering|Q23497981:layer|Q223557:physical object;Q36133:soil|Q1155083:granular material|Q214609:material|Q2424752:product|Q28877:goods|Q337060:perceptible object|Q223557:physical object;entity,object,physical object;entity,object,physical object,product',\n", - " 'Q2386606:right|Q7748:law|Q1151067:rule|Q2684591:statement|Q108163:proposition|Q474328:declarative sentence|Q41796:sentence|Q9380010:denunciation|Q628523:message|Q11028:information|Q7184903:abstract object;Q11210:coordinate system|Q184876:frame of reference|Q20978643:point of view|Q595523:notion|Q9081:knowledge|Q104127086:memory|Q11028:information|Q7184903:abstract object;entity,object,abstract object;entity,object,abstract object,structure,relation',\n", - " 'Q186361:punishment|Q2995644:result|Q733541:consequence|Q408386:inference|Q3249551:process|Q20937557:series|Q16887380:group|Q28813620:set|Q99527517:collection entity|Q35120:entity;Q50000:victory|Q2995644:result|Q733541:consequence|Q408386:inference|Q3249551:process|Q20937557:series|Q16887380:group|Q28813620:set|Q99527517:collection entity|Q35120:entity;entity,action;entity,property',\n", - " 'Q527:sky|Q107:space|Q3054889:measurable set|Q36161:set|Q217594:class|Q16889133:class|Q99527517:collection entity|Q35120:entity;Q1107656:garden|Q35145743:human-made landform|Q27096235:artificial geographic entity|Q27096213:geographic entity|Q58416391:spatial entity|Q58415929:spatio-temporal entity|Q35120:entity;entity,object,abstract object,relation;entity,object,physical object,abstract object,structure,relation',\n", - " 'Q527:sky|Q107:space|Q3054889:measurable set|Q36161:set|Q217594:class|Q246672:mathematical object|Q7184903:abstract object;Q344:future|Q11471:time|Q3054889:measurable set|Q36161:set|Q217594:class|Q246672:mathematical object|Q7184903:abstract object;entity,object,abstract object,relation;entity,object,abstract object,relation',\n", - " 'Q374:vodka|Q56139:liquor|Q17562878:spirit drink|Q154:alcoholic beverage|Q40050:drink|Q2095:food|Q1194058:disposable product|Q2424752:product;Q13317:yogurt|Q26868224:fermented milk products, other than sour cream and cottage cheese|Q3506176:fermented milk product|Q147538:soft drink|Q2647467:non-alcoholic beverage|Q40050:drink|Q2095:food|Q1194058:disposable product|Q2424752:product;entity,object,physical object,product;entity,object,physical object,structure,action,property,product,phenomenon',\n", - " ';;;entity,object,abstract object,property,relation',\n", - " 'Q73792:charge|Q4373292:physical property|Q937228:property;Q11379:energy|Q107715:physical quantity|Q309314:quantity|Q937228:property;entity,object,abstract object,property,relation;entity,object,abstract object,property,relation',\n", - " 'Q73792:charge|Q4373292:physical property|Q937228:property;Q11465:velocity|Q107715:physical quantity|Q309314:quantity|Q937228:property;entity,object,abstract object,property,relation;entity,object,abstract object,property,relation']" - ] - }, - "execution_count": 180, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingSubsetCommonPaths" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "moderate-roller", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "diverse-clinton", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchDescription(qnode):\n", - " try:\n", - " return requests.get('http://ckg07:9200/wikidatadwd-augmented/_doc/'+qnode).json()['_source']['descriptions']['en'][0]\n", - " except:\n", - " return str(False)" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "id": "painful-craft", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d0eaf93e5d0947d9ae34fd4739b07cdd", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "trainingSubsetCommonPaths = []\n", - "for _,row in tqdm(trainingDF.iterrows()):\n", - " trainingSubsetCommonPaths.append((fetchDescription(row['node1']) + '&' + fetchDescription(row['node2']) + '&' + \\\n", - " fetchDescription(row['other_node1']) + '&' + fetchDescription(row['other_node2'])))" - ] - }, - { - "cell_type": "code", - "execution_count": 189, - "id": "front-consortium", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['device comprising an arrangement of buttons or keys used to input text in computers&data input device&keyboard of a typewriter&data input device',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&applied science devoted to the study of food&systematic enterprise that builds and organizes knowledge',\n", - " 'study of the philosophical, biological, social, and cultural aspects of human life.&systematic enterprise that builds and organizes knowledge&field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&language family&group of languages that belongs to the Sino-Tibetan family',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&group of Chinese languages primarily spoken in the whole city of Shanghai, Zhejiang province and the southern half of Jiangsu province, as well as bordering areas.&group of languages that belongs to the Sino-Tibetan family',\n", - " 'calcified whitish structure in humans\\\\ mouths used to break down food&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&False&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&any fibre derived from natural sources such as plants, animals or minerals&natural or synthetic substance made of long, thin filaments',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net',\n", - " 'False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots&False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&music performed in front of an audience&art form, and cultural activity, whose medium is sound',\n", - " 'use in music of microtones (intervals smaller than a semitone)&art form, and cultural activity, whose medium is sound&music genre&art form, and cultural activity, whose medium is sound',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&variante of tale that pertains to urbanity&prose fiction that can be either rooted in oral tradition or created by an author',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&denomination of Islam&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths',\n", - " 'type of quark&class of fundamental particles&type of quark&class of fundamental particles',\n", - " 'scientific discipline that studies cells&science that studies living beings&academic discipline&science that studies living beings',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&atmosphere of astronomical objects outside our solar system&layer of gases surrounding a material body',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&right to use the dining facilities offered to the members (and possibly their guests, when accompanied by a member) of certain organisations such as universities, clubs, colleges and bodies such as the House of Lords, and the Hawks\\\\ Club&legal position allowing a person to require a certain thing from another person or other persons',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&False&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable',\n", - " 'designation for the sky in day&everything that is above the surface of the Earth&view of the starry sky to a respective season between twilight and a few hours after sunset&everything that is above the surface of the Earth',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&the study of the recording and retrieval of information&systematic enterprise that builds and organizes knowledge',\n", - " 'wine made from dark-colored grape varieties with coloring from the skin&alcoholic drink typically made from grapes&wine that is fermented without grape skin, with a yellowish color&alcoholic drink typically made from grapes',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&movement in political theology and political philosophy&political philosophy and movement',\n", - " 'physical property that quantifies an object\\\\s interaction with electric fields&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number',\n", - " 'False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&property of quarks and gluons that is related to the particles\\\\ strong interactions in the theory of quantum chromodynamics&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&keypad that appears on a \\\\Touch Tone\\\\ telephone&computer input device',\n", - " 'keyboard of a typewriter&data input device&electronic device that can read and output printed barcodes to a computer&device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&political position based on the interests and perspectives of social groups with which people identify&practice and theory of influencing other people, as in government',\n", - " 'applied science devoted to the study of food&systematic enterprise that builds and organizes knowledge&False&set of beliefs and practices for a group or community',\n", - " 'field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge&therapeutic method of treatment&health profession that aims to address the illnesses or injuries that limit a person\\\\s abilities to function in everyday lives',\n", - " 'study of the philosophical, biological, social, and cultural aspects of human life.&systematic enterprise that builds and organizes knowledge&field of accounting concerned with the summary, analysis and reporting of financial transactions related to a business&measurement, processing and communication of financial information about economic entities',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&False&East Asian language',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&dialect of English spoken in Nigeria&West Germanic language originating in England',\n", - " 'human organ&organ for the circulation of blood in animal circulatory systems&False&rigid organ that constitute part of the endoskeleton of vertebrates',\n", - " 'feature of the face&organ that smells and facilitates breathing&organ that serves as the center of the nervous system in apes and monkeys&organ that serves as the center of the nervous system in all vertebrate and most invertebrate animals',\n", - " 'False&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&False&essential respiration organ in many air-breathing animals',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&soft wood&fibrous material from trees or other plants',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&metal resistant to corrosion and oxidation in moist air, e.g. ruthenium, rhodium, palladium, silver, osmium, iridium, platinum, and gold&element, compound or alloy that is a good conductor of both electricity and heat',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&water sport&team sport played on a court with baskets on either end',\n", - " 'sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&game derived from association football adapted for play in an indoor arena&team sports that involve, to varying degrees, kicking a ball to score a goal',\n", - " 'team sport featuring constant motion, communication and bursts of explosiveness.&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&informal ad hoc variant of the game of cricket, played by people of all genders and all ages in gardens, back yards, on the street, in parks, carparks, beaches and any area not specifically intended for the purpose&team sport played with bats and balls',\n", - " 'False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots&tennis variant&racket sport played on a court bisected by a net',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&literary genre&written art form',\n", - " 'circulation of literature beyond its country of origin&written art form&dance performed by a single dancer&rhythmic movement of the body',\n", - " 'False&creative work in which pictures and text convey information such as narratives&False&visual artwork, surface artistically covered with paint',\n", - " 'music genre&art form, and cultural activity, whose medium is sound&use of digital technology to distribute or project motion pictures as opposed to the historical use of reels of motion picture film&art of film making and projection',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&literary genre&narrative text, normally of a substantial length and in the form of prose describing a fictional and sequential story',\n", - " 'False&publication type&blog on fashion&discussion or informational site published on the World Wide Web',\n", - " 'False&work comprising an ordered list of items&article that is published in news media&text that forms an independent part of a publication',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&Christian doctrine professed by the Roman Catholic Church&monotheistic religious group based on the belief of Jesus being the Son of God',\n", - " 'denomination of Islam&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadithsðnic religion of the Yao people in China, heavily based on Taoism since the 13th century, similar to the communitarian Taoism in the earliest Taoist movements in China proper&religious or philosophical tradition of Chinese origin',\n", - " 'False&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&modernized form of Buddhism&religion founded by the Buddha',\n", - " 'type of quark&class of fundamental particles&ion having a negative charge&atom or molecule in which the total number of electrons is not equal to the total number of protons, giving the atom a net positive or negative electrical charge',\n", - " 'type of quark&class of fundamental particles&class of ions&atom or molecule in which the total number of electrons is not equal to the total number of protons, giving the atom a net positive or negative electrical charge',\n", - " 'scientific discipline that studies cells&science that studies living beings&scientific study of minerals&study of the composition, structure, physical properties, and history of Earth\\\\s components, and the processes by which they are shaped',\n", - " 'field of physics that deals with the structure and behavior of atomic nuclei&study of matter and its motion, along with related concepts such as energy and force&subdiscipline within chemistry involving the scientific study of carbon-based compounds, hydrocarbons, and their derivatives&branch of physical science concerned with the composition, structure and properties of matter',\n", - " 'medical speciality dealing with the diseases of animals, animal welfare, etc.&field of study for diagnosing, treating and preventing disease&branch of psychology focused on personality&The scientific study of the way the human mind works and how it influences behaviour, or the influence of a particular person\\\\s character on their behaviour',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&wire made of iron&single, usually cylindrical, flexible strand or rod of metal',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&paint type&colored composition applied over a surface that dries as a solid film',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&atmospheric layer of Earth&atmospheric layer of Earth',\n", - " 'water-filled depression between coastal sand dunes&land area that is permanently or seasonally saturated with water&sub-continental land that is surrounded by water&contiguous area of land surrounded by ocean; large continuous area of land, either surrounded by sea or contiguous with another landmass',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&Ttx on shares transferred electronically without using a stock transfer form&method to impose financial charge or other levy upon a taxpayer by a government or functional equivalent',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&award for authors and literary associations&something given to a person or a group of people to recognize their merit or excellence',\n", - " 'land areas near the shore that are frequently or permanently covered by water&land area that is permanently or seasonally saturated with water&space separate from the rest of the residential garden&planned space set aside for the display, cultivation, and enjoyment of plants',\n", - " 'rock-like reefs, composed of dense aggregations of oysters&feature lying beneath the surface of the water&garden where flowers are grown and displayed&planned space set aside for the display, cultivation, and enjoyment of plants',\n", - " 'wine made from dark-colored grape varieties with coloring from the skin&alcoholic drink typically made from grapes&kind of beer&alcoholic drink',\n", - " 'wine that is fermented without grape skin, with a yellowish color&alcoholic drink typically made from grapes&Wikimedia disambiguation page&alcoholic drink',\n", - " 'False&distilled beverage&type of vodka flavored with raspberries&distilled alcoholic beverage',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&political ideology&political philosophy focused on retaining traditional social institutions',\n", - " 'movement in political theology and political philosophy&political philosophy and movement&nationalism based on the its activity on the internet&ideology and movement that promotes the interests of a particular nation (as in a group of people) especially with the aim of gaining and maintaining the nation\\\\s sovereignty (self-governance) over its homeland',\n", - " 'form of anarchism&political philosophy and movement&False&belief or attitude that some individuals, who form an elite, are those whose influence or authority is greater than that of others',\n", - " 'physical property that quantifies an object\\\\s interaction with electric fields&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&third in a set of four quantum numbers, distinguishes the orbitals available within a subshell, and is used to calculate the azimuthal component of the orientation of orbital in space¬ation for conserved quantities in physics and chemistry',\n", - " 'type of frequency&inverse of the period duration&Force that makes a moving body follow a curved path&influence that causes an object to change motion',\n", - " 'rate at which electric energy is transferred by an electric circuit&rate at which energy is transferred, used, or transformed&False&mass per volume',\n", - " 'average velocity attained by charged particles in a material due to electric field&rate of change of the position of an object as a function of time, and the direction of that change&potential and kinetic energy associated with the position and movement of a physical object&quantitative physical property transferred to objects to perform heating or work on them',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&False&output device for presentation of information in visual form',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&theatrical genre&collaborative form of performing and fine art',\n", - " 'field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge&False&scheduled publication containing news of events, articles, features, editorials, and advertising',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan familyðnic religion practiced by the Germanic peoples from the Iron Age until Christianisation&non-Abrahamic religion, or modern religious movement such as nature worship',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&Mythology that existed in the Korean Peninsula from ancient times.&stories of gods and fairies and fantastic creatures',\n", - " 'calcified whitish structure in humans\\\\ mouths used to break down food&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&False&False',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&False&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&railway station located below grade&railway facility where trains regularly stop to load or unload passengers and/or freight',\n", - " 'sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&type of artwork&visual artwork, surface artistically covered with paint',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&literary genre&narrative text, normally of a substantial length and in the form of prose describing a fictional and sequential story',\n", - " 'use in music of microtones (intervals smaller than a semitone)&art form, and cultural activity, whose medium is sound&article that is published in news media&text that forms an independent part of a publication',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&church that is the seat of a bishop of any of the Protestant churches&Christian church, which is seat of a bishop',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&Christian ethnoreligious Group&diaspora',\n", - " 'type of quark&class of fundamental particles&anion consisting of one atom&ion having a negative charge',\n", - " 'scientific discipline that studies cells&science that studies living beings&field of physics that deals with the structure and behavior of atomic nuclei&study of matter and its motion, along with related concepts such as energy and force',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&lidded container made from glass&cylindrical container',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&finely grained regolith on the Moon&natural body consisting of layers that are primarily composed of minerals',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&given a reference triangle, a coordinate system whose three coordinates are distances to each of the three vertices of the triangle&System for determining the position of a point by a tuple of scalars',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&A military victory determines the undisputed outcome of a war&above a gate is the word Invictus',\n", - " 'designation for the sky in day&everything that is above the surface of the Earth&False&planned space set aside for the display, cultivation, and enjoyment of plants',\n", - " 'view of the starry sky to a respective season between twilight and a few hours after sunset&everything that is above the surface of the Earth&time beyond 10 000 AD&time which has yet to occur',\n", - " 'type of vodka flavored with raspberries&distilled alcoholic beverage&False&dairy product',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&False&mathematical function that describes the probability of occurrence of different possible outcomes in an experiment',\n", - " 'property of quarks and gluons that is related to the particles\\\\ strong interactions in the theory of quantum chromodynamics&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&potential and kinetic energy associated with the position and movement of a physical object&quantitative physical property transferred to objects to perform heating or work on them',\n", - " 'False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&subclass of velocity&rate of change of the position of an object as a function of time, and the direction of that change',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&paint that air dries to a hard, usually glossy, finish, used for coating surfaces that are outdoors or otherwise subject to hard wear or variations in temperature&colored composition applied over a surface that dries as a solid film',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&deep blue colored glass with cobalt&amorphous solid that exhibits a glass transition when heated towards the liquid state',\n", - " 'study of the philosophical, biological, social, and cultural aspects of human life.&systematic enterprise that builds and organizes knowledge&organization or political movement leading a rebellion, or a non-violent social movement, against a colonial power or national government&type of group action',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&computer whose batteries use solar power&foldable portable personal computer for mobile use',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&False&material produced by twining, weaving, felting, knotting, or otherwise processing natural or synthetic fibers',\n", - " 'calcified whitish structure in humans\\\\ mouths used to break down food&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&narrative text, normally of a substantial length and in the form of prose describing a fictional and sequential story&a written text that can be published in printed or electronic form',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&Temporary or emergency government body/authority created when none exists&system or group of people governing an organized community, often a state',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&form of dictatorial military rule&autocratic form of government which is ruled by a sole leader',\n", - " 'False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots&stage of the English language from about the 12th through 15th centuries&West Germanic language originating in England',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&body exerting the executive power in France&system or group of people governing an organized community, often a state',\n", - " 'use in music of microtones (intervals smaller than a semitone)&art form, and cultural activity, whose medium is sound&False&undomesticated organisms that grow or live wild in an area without being introduced by humans',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&type of wood&fibrous material from trees or other plants',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&music that developed in literate cultures, replacing prehistoric music&art form, and cultural activity, whose medium is sound',\n", - " 'type of quark&class of fundamental particles&civilization in control of a planetary system&organized cultural society that encounters many communities, on a scale of a nation or human, as well as a system of development',\n", - " 'scientific discipline that studies cells&science that studies living beings&social movement seeking to change anti-fat bias in social attitudes&type of group action',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&type of financial institution&financial institution',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&False&material or object that produces a magnetic field',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&Wikimedia list article&undomesticated organisms that grow or live wild in an area without being introduced by humans',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&lands originally owned by the monarchy of the United Kingdom&permanently dedicated recreation area, often open to the public and generally characterized by natural, historic, or landscape features',\n", - " 'designation for the sky in day&everything that is above the surface of the Earth&collection of songs, poetry, dances etc. of China&cultural expressions of a particular group of people, consisting of legends, music, oral history, proverbs, jokes, popular beliefs, fairy tales, etc.',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&cultural movement&cultural movement that spanned the period roughly from the 14th to the 17th century',\n", - " 'wine made from dark-colored grape varieties with coloring from the skin&alcoholic drink typically made from grapes&dialect&West Germanic language originating in England',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&False&society\\\\s way of life within anthropology',\n", - " 'physical property that quantifies an object\\\\s interaction with electric fields&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&ritual and ceremonial mask of Sub-Saharan Africa&any full or partial face covering, whether ceremonial, protective, decorative, or used as disguise',\n", - " 'False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&flora and fauna of the Philippines&undomesticated organisms that grow or live wild in an area without being introduced by humans',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&False&investigation and reporting of events, issues and trends to a broad audience',\n", - " 'keyboard of a typewriter&data input device&ancient Egyptian funerary text&a written text that can be published in printed or electronic form',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&Expressive body of culture shared by a particular group.&cultural expressions of a particular group of people, consisting of legends, music, oral history, proverbs, jokes, popular beliefs, fairy tales, etc.',\n", - " 'applied science devoted to the study of food&systematic enterprise that builds and organizes knowledge&False&cultural movement that spanned the period roughly from the 14th to the 17th century',\n", - " 'field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge&infusion made from roasted barley grains&drink made from infusing boiling water with the leaves of the tea plant',\n", - " 'study of the philosophical, biological, social, and cultural aspects of human life.&systematic enterprise that builds and organizes knowledge&False&system or group of people governing an organized community, often a state',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&wildlife that can live or thrive in urban environments&undomesticated organisms that grow or live wild in an area without being introduced by humans',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&music genre&art form, and cultural activity, whose medium is sound',\n", - " 'human organ&organ for the circulation of blood in animal circulatory systems¤t issue that has to be reported&communication of selected information on current events',\n", - " 'feature of the face&organ that smells and facilitates breathing&drink made from infusing fruit and other material in hot water&drink made from infusing boiling water with the leaves of the tea plant',\n", - " 'False&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&reference book containing an alphabetical list of slang&collection of words and their meanings',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&New model of banks initiative by Reserve Bank of India&financial institution',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&False&cultural expressions of a particular group of people, consisting of legends, music, oral history, proverbs, jokes, popular beliefs, fairy tales, etc.',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&False&interaction among people in which they create, share, and/or exchange information and ideas in virtual communities and networks',\n", - " 'sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&economy with an increased emphasis on informational activities and information industry&area of the production, distribution and trade, as well as consumption of goods and services by different agents',\n", - " 'team sport featuring constant motion, communication and bursts of explosiveness.&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&drink made from sepals of Hibiscus sabdariffa&drink made from infusing boiling water with the leaves of the tea plant',\n", - " 'False&sport in which players attempt to hit a ball with a club into a goal using a minimum number of shots&False&collection of words and their meanings',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&syrup usually made from the xylem sap of sugar maple, red maple, or black maple trees&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'circulation of literature beyond its country of origin&written art form&birds that live on or around water&class of tetrapods',\n", - " 'False&creative work in which pictures and text convey information such as narratives&type of garbage&unwanted or unusable material',\n", - " 'music genre&art form, and cultural activity, whose medium is sound&painted decoration or scene applied to a prepared wall or ceiling surface&visual artwork, surface artistically covered with paint',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&coffee brewing method originating from Turkey&brewed beverage prepared from roasted coffee seeds',\n", - " 'False&publication type&aggregate of past events from the beginning of recorded human history to the Early Middle Ages&past events and their tracks or records, studied by various branches of human sciences of history',\n", - " 'False&work comprising an ordered list of items&continental geography&science that studies the terrestrial surface, the societies that inhabit it and the territories, landscapes, places or regions that form it when interacting with each other',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&method of brewing coffee&brewed beverage prepared from roasted coffee seeds',\n", - " 'denomination of Islam&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&creation and maintenance of colonies by people from another territory&creation of an unequal relationship between states through domination',\n", - " 'False&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&type of writing tool&writing and drawing implement using liquid or paste ink',\n", - " 'type of quark&class of fundamental particles&insect which lives in the air or on land and breeds in water&class of arthropods',\n", - " 'type of quark&class of fundamental particles&bank that specializes in originating and/or servicing mortgage loans&financial institution',\n", - " 'scientific discipline that studies cells&science that studies living beings&box containing cigars&container (usually cuboidal) with at least one roughly rectangular cross-section',\n", - " 'field of physics that deals with the structure and behavior of atomic nuclei&study of matter and its motion, along with related concepts such as energy and force&Variety of coffee plant&brewed beverage prepared from roasted coffee seeds',\n", - " 'medical speciality dealing with the diseases of animals, animal welfare, etc.&field of study for diagnosing, treating and preventing disease&chocolate-flavored condiment&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&An economic system combining public and private production&area of the production, distribution and trade, as well as consumption of goods and services by different agents',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&fire lit at a campsite&rapid oxidation of a material',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&False&writing and drawing implement using liquid or paste ink',\n", - " 'water-filled depression between coastal sand dunes&land area that is permanently or seasonally saturated with water&False&science that studies the terrestrial surface, the societies that inhabit it and the territories, landscapes, places or regions that form it when interacting with each other',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&physical money&object or record accepted as payment',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&a pencil whose lead contains a dye so that its stroke is indelible&writing implement',\n", - " 'land areas near the shore that are frequently or permanently covered by water&land area that is permanently or seasonally saturated with water&type of private company&financial institution',\n", - " 'rock-like reefs, composed of dense aggregations of oysters&feature lying beneath the surface of the water&clean subterran source of water, rich in minerals and trace elements&chemical compound; main constituent of the fluids of most living organisms',\n", - " 'wine made from dark-colored grape varieties with coloring from the skin&alcoholic drink typically made from grapes&pattern of human activity and associated with the minority peoples of Russia&society\\\\s way of life within anthropology',\n", - " 'wine that is fermented without grape skin, with a yellowish color&alcoholic drink typically made from grapes&thin grade of paper used for printing books which have many pages&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'False&distilled beverage&material discarded as a byproduct of agriculture&unwanted or unusable material',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&False&perennial woody plant',\n", - " 'movement in political theology and political philosophy&political philosophy and movement&cellulose-based paper that is used in baking&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'form of anarchism&political philosophy and movement&False&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'physical property that quantifies an object\\\\s interaction with electric fields&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&head of state and head of government of the Republic of Cyprus&leader of a country or part of a country, usually in republics',\n", - " 'type of frequency&inverse of the period duration&a volcano considered unlikely to erupt again&natural, surface vent or fissure usually in a mountainous form',\n", - " 'rate at which electric energy is transferred by an electric circuit&rate at which energy is transferred, used, or transformed&False&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'average velocity attained by charged particles in a material due to electric field&rate of change of the position of an object as a function of time, and the direction of that change&False&thick, viscous liquid consisting primarily of a solution of sugar in water',\n", - " 'device comprising an arrangement of buttons or keys used to input text in computers&data input device&subdiscipline within chemistry involving the scientific study of carbon-based compounds, hydrocarbons, and their derivatives&branch of physical science concerned with the composition, structure and properties of matter',\n", - " 'branch of science about the natural world&systematic enterprise that builds and organizes knowledge&False&writing implement',\n", - " 'field primarily concerned with the analysis, collection, classification, manipulation, storage, retrieval and dissemination of information&systematic enterprise that builds and organizes knowledge&water on the continents surface, rather than underground&chemical compound; main constituent of the fluids of most living organisms',\n", - " 'group of related varieties or dialects spoken across most of Northern and Southwestern China&group of languages that belongs to the Sino-Tibetan family&False&outline of a strategy for achievement of an objective',\n", - " 'language&group of languages that belongs to the Sino-Tibetan family&branch of physiology and neuroscience&science of the function of living systems',\n", - " 'calcified whitish structure in humans\\\\ mouths used to break down food&hard, calcified structure found in the jaws (or mouths) of many vertebrates and used to break down food&positionرئيس الجمهوريه اليمنية&leader of a country or part of a country, usually in republics',\n", - " 'artificially manufactured fibres, often based on polymers&natural or synthetic substance made of long, thin filaments&electronically coded still image in video technology&data transmission unit',\n", - " 'team sport played by two teams of two players on a sand court divided by a net&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&level of psychological well-being, or an absence of a mental disorder&state of physical, mental and social well-being in the absence of disease and infirmity',\n", - " 'sport&ballgame and team sport in which two teams compete to ground the ball on their opponents\\\\ side of the net&a recession that affects many countries around the world&business cycle contraction;\\xa0general slowdown in economic activity',\n", - " 'music that employs electronic musical instruments, digital instruments and circuitry-based music technology&art form, and cultural activity, whose medium is sound&tinplate container&container (usually cuboidal) with at least one roughly rectangular cross-section',\n", - " 'use in music of microtones (intervals smaller than a semitone)&art form, and cultural activity, whose medium is sound&compensation paid by an offender (usually a murderer) or their family to kin of the victim&object or record accepted as payment',\n", - " 'fictional story typically featuring folkloric fantasy characters and magic&prose fiction that can be either rooted in oral tradition or created by an author&pencil with lead of finely ground, highly compacted charcoal&writing implement',\n", - " 'group of denominations of Islam which holds that Muhammad designated Ali as his successor and leader (imam), whose adherents form the majority of the population in Iran, Iraq, Azerbaijan, and Bahrain&monotheistic religion, founded by Muhammad in the 7th century, based on the teachings of the Quran and the hadiths&Overall health of the population of Denmark&state of physical, mental and social well-being in the absence of disease and infirmity',\n", - " 'type of quark&class of fundamental particles&Paper with security features&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'scientific discipline that studies cells&science that studies living beings&False&organized cultural society that encounters many communities, on a scale of a nation or human, as well as a system of development',\n", - " 'material fibers about 5–10 μm in diameter composed of carbon&natural or synthetic substance made of long, thin filaments&recreational visitor attraction&permanently dedicated recreation area, often open to the public and generally characterized by natural, historic, or landscape features',\n", - " 'outer region of the volume of a star&layer of gases surrounding a material body&article in an academic publication, usually peer reviewed&text that forms an independent part of a publication',\n", - " 'idea that the needs of non-human animals should be afforded the same consideration as those of human beings&legal position allowing a person to require a certain thing from another person or other persons&water frozen into the solid state&chemical compound; main constituent of the fluids of most living organisms',\n", - " 'form of physical punishment that involves pain&imposition of an undesirable or unpleasant outcome as a response and deterrent to an action or behaviour that is deemed undesirable or unacceptable&False&organized cultural society that encounters many communities, on a scale of a nation or human, as well as a system of development',\n", - " 'designation for the sky in day&everything that is above the surface of the Earth&money given in a bribe&object or record accepted as payment',\n", - " 'view of the starry sky to a respective season between twilight and a few hours after sunset&everything that is above the surface of the Earth&culture of an area&society\\\\s way of life within anthropology',\n", - " 'type of vodka flavored with raspberries&distilled alcoholic beverage&False&permanently dedicated recreation area, often open to the public and generally characterized by natural, historic, or landscape features',\n", - " 'several traditions of thought within the anarchist movement&political philosophy and movement&False&type of rotor craft in which lift and thrust are supplied by rotors',\n", - " 'property of quarks and gluons that is related to the particles\\\\ strong interactions in the theory of quantum chromodynamics&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&type of paper&thin, flexible material mainly used for writing upon, printing upon, drawing or for packaging',\n", - " 'False&generalization of electric charge (EM) adding color charge (QCD), mass-energy (gravitation), etc.; sometimes considered same as its charge quantum number&False&writing implement']" - ] - }, - "execution_count": 189, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainingSubsetCommonPaths" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "upset-introduction", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "blank-weekend", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "alpine-cooperation", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "recent-algorithm", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "cordless-subdivision", - "metadata": {}, - "source": [ - "# Find Candidates" - ] - }, - { - "cell_type": "code", - "execution_count": 238, - "id": "historical-maryland", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'False'" - ] - }, - "execution_count": 238, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fetchDescription('Q1757352')" - ] - }, - { - "cell_type": "code", - "execution_count": 240, - "id": "composite-vienna", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "556d68601f09422292148ac709006b9a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/39 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
012
0Q3711805singular distributiondistribution concentrated on a set of measure ...
1Q7893853univariate distributionprobability distribution of only one random va...
2Q3258332Kent distributionprobability distribution on the two-dimensiona...
3Q16000505symmetric probability distributionprobability distribution which features a dens...
4Q670653marginal distributionprobability distribution of a subset (the \\mar...
5Q4889567Benktander Weibull distributionFalse
6Q7049201noncentral F-distributioncontinuous probability distribution
7Q21051291joint distribution of random variablesFalse
8Q3258268noncentral beta distributionFalse
9Q1472677heavy-tailed distributionprobability distributions whose tails are not ...
10Q6664772location-scale familyFalse
11Q7857491Tweedie distributionfamily of probability distributions
12Q917918continuous probability distributionprobability distribution which admits a cumula...
13Q2671311Rice distributionprobability distribution of the magnitude of a...
14Q85900768multimodal distributionprobability distribution whose density has two...
15Q3204440relativistic Breit–Wigner distributionprobability distribution
16Q3711786compound Poisson distributionFalse
17Q17157111mixture distributionprobability distribution
18Q7247759product distributionprobability distribution, in mathematics
19Q98098110board game tile distributiona distribution of game tiles and their scores ...
20Q1188504exponential familyprobablility distribution
21Q5421539exponentiated Weibull distributionFalse
22Q1417619Voigt profileprobability distribution often used in spectro...
23Q7604398statistical interferenceoverlap of multiple probability distributions
24Q7051758normal-inverse-gamma distributionfour-parameter family of multivariate continuo...
25Q2421579log-Laplace distributionprobability distribution
26Q26898117discrete probability distributionprobability distribution whose mass lies entir...
27Q5527846Gaussian q-distributionfamily of probability distributions
28Q3258303Benktander Gibrat distributionFalse
29Q3773214sampling distributionprobability distribution of the possible sampl...
30Q12345341Asymptotic distributionprobability distribution to which random varia...
31Q59394126Uniform distributionterm in probability theory
32Q1333358joint probability distributionprobability distribution which can feature mor...
33Q1934245stable distributiondistribution of variables which satisfies a st...
34Q5156926compound probability distributionFalse
35Q576072Student\\s t-distributionprobability distribution
36Q7051757Normal-inverse-Wishart distributionFalse
37Q255598bimodal distributionprobability distribution whose density has two...
38Q2300258conditional probability distributionFalse
\n", - "" - ], - "text/plain": [ - " 0 1 \\\n", - "0 Q3711805 singular distribution \n", - "1 Q7893853 univariate distribution \n", - "2 Q3258332 Kent distribution \n", - "3 Q16000505 symmetric probability distribution \n", - "4 Q670653 marginal distribution \n", - "5 Q4889567 Benktander Weibull distribution \n", - "6 Q7049201 noncentral F-distribution \n", - "7 Q21051291 joint distribution of random variables \n", - "8 Q3258268 noncentral beta distribution \n", - "9 Q1472677 heavy-tailed distribution \n", - "10 Q6664772 location-scale family \n", - "11 Q7857491 Tweedie distribution \n", - "12 Q917918 continuous probability distribution \n", - "13 Q2671311 Rice distribution \n", - "14 Q85900768 multimodal distribution \n", - "15 Q3204440 relativistic Breit–Wigner distribution \n", - "16 Q3711786 compound Poisson distribution \n", - "17 Q17157111 mixture distribution \n", - "18 Q7247759 product distribution \n", - "19 Q98098110 board game tile distribution \n", - "20 Q1188504 exponential family \n", - "21 Q5421539 exponentiated Weibull distribution \n", - "22 Q1417619 Voigt profile \n", - "23 Q7604398 statistical interference \n", - "24 Q7051758 normal-inverse-gamma distribution \n", - "25 Q2421579 log-Laplace distribution \n", - "26 Q26898117 discrete probability distribution \n", - "27 Q5527846 Gaussian q-distribution \n", - "28 Q3258303 Benktander Gibrat distribution \n", - "29 Q3773214 sampling distribution \n", - "30 Q12345341 Asymptotic distribution \n", - "31 Q59394126 Uniform distribution \n", - "32 Q1333358 joint probability distribution \n", - "33 Q1934245 stable distribution \n", - "34 Q5156926 compound probability distribution \n", - "35 Q576072 Student\\s t-distribution \n", - "36 Q7051757 Normal-inverse-Wishart distribution \n", - "37 Q255598 bimodal distribution \n", - "38 Q2300258 conditional probability distribution \n", - "\n", - " 2 \n", - "0 distribution concentrated on a set of measure ... \n", - "1 probability distribution of only one random va... \n", - "2 probability distribution on the two-dimensiona... \n", - "3 probability distribution which features a dens... \n", - "4 probability distribution of a subset (the \\mar... \n", - "5 False \n", - "6 continuous probability distribution \n", - "7 False \n", - "8 False \n", - "9 probability distributions whose tails are not ... \n", - "10 False \n", - "11 family of probability distributions \n", - "12 probability distribution which admits a cumula... \n", - "13 probability distribution of the magnitude of a... \n", - "14 probability distribution whose density has two... \n", - "15 probability distribution \n", - "16 False \n", - "17 probability distribution \n", - "18 probability distribution, in mathematics \n", - "19 a distribution of game tiles and their scores ... \n", - "20 probablility distribution \n", - "21 False \n", - "22 probability distribution often used in spectro... \n", - "23 overlap of multiple probability distributions \n", - "24 four-parameter family of multivariate continuo... \n", - "25 probability distribution \n", - "26 probability distribution whose mass lies entir... \n", - "27 family of probability distributions \n", - "28 False \n", - "29 probability distribution of the possible sampl... \n", - "30 probability distribution to which random varia... \n", - "31 term in probability theory \n", - "32 probability distribution which can feature mor... \n", - "33 distribution of variables which satisfies a st... \n", - "34 False \n", - "35 probability distribution \n", - "36 False \n", - "37 probability distribution whose density has two... \n", - "38 False " - ] - }, - "execution_count": 240, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "par_qnode = 'Q200726'\n", - "results = []\n", - "for child in tqdm(parent_child_dict[par_qnode]):\n", - " results.append((child, fetch_label(child), fetchDescription(child)))\n", - "pd.DataFrame(results).head(50)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "atlantic-milton", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opposed-regulation", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "liable-lincoln", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "encouraging-legend", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Analysis Files Analyser.ipynb b/Analysis Files Analyser.ipynb deleted file mode 100644 index 2223351..0000000 --- a/Analysis Files Analyser.ipynb +++ /dev/null @@ -1,1783 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "roman-insulation", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "thick-station", - "metadata": {}, - "outputs": [], - "source": [ - "def findMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['Embedding']\n", - " basis = row['Basis']\n", - " newAcc = row['New Acc']\n", - " oldAcc = row['Old Acc']\n", - " iteration = row['Iteration Num']\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if newAcc > embDict[emb]['maxNewAcc'] or (newAcc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " if iteration == 1:\n", - " embDict[emb]['oldAcc'] = oldAcc\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list(), embDict[emb]['oldAcc'], embDict[emb]['maxRow']['New Acc'] - embDict[emb]['oldAcc']])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "drawn-crisis", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...15161718192021222324
0text_7_props19k_childPar2True157.26744257.2674420.0000003440.325000...0.3333330.750.4615380.2105260.0388350.06557412.082148057.2674420.000000
1text_2_props19k_2_class2True156.68604756.104651-0.5813953440.292683...0.2888890.650.4000000.2105260.0388350.06557487.920485056.686047-0.581395
2complex19k_childPar1True367.15116368.0232560.8720933440.916667...0.9230770.600.7272730.5057470.4271840.46315818.160508060.1744197.848837
3transe19k_class_childPar1True163.66279167.7325584.0697673440.900000...0.8125000.650.7222220.5116280.2135920.3013703.838469063.6627914.069767
4abstract19k_class_childPar2True163.95348864.2441860.2906983440.461538...0.4687500.750.5769230.6666670.0388350.0733944.033524063.9534880.290698
5abstract_first_sent19k_class_siblings2True165.69767465.6976740.0000003440.500000...0.5200000.650.5777780.7000000.0679610.12389419.390705065.6976740.000000
\n", - "

6 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 \\\n", - "0 text_7_props 19k_childPar 2 True 1 57.267442 \n", - "1 text_2_props 19k_2_class 2 True 1 56.686047 \n", - "2 complex 19k_childPar 1 True 3 67.151163 \n", - "3 transe 19k_class_childPar 1 True 1 63.662791 \n", - "4 abstract 19k_class_childPar 2 True 1 63.953488 \n", - "5 abstract_first_sent 19k_class_siblings 2 True 1 65.697674 \n", - "\n", - " 6 7 8 9 ... 15 16 17 \\\n", - "0 57.267442 0.000000 344 0.325000 ... 0.333333 0.75 0.461538 \n", - "1 56.104651 -0.581395 344 0.292683 ... 0.288889 0.65 0.400000 \n", - "2 68.023256 0.872093 344 0.916667 ... 0.923077 0.60 0.727273 \n", - "3 67.732558 4.069767 344 0.900000 ... 0.812500 0.65 0.722222 \n", - "4 64.244186 0.290698 344 0.461538 ... 0.468750 0.75 0.576923 \n", - "5 65.697674 0.000000 344 0.500000 ... 0.520000 0.65 0.577778 \n", - "\n", - " 18 19 20 21 22 23 24 \n", - "0 0.210526 0.038835 0.065574 12.082148 0 57.267442 0.000000 \n", - "1 0.210526 0.038835 0.065574 87.920485 0 56.686047 -0.581395 \n", - "2 0.505747 0.427184 0.463158 18.160508 0 60.174419 7.848837 \n", - "3 0.511628 0.213592 0.301370 3.838469 0 63.662791 4.069767 \n", - "4 0.666667 0.038835 0.073394 4.033524 0 63.953488 0.290698 \n", - "5 0.700000 0.067961 0.123894 19.390705 0 65.697674 0.000000 \n", - "\n", - "[6 rows x 25 columns]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unsupSumm = pd.read_csv('../data/retrofitting/retro_test_Sept_21_2021.csv')\n", - "findMaximals(unsupSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "random-river", - "metadata": {}, - "outputs": [], - "source": [ - "def findPrecRecIMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['Embedding']\n", - " basis = row['Basis']\n", - " newAcc = row['New I F1-Score']\n", - " oldAcc = row['Old I F1-Score']\n", - " iteration = row['Iteration Num']\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if newAcc > embDict[emb]['maxNewAcc'] or (newAcc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " if iteration == 1:\n", - " embDict[emb]['oldAcc'] = oldAcc\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list()[:5], embDict[emb]['oldAcc'], embDict[emb]['maxRow']['New I F1-Score'], embDict[emb]['maxRow']['New I F1-Score'] - embDict[emb]['oldAcc'], embDict[emb]['maxRow']['Old I Precision'], embDict[emb]['maxRow']['New I Precision'], embDict[emb]['maxRow']['Old I Recall'], embDict[emb]['maxRow']['New I Recall'], ])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "large-cruise", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
01234567891011
0text_7_props19k_class_childPar2True10.4333330.4687500.0354170.3250000.3409090.650.75
1text_2_props19k_22True30.3934430.4307690.0373270.2954550.3111110.650.70
2complex19k_class_childPar1True30.6206900.7272730.1065830.9166670.9230770.550.60
3transe19k_childPar1True20.6000000.7567570.1567570.8461540.8235290.550.70
4abstract19k_class_childPar2True10.5217390.5769230.0551840.4615380.4687500.600.75
5abstract_first_sent19k_childPar2True30.5238100.6274510.1036410.4666670.5161290.700.80
\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 6 \\\n", - "0 text_7_props 19k_class_childPar 2 True 1 0.433333 0.468750 \n", - "1 text_2_props 19k_2 2 True 3 0.393443 0.430769 \n", - "2 complex 19k_class_childPar 1 True 3 0.620690 0.727273 \n", - "3 transe 19k_childPar 1 True 2 0.600000 0.756757 \n", - "4 abstract 19k_class_childPar 2 True 1 0.521739 0.576923 \n", - "5 abstract_first_sent 19k_childPar 2 True 3 0.523810 0.627451 \n", - "\n", - " 7 8 9 10 11 \n", - "0 0.035417 0.325000 0.340909 0.65 0.75 \n", - "1 0.037327 0.295455 0.311111 0.65 0.70 \n", - "2 0.106583 0.916667 0.923077 0.55 0.60 \n", - "3 0.156757 0.846154 0.823529 0.55 0.70 \n", - "4 0.055184 0.461538 0.468750 0.60 0.75 \n", - "5 0.103641 0.466667 0.516129 0.70 0.80 " - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unsupSumm = pd.read_csv('../data/retrofitting/retro_test_Sept_21_2021.csv')\n", - "findPrecRecIMaximals(unsupSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "viral-warrant", - "metadata": {}, - "outputs": [], - "source": [ - "def findPrecRecUMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['Embedding']\n", - " basis = row['Basis']\n", - " newAcc = row['New U F1-Score']\n", - " oldAcc = row['Old U F1-Score']\n", - " iteration = row['Iteration Num']\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if newAcc > embDict[emb]['maxNewAcc'] or (newAcc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': newAcc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " if iteration == 1:\n", - " embDict[emb]['oldAcc'] = oldAcc\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list()[:5], embDict[emb]['oldAcc'], embDict[emb]['maxRow']['New U F1-Score'], embDict[emb]['maxRow']['New U F1-Score'] - embDict[emb]['oldAcc'], embDict[emb]['maxRow']['Old U Precision'], embDict[emb]['maxRow']['New U Precision'], embDict[emb]['maxRow']['Old U Recall'], embDict[emb]['maxRow']['New U Recall'], ])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "norwegian-potato", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
01234567891011
0text_7_props19k_2_class2True30.0655740.0655740.0000000.2105260.2105260.0388350.038835
1text_2_props19k_2_class2True10.0655740.0655740.0000000.2105260.2105260.0388350.038835
2complex19k_childPar2True20.5362320.5426360.0064040.4382720.4516130.6893200.679612
3transe19k_2_class2True30.3666670.3793100.0126440.4342110.4647890.3203880.320388
4abstract19k_2_class2True20.0892860.0909090.0016230.6250000.7142860.0485440.048544
5abstract_first_sent19k_class_siblings2True20.1551720.123894-0.0312790.7000000.7000000.0679610.067961
\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 6 \\\n", - "0 text_7_props 19k_2_class 2 True 3 0.065574 0.065574 \n", - "1 text_2_props 19k_2_class 2 True 1 0.065574 0.065574 \n", - "2 complex 19k_childPar 2 True 2 0.536232 0.542636 \n", - "3 transe 19k_2_class 2 True 3 0.366667 0.379310 \n", - "4 abstract 19k_2_class 2 True 2 0.089286 0.090909 \n", - "5 abstract_first_sent 19k_class_siblings 2 True 2 0.155172 0.123894 \n", - "\n", - " 7 8 9 10 11 \n", - "0 0.000000 0.210526 0.210526 0.038835 0.038835 \n", - "1 0.000000 0.210526 0.210526 0.038835 0.038835 \n", - "2 0.006404 0.438272 0.451613 0.689320 0.679612 \n", - "3 0.012644 0.434211 0.464789 0.320388 0.320388 \n", - "4 0.001623 0.625000 0.714286 0.048544 0.048544 \n", - "5 -0.031279 0.700000 0.700000 0.067961 0.067961 " - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unsupSumm = pd.read_csv('../data/retrofitting/retro_test_Sept_21_2021.csv')\n", - "findPrecRecUMaximals(unsupSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "international-asbestos", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...15161718192021222324
0text_7-text_2-comp-tran-abs-abs_first19k_2_class2True262.562.50.03440.416667...0.4166670.750.5357140.50.0291260.055046473.402399063.081395-0.581395
\n", - "

1 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 \\\n", - "0 text_7-text_2-comp-tran-abs-abs_first 19k_2_class 2 True 2 62.5 \n", - "\n", - " 6 7 8 9 ... 15 16 17 18 19 \\\n", - "0 62.5 0.0 344 0.416667 ... 0.416667 0.75 0.535714 0.5 0.029126 \n", - "\n", - " 20 21 22 23 24 \n", - "0 0.055046 473.402399 0 63.081395 -0.581395 \n", - "\n", - "[1 rows x 25 columns]" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "concatSumm = pd.read_csv('../data/retrofitting/retro_concat_Sep_21_2021.csv')\n", - "findMaximals(concatSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "laden-avenue", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...19202122232425262728
0text_7_props19k_class_siblings2True176.33489373.079537-3.25535650837NaN...NaNNaN0.3780920.4056540.7687940.735391129.360480076.334893-3.255356
1text_2_props19k_class_siblings2True176.46491073.318887-3.14602350837NaN...NaNNaN0.3448760.3738520.7705820.738268131.612632076.464910-3.146023
2complex19k_class_siblings2True192.93868592.425511-0.51317450666NaN...NaNNaN0.0621910.0664310.9416440.936380104.645769092.938685-0.513174
3transe19k_class_siblings2True192.01477589.904950-2.10982550666NaN...NaNNaN0.1314490.1462900.9312960.909689100.077391092.014775-2.109825
4abstract19k_class_siblings2True193.09825291.391283-1.70696920695NaN...NaNNaN0.0713780.0777390.9431330.92573242.654327093.098252-1.706969
5abstract_first_sent19k_class_siblings2True194.56291693.337602-1.22531420695NaN...NaNNaN0.0650180.0692580.9580760.94559042.566209094.562916-1.225314
\n", - "

6 rows × 29 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 \\\n", - "0 text_7_props 19k_class_siblings 2 True 1 76.334893 \n", - "1 text_2_props 19k_class_siblings 2 True 1 76.464910 \n", - "2 complex 19k_class_siblings 2 True 1 92.938685 \n", - "3 transe 19k_class_siblings 2 True 1 92.014775 \n", - "4 abstract 19k_class_siblings 2 True 1 93.098252 \n", - "5 abstract_first_sent 19k_class_siblings 2 True 1 94.562916 \n", - "\n", - " 6 7 8 9 ... 19 20 21 22 23 \\\n", - "0 73.079537 -3.255356 50837 NaN ... NaN NaN 0.378092 0.405654 0.768794 \n", - "1 73.318887 -3.146023 50837 NaN ... NaN NaN 0.344876 0.373852 0.770582 \n", - "2 92.425511 -0.513174 50666 NaN ... NaN NaN 0.062191 0.066431 0.941644 \n", - "3 89.904950 -2.109825 50666 NaN ... NaN NaN 0.131449 0.146290 0.931296 \n", - "4 91.391283 -1.706969 20695 NaN ... NaN NaN 0.071378 0.077739 0.943133 \n", - "5 93.337602 -1.225314 20695 NaN ... NaN NaN 0.065018 0.069258 0.958076 \n", - "\n", - " 24 25 26 27 28 \n", - "0 0.735391 129.360480 0 76.334893 -3.255356 \n", - "1 0.738268 131.612632 0 76.464910 -3.146023 \n", - "2 0.936380 104.645769 0 92.938685 -0.513174 \n", - "3 0.909689 100.077391 0 92.014775 -2.109825 \n", - "4 0.925732 42.654327 0 93.098252 -1.706969 \n", - "5 0.945590 42.566209 0 94.562916 -1.225314 \n", - "\n", - "[6 rows x 29 columns]" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "concatSumm = pd.read_csv('../data/retrofitting/retro_WikiCS_Sep_27_2021.csv')\n", - "findMaximals(concatSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "regional-teens", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...19202122232425262728
0text_7_props19k_2_class1True118.99152919.0076640.016136599NaN...NaNNaN0.9848280.9857470.0207440.02074445.268861018.9915290.016136
1text_2_props19k_2_class2True318.99152919.0076640.016136599NaN...NaNNaN0.9848280.9857470.0207440.020744281.146679018.9915290.016136
2complex19k_21True381.66196081.9201290.258169595NaN...NaNNaN0.0928740.0928740.9706460.973777152.884296081.3392500.580879
3transe19k_21True382.41226382.4768050.064542595NaN...NaNNaN0.0928740.0937930.9797460.980333152.751550082.1298910.346914
4abstract19k_2_class2True318.11214218.1121420.000000297NaN...NaNNaN0.9917240.9917240.0086110.00861172.580956118.1121420.000000
5abstract_first_sent19k_2_class2True318.10407418.1121420.008068297NaN...NaNNaN0.9917240.9917240.0085130.00861171.931216018.0879390.024203
\n", - "

6 rows × 29 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 6 \\\n", - "0 text_7_props 19k_2_class 1 True 1 18.991529 19.007664 \n", - "1 text_2_props 19k_2_class 2 True 3 18.991529 19.007664 \n", - "2 complex 19k_2 1 True 3 81.661960 81.920129 \n", - "3 transe 19k_2 1 True 3 82.412263 82.476805 \n", - "4 abstract 19k_2_class 2 True 3 18.112142 18.112142 \n", - "5 abstract_first_sent 19k_2_class 2 True 3 18.104074 18.112142 \n", - "\n", - " 7 8 9 ... 19 20 21 22 23 24 \\\n", - "0 0.016136 599 NaN ... NaN NaN 0.984828 0.985747 0.020744 0.020744 \n", - "1 0.016136 599 NaN ... NaN NaN 0.984828 0.985747 0.020744 0.020744 \n", - "2 0.258169 595 NaN ... NaN NaN 0.092874 0.092874 0.970646 0.973777 \n", - "3 0.064542 595 NaN ... NaN NaN 0.092874 0.093793 0.979746 0.980333 \n", - "4 0.000000 297 NaN ... NaN NaN 0.991724 0.991724 0.008611 0.008611 \n", - "5 0.008068 297 NaN ... NaN NaN 0.991724 0.991724 0.008513 0.008611 \n", - "\n", - " 25 26 27 28 \n", - "0 45.268861 0 18.991529 0.016136 \n", - "1 281.146679 0 18.991529 0.016136 \n", - "2 152.884296 0 81.339250 0.580879 \n", - "3 152.751550 0 82.129891 0.346914 \n", - "4 72.580956 1 18.112142 0.000000 \n", - "5 71.931216 0 18.087939 0.024203 \n", - "\n", - "[6 rows x 29 columns]" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "concatSumm = pd.read_csv('../data/retrofitting/retro_conceptNet_Sep_27_2021.csv')\n", - "findMaximals(concatSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "geographic-shadow", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "shaped-cargo", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "double-egyptian", - "metadata": {}, - "outputs": [], - "source": [ - "def findSVMMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['emb']\n", - " basis = row['basis']\n", - " acc = row['Acc']\n", - " iteration = row['iteration']\n", - " if iteration == 0:\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': -1, 'maxRow': row, 'oldAcc': acc}\n", - " else:\n", - " embDict[emb] = {'maxNewAcc': embDict[emb]['maxNewAcc'], 'maxRow': embDict[emb]['maxRow'], 'oldAcc': acc}\n", - " else:\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': acc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if acc > embDict[emb]['maxNewAcc'] or (acc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': acc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list(), embDict[emb]['oldAcc'], embDict[emb]['maxRow']['Acc'] - embDict[emb]['oldAcc']])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "departmental-contractor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789
0text_7_props_19k_class_childPar_1_weighted19k_class_childPartext_7_propsTrue21score0.6943700.6800000.014370
1text_2_props_19k_class_childPar_2_weighted19k_class_childPartext_2_propsTrue22score0.6946220.6773110.017311
2complex_19k_2_class_2_weighted19k_2_classcomplexTrue22score0.6684870.674538-0.006050
3transe_19k_2_class_1_weighted19k_2_classtranseTrue21score0.6684030.674454-0.006050
4abstract_19k_class_siblings_2_weighted19k_class_siblingsabstractTrue22score0.7120170.6831930.028824
5abstract_first_sent_19k_2_2_weighted19k_2abstract_first_sentTrue12score0.7116810.714622-0.002941
\n", - "
" - ], - "text/plain": [ - " 0 1 \\\n", - "0 text_7_props_19k_class_childPar_1_weighted 19k_class_childPar \n", - "1 text_2_props_19k_class_childPar_2_weighted 19k_class_childPar \n", - "2 complex_19k_2_class_2_weighted 19k_2_class \n", - "3 transe_19k_2_class_1_weighted 19k_2_class \n", - "4 abstract_19k_class_siblings_2_weighted 19k_class_siblings \n", - "5 abstract_first_sent_19k_2_2_weighted 19k_2 \n", - "\n", - " 2 3 4 5 6 7 8 9 \n", - "0 text_7_props True 2 1 score 0.694370 0.680000 0.014370 \n", - "1 text_2_props True 2 2 score 0.694622 0.677311 0.017311 \n", - "2 complex True 2 2 score 0.668487 0.674538 -0.006050 \n", - "3 transe True 2 1 score 0.668403 0.674454 -0.006050 \n", - "4 abstract True 2 2 score 0.712017 0.683193 0.028824 \n", - "5 abstract_first_sent True 1 2 score 0.711681 0.714622 -0.002941 " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "svmSumm = pd.read_csv('../data/retrofitting/retro_SVM_Reg_test_Sept_21_2021.csv')\n", - "findSVMMaximals(svmSumm)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "metallic-alberta", - "metadata": {}, - "outputs": [], - "source": [ - "def findSVMCombMaximals(df):\n", - " embDict = {}\n", - " for _, row in df.iterrows():\n", - " emb = row['emb_comb']\n", - " basis = row['basis']\n", - " acc = row['accuracy']\n", - " iteration = row['iteration']\n", - " if iteration == 0:\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': -1, 'maxRow': row, 'oldAcc': acc}\n", - " else:\n", - " embDict[emb] = {'maxNewAcc': embDict[emb]['maxNewAcc'], 'maxRow': embDict[emb]['maxRow'], 'oldAcc': acc}\n", - " else:\n", - " if emb not in embDict:\n", - " embDict[emb] = {'maxNewAcc': acc, 'maxRow': row, 'oldAcc': -1}\n", - " else:\n", - " if acc > embDict[emb]['maxNewAcc'] or (acc == embDict[emb]['maxNewAcc'] and 'class' in basis):\n", - " embDict[emb] = {'maxNewAcc': acc, 'maxRow': row, 'oldAcc': embDict[emb]['oldAcc']}\n", - " finalRows = []\n", - " for emb in embDict:\n", - " finalRows.append([*embDict[emb]['maxRow'].to_list(), embDict[emb]['oldAcc'], embDict[emb]['maxRow']['accuracy'] - embDict[emb]['oldAcc']])\n", - " return pd.DataFrame(finalRows)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "arabic-pointer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789
14abstract_first_sent_19k_2_2_weighted19k_2text_2_props & abstract_first_sentTrue12score0.7265550.7178150.008739
37abstract_19k_class_siblings_2_weighted19k_class_siblingscomplex & transe & abstractTrue32score0.7263030.6799160.046387
44abstract_19k_2_class_1_weighted19k_2_classtext_7_props & text_2_props & transe & abstractTrue31score0.7240340.6973950.026639
45abstract_first_sent_19k_class_childPar_2_weighted19k_class_childPartext_7_props & text_2_props & transe & abstrac...True32score0.7210920.7147900.006303
49abstract_first_sent_19k_childPar_1_weighted19k_childPartext_7_props & complex & abstract & abstract_f...True11score0.7209240.6652940.055630
.................................
6text_2_props_19k_class_childPar_1_weighted19k_class_childPartext_7_props & text_2_propsTrue31score0.6943700.6742860.020084
20abstract_first_sent_19k_class_siblings_2_weighted19k_class_siblingsabstract & abstract_first_sentTrue32score0.6914290.6828570.008571
15transe_19k_siblings_2_weighted19k_siblingscomplex & transeTrue12score0.6686550.6626890.005966
2complex_19k_2_class_2_weighted19k_2_classcomplexTrue32score0.6684870.674538-0.006050
3transe_19k_2_class_1_weighted19k_2_classtranseTrue31score0.6684030.674454-0.006050
\n", - "

63 rows × 10 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 \\\n", - "14 abstract_first_sent_19k_2_2_weighted 19k_2 \n", - "37 abstract_19k_class_siblings_2_weighted 19k_class_siblings \n", - "44 abstract_19k_2_class_1_weighted 19k_2_class \n", - "45 abstract_first_sent_19k_class_childPar_2_weighted 19k_class_childPar \n", - "49 abstract_first_sent_19k_childPar_1_weighted 19k_childPar \n", - ".. ... ... \n", - "6 text_2_props_19k_class_childPar_1_weighted 19k_class_childPar \n", - "20 abstract_first_sent_19k_class_siblings_2_weighted 19k_class_siblings \n", - "15 transe_19k_siblings_2_weighted 19k_siblings \n", - "2 complex_19k_2_class_2_weighted 19k_2_class \n", - "3 transe_19k_2_class_1_weighted 19k_2_class \n", - "\n", - " 2 3 4 5 6 \\\n", - "14 text_2_props & abstract_first_sent True 1 2 score \n", - "37 complex & transe & abstract True 3 2 score \n", - "44 text_7_props & text_2_props & transe & abstract True 3 1 score \n", - "45 text_7_props & text_2_props & transe & abstrac... True 3 2 score \n", - "49 text_7_props & complex & abstract & abstract_f... True 1 1 score \n", - ".. ... ... .. .. ... \n", - "6 text_7_props & text_2_props True 3 1 score \n", - "20 abstract & abstract_first_sent True 3 2 score \n", - "15 complex & transe True 1 2 score \n", - "2 complex True 3 2 score \n", - "3 transe True 3 1 score \n", - "\n", - " 7 8 9 \n", - "14 0.726555 0.717815 0.008739 \n", - "37 0.726303 0.679916 0.046387 \n", - "44 0.724034 0.697395 0.026639 \n", - "45 0.721092 0.714790 0.006303 \n", - "49 0.720924 0.665294 0.055630 \n", - ".. ... ... ... \n", - "6 0.694370 0.674286 0.020084 \n", - "20 0.691429 0.682857 0.008571 \n", - "15 0.668655 0.662689 0.005966 \n", - "2 0.668487 0.674538 -0.006050 \n", - "3 0.668403 0.674454 -0.006050 \n", - "\n", - "[63 rows x 10 columns]" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "svmCombSumm = pd.read_csv('../data/retrofitting/retro_SVM_Reg_comb_test_Sept_21_2021.csv')\n", - "findSVMCombMaximals(svmCombSumm).sort_values(by=[7], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "stone-secretary", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Archived/.ipynb_checkpoints/Retrofitting using 19k + 19k dataset REEXEC-checkpoint.ipynb b/Archived/.ipynb_checkpoints/Retrofitting using 19k + 19k dataset REEXEC-checkpoint.ipynb deleted file mode 100644 index 30bb697..0000000 --- a/Archived/.ipynb_checkpoints/Retrofitting using 19k + 19k dataset REEXEC-checkpoint.ipynb +++ /dev/null @@ -1,14914 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "dynamic-generator", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn.metrics.pairwise import euclidean_distances\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.metrics import confusion_matrix\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from tqdm.notebook import tqdm\n", - "from itertools import combinations\n", - "from math import comb\n", - "from sklearn.ensemble import RandomForestClassifier" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "strange-saturn", - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option('mode.chained_assignment', None)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "objective-saturday", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmbAndCosSim.csv\")\n", - "p279Seeded_SiblingsDF3_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmbAndCosSim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "joint-magnet", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1idnode1_labellabelnode2_labelsentnode1_embnode2_embbert2SentSim...BERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
0Q100171002Q1503443Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+...[ 3.61319035e-01 1.03393383e-01 1.50166345e+...0.901134...NaNNaN[0.87660795, 0.4991357, -0.39552155, 0.7046891...[0.36156428, -0.015657336, -0.14483449, -0.253...[0.79082793, 0.53679967, -0.3825465, 0.6778466...[0.36156428, -0.015657336, -0.14483449, -0.253...0.8326020.823419-1.000000-1.000000
1Q1002697Q49850Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+...[-2.23196611e-01 -4.97725368e-01 2.20271492e+...0.863449...[-0.28667202591896057, -0.4099476933479309, 0....[-0.25435054302215576, -0.92085862159729, 1.68...[1.256428, 0.3254261, -0.26960722, 0.101883665...[0.92698413, 0.32396156, -0.7647308, 0.6973268...[1.256428, 0.3254261, -0.26960722, 0.101883665...[1.0344226, 0.39984593, -0.76180136, 0.8256311...0.7426380.734428-1.000000-1.000000
2Q101998Q4421Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+...[ 5.09670794e-01 -4.42380428e-01 1.53245163e+...0.507148...[0.12320789694786072, 0.2723684310913086, 0.05...[0.5991100072860718, 0.15195603668689728, 0.59...[0.8141036, 0.14491142, -0.59703183, 0.335001,...[-0.16750671, -0.17960861, -0.58211946, -0.687...[0.91628444, 0.104261845, -0.49683735, 0.21296...[-0.13534825, -0.23398273, -0.5165668, -0.7297...0.6470310.7076110.5080600.455747
3Q102165Q2294Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+...[-6.87960759e-02 -1.65659860e-01 9.53789592e-...0.798707...[0.17410606145858765, 0.6839145421981812, -0.8...[-0.04499293863773346, 0.6921464204788208, -0....[0.469377, 0.7162001, -0.36740896, 0.76742333,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...[0.4080446, 0.7498908, -0.2665757, 0.74437106,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...0.8365310.8475910.8559590.770030
4Q102205Q11435Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+...[ 1.30038410e-01 -8.53226840e-01 2.37821031e+...0.934246...[0.4393930733203888, 0.7159943580627441, 0.647...[0.5091343522071838, -0.05845202878117561, 1.0...[-0.19995248, 0.65605164, -0.14234662, 0.43931...[0.4293771, 1.1976917, 0.04422909, 0.5975481, ...[-0.45549682, 0.73478854, -0.1980287, 0.436793...[0.33631665, 1.1661042, 0.13744242, 0.6776439,...0.7655890.7803420.7526930.515319
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 id node1_label \\\n", - "0 Q100171002 Q1503443 Q1503443-P279-Q100171002-8282ae74-0 secrecy \n", - "1 Q1002697 Q49850 Q49850-P279-Q1002697-0c52cf68-0 journal \n", - "2 Q101998 Q4421 Q4421-P279-Q101998-d0983886-0 forest \n", - "3 Q102165 Q2294 Q2294-P279-Q102165-0893a180-0 proton \n", - "4 Q102205 Q11435 Q11435-P279-Q102205-7b448d05-0 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " node1_emb \\\n", - "0 [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " node2_emb bert2SentSim ... \\\n", - "0 [ 3.61319035e-01 1.03393383e-01 1.50166345e+... 0.901134 ... \n", - "1 [-2.23196611e-01 -4.97725368e-01 2.20271492e+... 0.863449 ... \n", - "2 [ 5.09670794e-01 -4.42380428e-01 1.53245163e+... 0.507148 ... \n", - "3 [-6.87960759e-02 -1.65659860e-01 9.53789592e-... 0.798707 ... \n", - "4 [ 1.30038410e-01 -8.53226840e-01 2.37821031e+... 0.934246 ... \n", - "\n", - " BERT_abstract_emb_right \\\n", - "0 NaN \n", - "1 [-0.28667202591896057, -0.4099476933479309, 0.... \n", - "2 [0.12320789694786072, 0.2723684310913086, 0.05... \n", - "3 [0.17410606145858765, 0.6839145421981812, -0.8... \n", - "4 [0.4393930733203888, 0.7159943580627441, 0.647... \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 [-0.25435054302215576, -0.92085862159729, 1.68... \n", - "2 [0.5991100072860718, 0.15195603668689728, 0.59... \n", - "3 [-0.04499293863773346, 0.6921464204788208, -0.... \n", - "4 [0.5091343522071838, -0.05845202878117561, 1.0... \n", - "\n", - " textEmb_7props_left \\\n", - "0 [0.87660795, 0.4991357, -0.39552155, 0.7046891... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.8141036, 0.14491142, -0.59703183, 0.335001,... \n", - "3 [0.469377, 0.7162001, -0.36740896, 0.76742333,... \n", - "4 [-0.19995248, 0.65605164, -0.14234662, 0.43931... \n", - "\n", - " textEmb_7props_right \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... \n", - "1 [0.92698413, 0.32396156, -0.7647308, 0.6973268... \n", - "2 [-0.16750671, -0.17960861, -0.58211946, -0.687... \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... \n", - "4 [0.4293771, 1.1976917, 0.04422909, 0.5975481, ... \n", - "\n", - " textEmb_2props_left \\\n", - "0 [0.79082793, 0.53679967, -0.3825465, 0.6778466... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.91628444, 0.104261845, -0.49683735, 0.21296... \n", - "3 [0.4080446, 0.7498908, -0.2665757, 0.74437106,... \n", - "4 [-0.45549682, 0.73478854, -0.1980287, 0.436793... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... 0.832602 \n", - "1 [1.0344226, 0.39984593, -0.76180136, 0.8256311... 0.742638 \n", - "2 [-0.13534825, -0.23398273, -0.5165668, -0.7297... 0.647031 \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... 0.836531 \n", - "4 [0.33631665, 1.1661042, 0.13744242, 0.6776439,... 0.765589 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \n", - "0 0.823419 -1.000000 -1.000000 \n", - "1 0.734428 -1.000000 -1.000000 \n", - "2 0.707611 0.508060 0.455747 \n", - "3 0.847591 0.855959 0.770030 \n", - "4 0.780342 0.752693 0.515319 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "random-france", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.602876\n", - "std 0.146181\n", - "min 0.064503\n", - "25% 0.493110\n", - "50% 0.597949\n", - "75% 0.711631\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "incorporated-ambassador", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['node2', 'node1', 'id', 'node1_label', 'label', 'node2_label', 'sent',\n", - " 'node1_emb', 'node2_emb', 'bert2SentSim', 'abstract',\n", - " 'abstract_firstSent', 'BERT_abstract_emb',\n", - " 'BERT_abstract_firstSent_emb', 'abstract_right',\n", - " 'abstract_firstSent_right', 'BERT_abstract_emb_right',\n", - " 'BERT_abstract_firstSent_emb_right', 'textEmb_7props_left',\n", - " 'textEmb_7props_right', 'textEmb_2props_left', 'textEmb_2props_right',\n", - " 'textEmb_7props_cosSim', 'textEmb_2props_cosSim',\n", - " 'BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim'],\n", - " dtype='object')" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "original-grass", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.772184\n", - "std 0.122326\n", - "min 0.120480\n", - "25% 0.684141\n", - "50% 0.793718\n", - "75% 0.874284\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "under-rabbit", - "metadata": {}, - "source": [ - "# Embeddings Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "annoying-intake", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## Complex, Transe Embeddings Datasets generation" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "tamil-activity", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353LatestAnnot.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "immune-nashville", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "residential-cleaners", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "current-great", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_id
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id \n", - "0 Q454 \n", - "1 Q13648784 \n", - "2 Q178022 \n", - "3 Q21004260 \n", - "4 Q49112 " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "valued-progressive", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# wordSimSet = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "different-vancouver", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSimSet = set(p279WordSimSeededDF_wabs_text.node1.to_list() + p279WordSimSeededDF_wabs_text.node2.to_list() + p279Seeded_SiblingsDF3_wabs_text.node1.to_list() + p279Seeded_SiblingsDF3_wabs_text.node2.to_list() + wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quick-lewis", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "19166" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "collected-regular", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1499717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64763437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17144564\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4765290\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16000518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6423382\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2177259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q100448831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2857578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13577338\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q96158854\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7892\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29053864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7675683\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2380954\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77527200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21083881\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q211521\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66368425\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16023742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q97627995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16721350\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q32979618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4553362\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q98232491\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66194218\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5372\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42559432\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25481995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61466331\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6983403\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84105477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11002\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30107768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56753514\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91927989\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12047900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2144951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11698973\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q517386\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17097928\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5281737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27983054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19838691\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q101541623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17376918\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5193377\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23013268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66363580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55693905\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68131879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85803433\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29053744\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82785806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21406831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29957548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78710574\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6462051\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1042920\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7925\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56297152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2515879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28324850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28132458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2849391\n" - ] - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "compEmbeddings = {}\n", - "transeEmbeddings = {}\n", - "\n", - "for wordID in wordSimSet:\n", - " try:\n", - " resp = requests.get(\"http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID).json()['_source']\n", - " compEmbeddings[wordID] = resp['graph_embedding_complex']\n", - " transeEmbeddings[wordID] = resp['graph_embeddings_transe']\n", - " except:\n", - " print(\"Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "elect-gothic", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.DataFrame(compEmbeddings.items(), columns=['node', 'complex_embedding']).to_csv('../data/wordsim353_complex_embeddings.csv', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "combined-theme", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.DataFrame(transeEmbeddings.items(), columns=['node', 'transe_embedding']).to_csv('../data/wordsim353_transe_embeddings.csv', index=False)" - ] - }, - { - "cell_type": "markdown", - "id": "suffering-extraction", - "metadata": {}, - "source": [ - "# Target Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "hairy-tuition", - "metadata": {}, - "source": [ - "## Probase Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "opened-quarter", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = pd.read_csv('../data/probase/probase_WQnodes_subset_and_sim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "major-peter", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0node1_labelnode2_labelno_of_relationsnode1_qnodenode2_qnoden1_final_qnoden2_final_qnodesim
00factorage35167NaNNaNQ15061738Q1003432191.000000
15factorgender14230NaNQ48277Q15061738Q482770.913568
26factortemperature13660NaNNaNQ15061738P20760.909663
37metalcopper11142Q11426NaNQ11426Q158305000.890199
49variableage9375NaNNaNQ10954303Q1003432190.873703
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 node1_label node2_label no_of_relations node1_qnode \\\n", - "0 0 factor age 35167 NaN \n", - "1 5 factor gender 14230 NaN \n", - "2 6 factor temperature 13660 NaN \n", - "3 7 metal copper 11142 Q11426 \n", - "4 9 variable age 9375 NaN \n", - "\n", - " node2_qnode n1_final_qnode n2_final_qnode sim \n", - "0 NaN Q15061738 Q100343219 1.000000 \n", - "1 Q48277 Q15061738 Q48277 0.913568 \n", - "2 NaN Q15061738 P2076 0.909663 \n", - "3 NaN Q11426 Q15830500 0.890199 \n", - "4 NaN Q10954303 Q100343219 0.873703 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "photographic-character", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = probDF_Qnodes_DF_WQnodes1_subset.rename(columns={'n1_final_qnode': 'node1', 'n2_final_qnode': 'node2', 'sim': 'bert2SentSim'})" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "russian-proceeding", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim'] = 0.5 + 0.5 * probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim']" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "painted-selection", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 1.600841e+06\n", - "mean 5.429549e-01\n", - "std 5.363352e-02\n", - "min 5.000000e-01\n", - "25% 5.000000e-01\n", - "50% 5.331083e-01\n", - "75% 5.662167e-01\n", - "max 1.000000e+00\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim'].describe()" - ] - }, - { - "cell_type": "markdown", - "id": "removed-occupation", - "metadata": {}, - "source": [ - "# Retrofitting Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "consolidated-investigation", - "metadata": {}, - "outputs": [], - "source": [ - "def normalize(embedDict):\n", - " for key, val in embedDict.items():\n", - " temp = np.array([float(val1) for val1 in val])\n", - " temp2 = temp**2\n", - " embedDict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - " return embedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "irish-disposal", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchEmbeddings(df):\n", - " embedDict = {}\n", - " for _, row in df.iterrows():\n", - " embedDict[row.node] = row.value\n", - " return normalize(embedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "orange-person", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchNeighbours(df):\n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row.bert2SentSim))\n", - " \n", - " if row.node2 not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row.bert2SentSim))\n", - " print(max([len(neigh) for neigh in neighboursDict.values()]))\n", - " return neighboursDict" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "joined-kazakhstan", - "metadata": {}, - "outputs": [], - "source": [ - "def retrofit(embedDict, neighDict, weightCase):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - "# assert len(neighbs) == 1\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " if weightCase == 1:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sumOfEmbs) / ((len(neighbs)) + sumOfSims)\n", - " elif weightCase == 2:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " elif weightCase == 0.5:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sumOfEmbs) / ((len(neighbs))**0.5 + sumOfSims)\n", - " else:\n", - " raise\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "collected-performance", - "metadata": {}, - "outputs": [], - "source": [ - "def determineDistances(embedDict, newEmbedDict):\n", - " dist = []\n", - " for word in embedDict.keys():\n", - " dist.append(euclidean_distances([embedDict[word]], [newEmbedDict[word]])[0][0])\n", - " return dist" - ] - }, - { - "cell_type": "markdown", - "id": "later-dimension", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Attempts" - ] - }, - { - "cell_type": "markdown", - "id": "serious-milan", - "metadata": { - "heading_collapsed": true, - "hidden": true - }, - "source": [ - "## Sample attempt" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "substantial-aggregate", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text_sample = p279WordSimSeededDF_wabs_text[:1000]" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "id": "analyzed-passion", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "id": "japanese-defense", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "dying-nigeria", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "reduced-avenue", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1034" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "advised-hollywood", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "authentic-greene", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 1034.000000\n", - "mean 0.281990\n", - "std 0.054759\n", - "min 0.069792\n", - "25% 0.244698\n", - "50% 0.278019\n", - "75% 0.319656\n", - "max 0.450444\n", - "dtype: float64" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "variable-transportation", - "metadata": { - "heading_collapsed": true, - "hidden": true - }, - "source": [ - "## ChildPar dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "central-spyware", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "white-genesis", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "id": "registered-original", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "id": "experienced-conspiracy", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "18860" - ] - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "id": "every-interface", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 131, - "id": "specified-berry", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 18860.000000\n", - "mean 0.283712\n", - "std 0.056573\n", - "min 0.050719\n", - "25% 0.246137\n", - "50% 0.281897\n", - "75% 0.319687\n", - "max 0.564922\n", - "dtype: float64" - ] - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "incoming-calvin", - "metadata": {}, - "source": [ - "# Correlation Code" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "answering-exhaust", - "metadata": {}, - "outputs": [], - "source": [ - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - "LABELS = ['I','U','M']\n", - "def fetchCorrelationResults(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - " wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - " wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - "# wordSimMissingSet\n", - " print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n", - " print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - " print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - " print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " \n", - " print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " \n", - " cm_old = confusion_matrix(wordSim353AnnotDF_New2['category'], wordSim353AnnotDF_New2['textOld'].apply(labelSamples), labels=LABELS)\n", - " cm_new = confusion_matrix(wordSim353AnnotDF_New2['category'], wordSim353AnnotDF_New2['textNew'].apply(labelSamples), labels=LABELS)\n", - " \n", - " return wordSimMissingSet, cm_old, cm_new" - ] - }, - { - "cell_type": "markdown", - "id": "sacred-bacon", - "metadata": {}, - "source": [ - "# Dataset-Target Combinations" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "premier-crisis", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster = {}\n", - "newEmbedDictMaster = {}\n", - "confusionMatrixMaster = {}" - ] - }, - { - "cell_type": "markdown", - "id": "scientific-heading", - "metadata": {}, - "source": [ - "### Text Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "stretch-elizabeth", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-7-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "sapphire-bulgarian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding[-0.13148594, 0.20147827, 0.015393771, 1.12779...
1Q99898510text_embedding[0.19386396, 0.41306746, -0.32783666, 0.450188...
2Q99526025text_embedding[0.89479333, 0.27038768, 0.15989815, -0.092144...
3Q99365546text_embedding[0.10686234, 0.95048314, 0.32389534, 0.1960084...
4Q993308text_embedding[0.23211154, 0.060303785, -1.0003253, 0.637829...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "1 Q99898510 text_embedding \n", - "2 Q99526025 text_embedding \n", - "3 Q99365546 text_embedding \n", - "4 Q993308 text_embedding \n", - "\n", - " value \n", - "0 [-0.13148594, 0.20147827, 0.015393771, 1.12779... \n", - "1 [0.19386396, 0.41306746, -0.32783666, 0.450188... \n", - "2 [0.89479333, 0.27038768, 0.15989815, -0.092144... \n", - "3 [0.10686234, 0.95048314, 0.32389534, 0.1960084... \n", - "4 [0.23211154, 0.060303785, -1.0003253, 0.637829... " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "rising-lawyer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19155" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "closed-charles", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19155\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19155.000000\n", - "mean 0.271898\n", - "std 0.057984\n", - "min 0.000000\n", - "25% 0.231530\n", - "50% 0.268294\n", - "75% 0.308696\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3975352135008474, pvalue=2.274798622604064e-24)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3876948460943732, pvalue=2.944054929116869e-23)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4253385100650523, pvalue=3.397679519805734e-30)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.41910186320873755, pvalue=2.2966918648680457e-29)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.5950920245398773\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5153374233128835\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19155.000000\n", - "mean 0.193850\n", - "std 0.113418\n", - "min 0.000000\n", - "25% 0.086588\n", - "50% 0.192671\n", - "75% 0.291258\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3975352135008474, pvalue=2.274798622604064e-24)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3896871945725784, pvalue=1.7567320499364868e-23)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4253385100650523, pvalue=3.397679519805734e-30)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.429300613416863, pvalue=9.889526081071043e-31)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.5950920245398773\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5920245398773006\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19155.000000\n", - "mean 0.325848\n", - "std 0.071942\n", - "min 0.000000\n", - "25% 0.277981\n", - "50% 0.321763\n", - "75% 0.370070\n", - "max 0.648638\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3975352135008474, pvalue=2.274798622604064e-24)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.380602867202403, pvalue=1.7935601808141945e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4253385100650523, pvalue=3.397679519805734e-30)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3995893685604078, pvalue=7.608607437786723e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.5950920245398773\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.39570552147239263\n" - ] - } - ], - "source": [ - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_7props_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['text_7props_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _, confusionMatrixMaster['text_7props_19k_old_'+str(weightCase)], confusionMatrixMaster['text_7props_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "accessory-isolation", - "metadata": {}, - "source": [ - "### Text Embeddings - 2 props | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "bored-sweden", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-2-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "speaking-sharing", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding[-0.13148594, 0.20147827, 0.015393771, 1.12779...
1Q99898510text_embedding[0.19386396, 0.41306746, -0.32783666, 0.450188...
2Q99526025text_embedding[0.89479333, 0.27038768, 0.15989815, -0.092144...
3Q99365546text_embedding[0.10686234, 0.95048314, 0.32389534, 0.1960084...
4Q993308text_embedding[0.23211154, 0.060303785, -1.0003253, 0.637829...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "1 Q99898510 text_embedding \n", - "2 Q99526025 text_embedding \n", - "3 Q99365546 text_embedding \n", - "4 Q993308 text_embedding \n", - "\n", - " value \n", - "0 [-0.13148594, 0.20147827, 0.015393771, 1.12779... \n", - "1 [0.19386396, 0.41306746, -0.32783666, 0.450188... \n", - "2 [0.89479333, 0.27038768, 0.15989815, -0.092144... \n", - "3 [0.10686234, 0.95048314, 0.32389534, 0.1960084... \n", - "4 [0.23211154, 0.060303785, -1.0003253, 0.637829... " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "addressed-march", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19155" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "latter-spelling", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19155\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19155.000000\n", - "mean 0.270895\n", - "std 0.059990\n", - "min 0.000000\n", - "25% 0.228547\n", - "50% 0.266816\n", - "75% 0.309132\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3793643502923977, pvalue=2.45298661169592e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.40586371991954756, pvalue=1.2142237724855381e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.49079754601226994\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19155.000000\n", - "mean 0.194648\n", - "std 0.115900\n", - "min 0.000000\n", - "25% 0.083470\n", - "50% 0.191821\n", - "75% 0.294976\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.36958425592956784, pvalue=2.7849781516020684e-21)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.39348934596160956, pvalue=4.414924758703321e-26)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5766871165644172\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19155.000000\n", - "mean 0.323673\n", - "std 0.069955\n", - "min 0.000000\n", - "25% 0.277272\n", - "50% 0.319275\n", - "75% 0.365774\n", - "max 0.677490\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3746327832763941, pvalue=8.004468522493588e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.39398189437020814, pvalue=3.8343633718362455e-26)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.3834355828220859\n" - ] - } - ], - "source": [ - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_2props_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['text_2props_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['text_2props_19k_old_'+str(weightCase)], confusionMatrixMaster['text_2props_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "promising-estonia", - "metadata": {}, - "source": [ - "### Complex Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "flexible-creature", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "sustainable-nurse", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "amino-there", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "yellow-estate", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddings = {}\n", - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "necessary-house", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.316720\n", - "std 0.076381\n", - "min 0.000000\n", - "25% 0.261478\n", - "50% 0.313781\n", - "75% 0.370851\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3168500395328192, pvalue=7.486323665386832e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27202499209162273, pvalue=6.770258859650813e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.232133\n", - "std 0.142269\n", - "min 0.000000\n", - "25% 0.089938\n", - "50% 0.228553\n", - "75% 0.361251\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3361212489826738, pvalue=9.03613034020374e-19)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.29248433284517855, pvalue=7.890529591252537e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6618075801749271\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.375082\n", - "std 0.073982\n", - "min 0.000000\n", - "25% 0.330119\n", - "50% 0.377307\n", - "75% 0.421860\n", - "max 0.841769\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.26508277549218445, pvalue=3.0194195465523546e-12)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21338136285025483, pvalue=4.17252744630606e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5830903790087464\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['complex_19k_old_'+str(weightCase)], confusionMatrixMaster['complex_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "racial-tutorial", - "metadata": {}, - "source": [ - "### Transe Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "dominant-youth", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "complicated-indie", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "interstate-worst", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "color-newspaper", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "sealed-undergraduate", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.332525\n", - "std 0.085513\n", - "min 0.000000\n", - "25% 0.269043\n", - "50% 0.327802\n", - "75% 0.393660\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.23996930346932127, pvalue=2.6942170209534906e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21449104599327523, pvalue=3.4760310637715348e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.242979\n", - "std 0.150562\n", - "min 0.000000\n", - "25% 0.094960\n", - "50% 0.237343\n", - "75% 0.378069\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24439786532398405, pvalue=1.2600161404554345e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22590625729631375, pvalue=4.917533132159808e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.60932944606414\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.394277\n", - "std 0.086197\n", - "min 0.000000\n", - "25% 0.339162\n", - "50% 0.397921\n", - "75% 0.452267\n", - "max 0.850905\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24274131207452157, pvalue=1.6736422306859635e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.201734473314897, pvalue=2.7559659468673134e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6064139941690962\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "amber-priority", - "metadata": {}, - "source": [ - "### Complex Embeddings | Probase Target" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "coastal-beach", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "familiar-springer", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "duplicate-storm", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "unsigned-hungarian", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "mental-coaching", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17845\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 7.887688e-02\n", - "std 1.377091e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.314421e-01\n", - "max 5.041080e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31031745482774675, pvalue=3.150145092040765e-16)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.26161279947706156, pvalue=5.774092784287413e-13)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6268221574344023\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 1.910100e+04\n", - "mean 3.252887e-02\n", - "std 8.773144e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 1.094678e-03\n", - "max 5.041080e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.35020973149202944, pvalue=3.059720074110226e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3013432304449195, pvalue=1.0451590470362559e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6588921282798834\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 1.910100e+04\n", - "mean 1.251606e-01\n", - "std 2.222320e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.940167e-01\n", - "max 8.900593e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.14149430916593933, pvalue=0.00019608082976567604)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.14687524939411561, pvalue=5.22383486460822e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.1457725947521866\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_probase'] = embedDict\n", - "neighDict = fetchNeighbours(probDF_Qnodes_DF_WQnodes1_subset)\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_probase_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "sticky-light", - "metadata": {}, - "source": [ - "### Transe Embeddings | Probase Target" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "normal-house", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "reserved-sport", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "norman-graph", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "identical-amsterdam", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
.........
19096Q2963354[0.126148477, -0.760043263, 0.834101379, 0.413...
19097Q412770[-0.131047472, -0.532605469, -0.180144981, -0....
19098Q8063082[0.173550904, -0.246142939, 0.750203907, 0.030...
19099Q58308662[0.572182953, 0.186988175, -0.116030365, -0.35...
19100Q7205879[0.752269626, -0.460156113, 0.517503202, 0.019...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3...\n", - "... ... ...\n", - "19096 Q2963354 [0.126148477, -0.760043263, 0.834101379, 0.413...\n", - "19097 Q412770 [-0.131047472, -0.532605469, -0.180144981, -0....\n", - "19098 Q8063082 [0.173550904, -0.246142939, 0.750203907, 0.030...\n", - "19099 Q58308662 [0.572182953, 0.186988175, -0.116030365, -0.35...\n", - "19100 Q7205879 [0.752269626, -0.460156113, 0.517503202, 0.019...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "knowing-register", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "inside-opportunity", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17845\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 8.215694e-02\n", - "std 1.439020e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.305726e-01\n", - "max 5.315488e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.22012582471779607, pvalue=6.9001945281841384e-09)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.19941082640413085, pvalue=3.969975785916229e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6472303206997084\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 1.910100e+04\n", - "mean 3.399453e-02\n", - "std 9.216743e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 1.230265e-03\n", - "max 5.315488e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24783606125619878, pvalue=6.903890636652704e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22349921038500295, pvalue=7.473348989752392e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 1.910100e+04\n", - "mean 1.302927e-01\n", - "std 2.320257e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.960976e-01\n", - "max 9.949517e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12855892543728606, pvalue=0.0007155142288469726)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.13749877727529278, pvalue=0.00015240104075019828)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.17784256559766765\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_probase'] = embedDict\n", - "neighDict = fetchNeighbours(probDF_Qnodes_DF_WQnodes1_subset)\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_probase_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "listed-parent", - "metadata": {}, - "source": [ - "### Complex Embeddings | Probase + 19k + 19k Target" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "sustained-benchmark", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "qualified-chase", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "occupational-survival", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "intermediate-netherlands", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "piano-delta", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.302721\n", - "std 0.067184\n", - "min 0.000000\n", - "25% 0.259615\n", - "50% 0.294771\n", - "75% 0.342928\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31582754528140355, pvalue=9.373921755437325e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27369250100948833, pvalue=4.756656623381545e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6326530612244898\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.178804\n", - "std 0.139703\n", - "min 0.000000\n", - "25% 0.054379\n", - "50% 0.137749\n", - "75% 0.307442\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3464370368444909, pvalue=7.656876025494246e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3011763909407297, pvalue=1.0831987277611373e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.402505\n", - "std 0.098028\n", - "min 0.000000\n", - "25% 0.339741\n", - "50% 0.393894\n", - "75% 0.452606\n", - "max 0.889403\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12191472957942284, pvalue=0.0013338871853105486)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.14137053781971248, pvalue=9.875366583327447e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.16034985422740525\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_probase_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_probase_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "square-outreach", - "metadata": {}, - "source": [ - "### Transe Embeddings | Probase + 19k + 19k Target" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "powered-kidney", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "eligible-mercury", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "passing-france", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "catholic-flexibility", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
.........
19096Q2963354[0.126148477, -0.760043263, 0.834101379, 0.413...
19097Q412770[-0.131047472, -0.532605469, -0.180144981, -0....
19098Q8063082[0.173550904, -0.246142939, 0.750203907, 0.030...
19099Q58308662[0.572182953, 0.186988175, -0.116030365, -0.35...
19100Q7205879[0.752269626, -0.460156113, 0.517503202, 0.019...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3...\n", - "... ... ...\n", - "19096 Q2963354 [0.126148477, -0.760043263, 0.834101379, 0.413...\n", - "19097 Q412770 [-0.131047472, -0.532605469, -0.180144981, -0....\n", - "19098 Q8063082 [0.173550904, -0.246142939, 0.750203907, 0.030...\n", - "19099 Q58308662 [0.572182953, 0.186988175, -0.116030365, -0.35...\n", - "19100 Q7205879 [0.752269626, -0.460156113, 0.517503202, 0.019...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "every-transmission", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "floral-union", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.316457\n", - "std 0.074755\n", - "min 0.000000\n", - "25% 0.265029\n", - "50% 0.307908\n", - "75% 0.361417\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.22203711859153544, pvalue=5.1043215609543335e-09)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.20512238050033801, pvalue=1.6083667850582075e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6443148688046647\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.186190\n", - "std 0.146220\n", - "min 0.000000\n", - "25% 0.056864\n", - "50% 0.144985\n", - "75% 0.307240\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2479273527617227, pvalue=6.816190052635217e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2263056114290315, pvalue=4.5887579264134097e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.597667638483965\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.421187\n", - "std 0.108116\n", - "min 0.000000\n", - "25% 0.350740\n", - "50% 0.416101\n", - "75% 0.480072\n", - "max 0.972091\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12731453008255086, pvalue=0.0008059106457544173)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1476648434866464, pvalue=4.7610094969077205e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.2594752186588921\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_probase_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_probase_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "organic-earth", - "metadata": {}, - "source": [ - "### Abstract Text Embeddings | 19k+19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "royal-update", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "import re\n", - "absEmbeddings = {}\n", - "for _, row in pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]).iterrows():\n", - " if not(pd.isna(row['BERT_abstract_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in row['BERT_abstract_emb'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node1_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node1_emb'][1:-1])))])\n", - " \n", - " if not(pd.isna(row['BERT_abstract_emb_right'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in row['BERT_abstract_emb_right'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node2_emb'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node2_emb'][1:-1])))])" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "straight-continuity", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "pursuant-compact", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "australian-legend", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "advanced-pattern", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "funded-third", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "identical-aspect", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategory
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454U
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784U
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022U
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260M
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112M
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id category \n", - "0 Q454 U \n", - "1 Q13648784 U \n", - "2 Q178022 U \n", - "3 Q21004260 M \n", - "4 Q49112 M " - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "specific-namibia", - "metadata": {}, - "outputs": [], - "source": [ - "missingWordSimSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in absEmbeddings)] + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in absEmbeddings)])" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "affected-consolidation", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3.3354244232177734 s\n", - "0.11755561828613281 s\n", - "0.11744570732116699 s\n", - "0.1175832748413086 s\n", - "0.11750054359436035 s\n", - "0.11730837821960449 s\n", - "0.11754989624023438 s\n", - "0.11766695976257324 s\n", - "0.11713695526123047 s\n", - "0.11739706993103027 s\n", - "0.12069988250732422 s\n", - "0.11744093894958496 s\n", - "0.11738061904907227 s\n", - "0.11722540855407715 s\n", - "0.11743450164794922 s\n", - "0.11770343780517578 s\n", - "0.11734700202941895 s\n", - "0.11752867698669434 s\n", - "0.11753010749816895 s\n", - "0.11727476119995117 s\n", - "0.11757302284240723 s\n", - "0.11744475364685059 s\n", - "0.1178896427154541 s\n", - "0.11759018898010254 s\n", - "0.11737680435180664 s\n", - "0.11777734756469727 s\n", - "0.11771225929260254 s\n", - "0.11792659759521484 s\n", - "0.1174314022064209 s\n", - "0.1175081729888916 s\n", - "0.11757636070251465 s\n", - "0.11760926246643066 s\n", - "0.11748123168945312 s\n", - "0.11753368377685547 s\n", - "0.11712884902954102 s\n", - "0.11767840385437012 s\n", - "0.11764121055603027 s\n", - "0.11763525009155273 s\n", - "0.11754012107849121 s\n", - "0.11885714530944824 s\n" - ] - } - ], - "source": [ - "for _, row in wordSim353AnnotDF_New.iterrows():\n", - " if row.word1_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word1_kg_id] = getSentEmbeddings(row['Word 1'], 'bert-base-nli-mean-tokens')\n", - " if row.word2_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word2_kg_id] = getSentEmbeddings(row['Word 2'], 'bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "fuzzy-attack", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingWordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "hawaiian-portal", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19166\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19166.000000\n", - "mean 0.336606\n", - "std 0.081060\n", - "min 0.000000\n", - "25% 0.278247\n", - "50% 0.326289\n", - "75% 0.388139\n", - "max 0.669782\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3471431474655109, pvalue=5.660815639939061e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.35383380764979844, pvalue=1.6754686847593527e-22)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5697674418604651\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19166.000000\n", - "mean 0.244583\n", - "std 0.150115\n", - "min 0.000000\n", - "25% 0.103316\n", - "50% 0.233314\n", - "75% 0.372639\n", - "max 0.669782\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.34735894519691607, pvalue=5.347633678079643e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3462632061224712, pvalue=1.2793035570514484e-21)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.627906976744186\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19166.000000\n", - "mean 0.400089\n", - "std 0.083229\n", - "min 0.000000\n", - "25% 0.344853\n", - "50% 0.397861\n", - "75% 0.451782\n", - "max 0.835283\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.32390174521065745, pvalue=1.3650315049340146e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3325159043509967, pvalue=4.65056862032923e-20)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.47093023255813954\n" - ] - } - ], - "source": [ - "embedDict = normalize(absEmbeddings)\n", - "embedDictMaster['abstract_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['abstract_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['abstract_19k_old_'+str(weightCase)], confusionMatrixMaster['abstract_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "central-valley", - "metadata": {}, - "source": [ - "### Abstract 1st Sentence Text Embeddings | 19k+19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "occupied-emission", - "metadata": {}, - "outputs": [], - "source": [ - "import re\n", - "absEmbeddings = {}\n", - "for _, row in pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]).iterrows():\n", - " if not(pd.isna(row['BERT_abstract_firstSent_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in row['BERT_abstract_firstSent_emb'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node1_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node1_emb'][1:-1])))])\n", - " \n", - " if not(pd.isna(row['BERT_abstract_firstSent_emb_right'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in row['BERT_abstract_firstSent_emb_right'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node2_emb'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node2_emb'][1:-1])))])" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "sexual-press", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "cognitive-import", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "irish-north", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "neural-communications", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "apart-church", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "monthly-enough", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategory
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454U
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784U
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022U
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260M
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112M
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id category \n", - "0 Q454 U \n", - "1 Q13648784 U \n", - "2 Q178022 U \n", - "3 Q21004260 M \n", - "4 Q49112 M " - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "varying-plaza", - "metadata": {}, - "outputs": [], - "source": [ - "missingWordSimSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in absEmbeddings)] + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in absEmbeddings)])" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "changing-cycle", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.11401677131652832 s\n", - "0.11957383155822754 s\n", - "0.09752821922302246 s\n", - "0.128997802734375 s\n", - "0.11990189552307129 s\n", - "0.11844491958618164 s\n", - "0.11752724647521973 s\n", - "0.11877274513244629 s\n", - "0.11719059944152832 s\n", - "0.11760425567626953 s\n", - "0.11708760261535645 s\n", - "0.09807181358337402 s\n", - "0.0916135311126709 s\n", - "0.09286952018737793 s\n", - "0.0907738208770752 s\n", - "0.0915842056274414 s\n", - "0.09347748756408691 s\n", - "0.08993768692016602 s\n", - "0.10148978233337402 s\n", - "0.11854410171508789 s\n", - "0.12027955055236816 s\n", - "0.13148927688598633 s\n", - "0.11908864974975586 s\n", - "0.13748478889465332 s\n", - "0.13097643852233887 s\n", - "0.11984562873840332 s\n", - "0.12159109115600586 s\n", - "0.12565040588378906 s\n", - "0.1192171573638916 s\n", - "0.14190435409545898 s\n", - "0.128098726272583 s\n", - "0.1173861026763916 s\n", - "0.11848211288452148 s\n", - "0.11741471290588379 s\n", - "0.11730766296386719 s\n", - "0.12353205680847168 s\n", - "0.11716032028198242 s\n", - "0.11889147758483887 s\n", - "0.11724376678466797 s\n", - "0.11714792251586914 s\n" - ] - } - ], - "source": [ - "for _, row in wordSim353AnnotDF_New.iterrows():\n", - " if row.word1_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word1_kg_id] = getSentEmbeddings(row['Word 1'], 'bert-base-nli-mean-tokens')\n", - " if row.word2_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word2_kg_id] = getSentEmbeddings(row['Word 2'], 'bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "documentary-midnight", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingWordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "sixth-paradise", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19166\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19166.000000\n", - "mean 0.339064\n", - "std 0.072734\n", - "min 0.000000\n", - "25% 0.287403\n", - "50% 0.334725\n", - "75% 0.388172\n", - "max 0.660678\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3571490077264898, pvalue=4.7415066582386246e-21)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3713906787854944, pvalue=1.253257701630852e-24)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6017441860465116\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19166.000000\n", - "mean 0.244476\n", - "std 0.145834\n", - "min 0.000000\n", - "25% 0.104152\n", - "50% 0.234678\n", - "75% 0.376765\n", - "max 0.660678\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.37186923032141733, pvalue=1.0985961673989065e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.37051869405377086, pvalue=1.6123151472069758e-24)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6540697674418605\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19166.000000\n", - "mean 0.404541\n", - "std 0.081848\n", - "min 0.000000\n", - "25% 0.351736\n", - "50% 0.401690\n", - "75% 0.453416\n", - "max 0.872588\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31762341611315487, pvalue=5.624902334302071e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.33907069116618244, pvalue=8.52432972070843e-21)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.4941860465116279\n" - ] - } - ], - "source": [ - "embedDict = normalize(absEmbeddings)\n", - "embedDictMaster['abstract_firstSent_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['abstract_firstSent_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _, confusionMatrixMaster['abstract_firstSent_19k_old_'+str(weightCase)], confusionMatrixMaster['abstract_firstSent_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "assigned-cameroon", - "metadata": {}, - "source": [ - "### Combination of all old embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "smooth-playlist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['text_7props_19k', 'text_2props_19k', 'complex_19k', 'transe_19k', 'complex_probase', 'transe_probase', 'complex_probase_19k', 'transe_probase_19k', 'abstract_19k', 'abstract_firstSent_19k'])" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "embedDictMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "material-design", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['text_7props_19k_1', 'text_7props_19k_2', 'text_7props_19k_0.5', 'text_2props_19k_1', 'text_2props_19k_2', 'text_2props_19k_0.5', 'complex_19k_1', 'complex_19k_2', 'complex_19k_0.5', 'transe_19k_1', 'transe_19k_2', 'transe_19k_0.5', 'complex_probase_1', 'complex_probase_2', 'complex_probase_0.5', 'transe_probase_1', 'transe_probase_2', 'transe_probase_0.5', 'complex_probase_19k_1', 'complex_probase_19k_2', 'complex_probase_19k_0.5', 'transe_probase_19k_1', 'transe_probase_19k_2', 'transe_probase_19k_0.5', 'abstract_19k_1', 'abstract_19k_2', 'abstract_19k_0.5', 'abstract_firstSent_19k_1', 'abstract_firstSent_19k_2', 'abstract_firstSent_19k_0.5'])" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newEmbedDictMaster.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "verbal-frederick", - "metadata": {}, - "source": [ - "#### Compl + Transe + Abstract" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "removed-conditions", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictConcat = {}\n", - "for key1 in ['complex_19k', 'transe_19k', \n", - " 'abstract_firstSent_19k']:\n", - " for word in embedDictMaster[key1].keys():\n", - " if word not in embedDictConcat:\n", - " embedDictConcat[word] = []\n", - " embedDictConcat[word].append(embedDictMaster[key1][word])\n", - "for word in embedDictConcat.keys():\n", - " embedDictConcat[word] = [item for sublist in embedDictConcat[word] for item in sublist]" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "indie-washington", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Size of embedding: 968\n" - ] - } - ], - "source": [ - "print(f\"Size of embedding: {len(embedDictConcat['Q18037012'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "caring-wellington", - "metadata": {}, - "outputs": [], - "source": [ - "for word1 in list(embedDictConcat.keys()):\n", - " if len(embedDictConcat[word1]) != 968:\n", - " del embedDictConcat[word1]" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "twelve-tribute", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19101.0\n", - "mean 968.0\n", - "std 0.0\n", - "min 968.0\n", - "25% 968.0\n", - "50% 968.0\n", - "75% 968.0\n", - "max 968.0\n", - "dtype: float64" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series([len(val1) for val1 in embedDictConcat.values()]).describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "animated-weight", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.336903\n", - "std 0.071873\n", - "min 0.000000\n", - "25% 0.284286\n", - "50% 0.332284\n", - "75% 0.389200\n", - "max 0.596558\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31344285039654224, pvalue=1.587990989990702e-16)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2983652058391759, pvalue=2.0692364624319403e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6676384839650146\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.245075\n", - "std 0.146398\n", - "min 0.000000\n", - "25% 0.099960\n", - "50% 0.239725\n", - "75% 0.380577\n", - "max 0.596558\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3270255968193857, pvalue=7.482780885295614e-18)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3144288703997577, pvalue=4.696112489737555e-18)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6880466472303207\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.400303\n", - "std 0.071506\n", - "min 0.000000\n", - "25% 0.357059\n", - "50% 0.402058\n", - "75% 0.445388\n", - "max 0.813749\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2967991230842074, pvalue=5.639053240442108e-15)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2739615906247492, pvalue=4.489403776140874e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_19k_v1'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_19k_v1_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "suspected-footage", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.321205\n", - "std 0.063429\n", - "min 0.000000\n", - "25% 0.277493\n", - "50% 0.311720\n", - "75% 0.359268\n", - "max 0.596557\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2891828519936888, pvalue=2.717366700252014e-14)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27713398557337643, pvalue=2.2907553462981174e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6501457725947521\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.188928\n", - "std 0.144828\n", - "min 0.000000\n", - "25% 0.059667\n", - "50% 0.147733\n", - "75% 0.327197\n", - "max 0.596557\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.33562487778756755, pvalue=1.0136749729444057e-18)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.31665315908408964, pvalue=2.7384643013776528e-18)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.427234\n", - "std 0.094690\n", - "min 0.000000\n", - "25% 0.367149\n", - "50% 0.418971\n", - "75% 0.473102\n", - "max 0.895330\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.13050673469358315, pvalue=0.0005927381978235836)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1636905372538761, pvalue=6.524566396115546e-06)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.22157434402332363\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_probase_19k_v1'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_probase_19k__v1_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "second-norway", - "metadata": {}, - "source": [ - "#### Text_7props + Text_2props + Complex + Transe + Abstract + Abstract_FirstSent" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "guided-accounting", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictConcat = {}\n", - "for key1 in ['text_7props_19k', 'text_2props_19k', 'complex_19k', 'transe_19k', \n", - " 'abstract_19k', 'abstract_firstSent_19k']:\n", - " for word in embedDictMaster[key1].keys():\n", - " if word not in embedDictConcat:\n", - " embedDictConcat[word] = []\n", - " embedDictConcat[word].append(embedDictMaster[key1][word])\n", - "for word in embedDictConcat.keys():\n", - " embedDictConcat[word] = [item for sublist in embedDictConcat[word] for item in sublist]" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "creative-advice", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Size of embedding: 3784\n" - ] - } - ], - "source": [ - "print(f\"Size of embedding: {len(embedDictConcat['Q18037012'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "apart-storm", - "metadata": {}, - "outputs": [], - "source": [ - "for word1 in list(embedDictConcat.keys()):\n", - " if len(embedDictConcat[word1]) != 3784:\n", - " del embedDictConcat[word1]" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "foreign-merchant", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19090.0\n", - "mean 3784.0\n", - "std 0.0\n", - "min 3784.0\n", - "25% 3784.0\n", - "50% 3784.0\n", - "75% 3784.0\n", - "max 3784.0\n", - "dtype: float64" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series([len(val1) for val1 in embedDictConcat.values()]).describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "aquatic-harbor", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19090\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19090.000000\n", - "mean 0.318414\n", - "std 0.060577\n", - "min 0.000000\n", - "25% 0.273273\n", - "50% 0.313881\n", - "75% 0.362231\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.40347307747318084, pvalue=5.629213176377413e-25)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.40536224043013125, pvalue=1.6868252763103453e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6307692307692307\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19090.000000\n", - "mean 0.230697\n", - "std 0.135101\n", - "min 0.000000\n", - "25% 0.097307\n", - "50% 0.223935\n", - "75% 0.356438\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.40442451164800897, pvalue=4.371701842100601e-25)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.4101503518414275, pvalue=4.1055209935697305e-28)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19090.000000\n", - "mean 0.378997\n", - "std 0.061137\n", - "min 0.000000\n", - "25% 0.342927\n", - "50% 0.379359\n", - "75% 0.416067\n", - "max 0.760023\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3828276431671376, pvalue=1.2015280268194575e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.36987136293537864, pvalue=3.618695156207996e-23)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5415384615384615\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_19k_v2'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_19k_v2_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "behavioral-brooks", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19090\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19090.000000\n", - "mean 0.304466\n", - "std 0.054097\n", - "min 0.000000\n", - "25% 0.266260\n", - "50% 0.295631\n", - "75% 0.337646\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3563958420194592, pvalue=7.705212357023742e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.36941390801600477, pvalue=4.091096997249633e-23)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6092307692307692\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19090.000000\n", - "mean 0.178573\n", - "std 0.134771\n", - "min 0.000000\n", - "25% 0.057617\n", - "50% 0.140175\n", - "75% 0.314839\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.4167472980442226, pvalue=1.5499840293424274e-26)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.41238438242524034, pvalue=2.1128593107239733e-28)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6553846153846153\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19090.000000\n", - "mean 0.405175\n", - "std 0.085240\n", - "min 0.000000\n", - "25% 0.352177\n", - "50% 0.394099\n", - "75% 0.443428\n", - "max 0.797620\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.1299009113611685, pvalue=0.0008902251998159792)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1761010833372823, pvalue=2.3561612238907513e-06)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.16923076923076924\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_probase_19k_v2'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_probase_19k_v2_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "quality-insured", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ideal-pipeline", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "organized-student", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "alternative-cloud", - "metadata": {}, - "source": [ - "### Text Embeddings | 19k + 19k dataset unweighted" - ] - }, - { - "cell_type": "code", - "execution_count": 194, - "id": "dangerous-carrier", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-7-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "fossil-exemption", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding[-0.13148594, 0.20147827, 0.015393771, 1.12779...
1Q99898510text_embedding[0.19386396, 0.41306746, -0.32783666, 0.450188...
2Q99526025text_embedding[0.89479333, 0.27038768, 0.15989815, -0.092144...
3Q99365546text_embedding[0.10686234, 0.95048314, 0.32389534, 0.1960084...
4Q993308text_embedding[0.23211154, 0.060303785, -1.0003253, 0.637829...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "1 Q99898510 text_embedding \n", - "2 Q99526025 text_embedding \n", - "3 Q99365546 text_embedding \n", - "4 Q993308 text_embedding \n", - "\n", - " value \n", - "0 [-0.13148594, 0.20147827, 0.015393771, 1.12779... \n", - "1 [0.19386396, 0.41306746, -0.32783666, 0.450188... \n", - "2 [0.89479333, 0.27038768, 0.15989815, -0.092144... \n", - "3 [0.10686234, 0.95048314, 0.32389534, 0.1960084... \n", - "4 [0.23211154, 0.060303785, -1.0003253, 0.637829... " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "antique-purchase", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19155" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 192, - "id": "automatic-monitor", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0membedDict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfetchEmbeddings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtextEmb_7props_DF\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0membedDictMaster\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'text_7props_19k_uw'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0membedDict\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mneighDict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfetchNeighbours\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconcat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mp279WordSimSeededDF_wabs_text\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp279Seeded_SiblingsDF3_wabs_text\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"No. of keys in embedDict: {len(embedDict.keys())}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36mfetchNeighbours\u001b[0;34m(df)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfetchNeighbours\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mneighboursDict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterrows\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnode1\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mneighboursDict\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mneighboursDict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnode1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36miterrows\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1069\u001b[0m \u001b[0mklass\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_constructor_sliced\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1070\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1071\u001b[0;31m \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mklass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1072\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1073\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, index, dtype, name, copy, fastpath)\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 366\u001b[0m \u001b[0mgeneric\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mNDFrame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 367\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 368\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_set_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfastpath\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 369\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m__setattr__\u001b[0;34m(self, name, value)\u001b[0m\n\u001b[1;32m 5482\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5483\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5484\u001b[0;31m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5485\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5486\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36mname\u001b[0;34m(self, value)\u001b[0m\n\u001b[1;32m 536\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetter\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 537\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mLabel\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 538\u001b[0;31m \u001b[0mvalidate_all_hashable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror_name\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34mf\"{type(self).__name__}.name\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 539\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"_name\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 540\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/dtypes/common.py\u001b[0m in \u001b[0;36mvalidate_all_hashable\u001b[0;34m(error_name, *args)\u001b[0m\n\u001b[1;32m 1760\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1761\u001b[0m \"\"\"\n\u001b[0;32m-> 1762\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mis_hashable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1763\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0merror_name\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1764\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{error_name} must be a hashable type\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/dtypes/common.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1760\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1761\u001b[0m \"\"\"\n\u001b[0;32m-> 1762\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mis_hashable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1763\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0merror_name\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1764\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{error_name} must be a hashable type\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/dtypes/inference.py\u001b[0m in \u001b[0;36mis_hashable\u001b[0;34m(obj)\u001b[0m\n\u001b[1;32m 351\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 353\u001b[0;31m \u001b[0mhash\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 354\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 355\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_7props_19k_uw'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['text_7props_19k_uw_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _, confusionMatrixMaster['text_7props_19k_uw_old_'+str(weightCase)], confusionMatrixMaster['text_7props_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "horizontal-repair", - "metadata": {}, - "source": [ - "### Text Embeddings - 2 props | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "vital-royal", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-2-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "adopted-edwards", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding[-0.13148594, 0.20147827, 0.015393771, 1.12779...
1Q99898510text_embedding[0.19386396, 0.41306746, -0.32783666, 0.450188...
2Q99526025text_embedding[0.89479333, 0.27038768, 0.15989815, -0.092144...
3Q99365546text_embedding[0.10686234, 0.95048314, 0.32389534, 0.1960084...
4Q993308text_embedding[0.23211154, 0.060303785, -1.0003253, 0.637829...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "1 Q99898510 text_embedding \n", - "2 Q99526025 text_embedding \n", - "3 Q99365546 text_embedding \n", - "4 Q993308 text_embedding \n", - "\n", - " value \n", - "0 [-0.13148594, 0.20147827, 0.015393771, 1.12779... \n", - "1 [0.19386396, 0.41306746, -0.32783666, 0.450188... \n", - "2 [0.89479333, 0.27038768, 0.15989815, -0.092144... \n", - "3 [0.10686234, 0.95048314, 0.32389534, 0.1960084... \n", - "4 [0.23211154, 0.060303785, -1.0003253, 0.637829... " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "equipped-vaccine", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19155" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "fourth-drawing", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19155\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19155.000000\n", - "mean 0.270895\n", - "std 0.059990\n", - "min 0.000000\n", - "25% 0.228547\n", - "50% 0.266816\n", - "75% 0.309132\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3793643502923977, pvalue=2.45298661169592e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.40586371991954756, pvalue=1.2142237724855381e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.49079754601226994\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19155.000000\n", - "mean 0.194648\n", - "std 0.115900\n", - "min 0.000000\n", - "25% 0.083470\n", - "50% 0.191821\n", - "75% 0.294976\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.36958425592956784, pvalue=2.7849781516020684e-21)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.39348934596160956, pvalue=4.414924758703321e-26)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5766871165644172\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19155.000000\n", - "mean 0.323673\n", - "std 0.069955\n", - "min 0.000000\n", - "25% 0.277272\n", - "50% 0.319275\n", - "75% 0.365774\n", - "max 0.677490\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3746327832763941, pvalue=8.004468522493588e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.39398189437020814, pvalue=3.8343633718362455e-26)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.3834355828220859\n" - ] - } - ], - "source": [ - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_2props_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['text_2props_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['text_2props_19k_old_'+str(weightCase)], confusionMatrixMaster['text_2props_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "mobile-paradise", - "metadata": {}, - "source": [ - "### Complex Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "allied-newcastle", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "abstract-survey", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "wanted-parade", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "considered-azerbaijan", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddings = {}\n", - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "composite-shield", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.316720\n", - "std 0.076381\n", - "min 0.000000\n", - "25% 0.261478\n", - "50% 0.313781\n", - "75% 0.370851\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3168500395328192, pvalue=7.486323665386832e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27202499209162273, pvalue=6.770258859650813e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.232133\n", - "std 0.142269\n", - "min 0.000000\n", - "25% 0.089938\n", - "50% 0.228553\n", - "75% 0.361251\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3361212489826738, pvalue=9.03613034020374e-19)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.29248433284517855, pvalue=7.890529591252537e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6618075801749271\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.375082\n", - "std 0.073982\n", - "min 0.000000\n", - "25% 0.330119\n", - "50% 0.377307\n", - "75% 0.421860\n", - "max 0.841769\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.26508277549218445, pvalue=3.0194195465523546e-12)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21338136285025483, pvalue=4.17252744630606e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5830903790087464\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['complex_19k_old_'+str(weightCase)], confusionMatrixMaster['complex_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "crucial-translation", - "metadata": {}, - "source": [ - "### Transe Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "selected-gentleman", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "ranking-characterization", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "fewer-average", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "rational-present", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "interstate-episode", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.332525\n", - "std 0.085513\n", - "min 0.000000\n", - "25% 0.269043\n", - "50% 0.327802\n", - "75% 0.393660\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.23996930346932127, pvalue=2.6942170209534906e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21449104599327523, pvalue=3.4760310637715348e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.242979\n", - "std 0.150562\n", - "min 0.000000\n", - "25% 0.094960\n", - "50% 0.237343\n", - "75% 0.378069\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24439786532398405, pvalue=1.2600161404554345e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22590625729631375, pvalue=4.917533132159808e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.60932944606414\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.394277\n", - "std 0.086197\n", - "min 0.000000\n", - "25% 0.339162\n", - "50% 0.397921\n", - "75% 0.452267\n", - "max 0.850905\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24274131207452157, pvalue=1.6736422306859635e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.201734473314897, pvalue=2.7559659468673134e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6064139941690962\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "professional-cutting", - "metadata": {}, - "source": [ - "### Complex Embeddings | Probase Target" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "bridal-scope", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "premium-manufacturer", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "organic-above", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "removable-steps", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "rubber-principal", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17845\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 7.887688e-02\n", - "std 1.377091e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.314421e-01\n", - "max 5.041080e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31031745482774675, pvalue=3.150145092040765e-16)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.26161279947706156, pvalue=5.774092784287413e-13)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6268221574344023\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 1.910100e+04\n", - "mean 3.252887e-02\n", - "std 8.773144e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 1.094678e-03\n", - "max 5.041080e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.35020973149202944, pvalue=3.059720074110226e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3013432304449195, pvalue=1.0451590470362559e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6588921282798834\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 1.910100e+04\n", - "mean 1.251606e-01\n", - "std 2.222320e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.940167e-01\n", - "max 8.900593e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.14149430916593933, pvalue=0.00019608082976567604)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.14687524939411561, pvalue=5.22383486460822e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.1457725947521866\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_probase'] = embedDict\n", - "neighDict = fetchNeighbours(probDF_Qnodes_DF_WQnodes1_subset)\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_probase_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "congressional-teaching", - "metadata": {}, - "source": [ - "### Transe Embeddings | Probase Target" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "medieval-retail", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "artificial-dispatch", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "satellite-liquid", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "muslim-gospel", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
.........
19096Q2963354[0.126148477, -0.760043263, 0.834101379, 0.413...
19097Q412770[-0.131047472, -0.532605469, -0.180144981, -0....
19098Q8063082[0.173550904, -0.246142939, 0.750203907, 0.030...
19099Q58308662[0.572182953, 0.186988175, -0.116030365, -0.35...
19100Q7205879[0.752269626, -0.460156113, 0.517503202, 0.019...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3...\n", - "... ... ...\n", - "19096 Q2963354 [0.126148477, -0.760043263, 0.834101379, 0.413...\n", - "19097 Q412770 [-0.131047472, -0.532605469, -0.180144981, -0....\n", - "19098 Q8063082 [0.173550904, -0.246142939, 0.750203907, 0.030...\n", - "19099 Q58308662 [0.572182953, 0.186988175, -0.116030365, -0.35...\n", - "19100 Q7205879 [0.752269626, -0.460156113, 0.517503202, 0.019...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "fuzzy-seven", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "sapphire-prescription", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17845\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 8.215694e-02\n", - "std 1.439020e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.305726e-01\n", - "max 5.315488e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.22012582471779607, pvalue=6.9001945281841384e-09)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.19941082640413085, pvalue=3.969975785916229e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6472303206997084\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 1.910100e+04\n", - "mean 3.399453e-02\n", - "std 9.216743e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 1.230265e-03\n", - "max 5.315488e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24783606125619878, pvalue=6.903890636652704e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22349921038500295, pvalue=7.473348989752392e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 1.910100e+04\n", - "mean 1.302927e-01\n", - "std 2.320257e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.960976e-01\n", - "max 9.949517e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12855892543728606, pvalue=0.0007155142288469726)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.13749877727529278, pvalue=0.00015240104075019828)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.17784256559766765\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_probase'] = embedDict\n", - "neighDict = fetchNeighbours(probDF_Qnodes_DF_WQnodes1_subset)\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_probase_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "spiritual-johnson", - "metadata": {}, - "source": [ - "### Complex Embeddings | Probase + 19k + 19k Target" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "monthly-mexican", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "equipped-structure", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "natural-integer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "joint-revision", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "rocky-announcement", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.302721\n", - "std 0.067184\n", - "min 0.000000\n", - "25% 0.259615\n", - "50% 0.294771\n", - "75% 0.342928\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31582754528140355, pvalue=9.373921755437325e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27369250100948833, pvalue=4.756656623381545e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6326530612244898\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.178804\n", - "std 0.139703\n", - "min 0.000000\n", - "25% 0.054379\n", - "50% 0.137749\n", - "75% 0.307442\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3464370368444909, pvalue=7.656876025494246e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3011763909407297, pvalue=1.0831987277611373e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.402505\n", - "std 0.098028\n", - "min 0.000000\n", - "25% 0.339741\n", - "50% 0.393894\n", - "75% 0.452606\n", - "max 0.889403\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12191472957942284, pvalue=0.0013338871853105486)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.14137053781971248, pvalue=9.875366583327447e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.16034985422740525\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_probase_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_probase_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "damaged-future", - "metadata": {}, - "source": [ - "### Transe Embeddings | Probase + 19k + 19k Target" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "stable-front", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "sublime-cleaner", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "opposite-destiny", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "defined-disney", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
.........
19096Q2963354[0.126148477, -0.760043263, 0.834101379, 0.413...
19097Q412770[-0.131047472, -0.532605469, -0.180144981, -0....
19098Q8063082[0.173550904, -0.246142939, 0.750203907, 0.030...
19099Q58308662[0.572182953, 0.186988175, -0.116030365, -0.35...
19100Q7205879[0.752269626, -0.460156113, 0.517503202, 0.019...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3...\n", - "... ... ...\n", - "19096 Q2963354 [0.126148477, -0.760043263, 0.834101379, 0.413...\n", - "19097 Q412770 [-0.131047472, -0.532605469, -0.180144981, -0....\n", - "19098 Q8063082 [0.173550904, -0.246142939, 0.750203907, 0.030...\n", - "19099 Q58308662 [0.572182953, 0.186988175, -0.116030365, -0.35...\n", - "19100 Q7205879 [0.752269626, -0.460156113, 0.517503202, 0.019...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "simplified-honolulu", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "suitable-theory", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.316457\n", - "std 0.074755\n", - "min 0.000000\n", - "25% 0.265029\n", - "50% 0.307908\n", - "75% 0.361417\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.22203711859153544, pvalue=5.1043215609543335e-09)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.20512238050033801, pvalue=1.6083667850582075e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6443148688046647\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.186190\n", - "std 0.146220\n", - "min 0.000000\n", - "25% 0.056864\n", - "50% 0.144985\n", - "75% 0.307240\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2479273527617227, pvalue=6.816190052635217e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2263056114290315, pvalue=4.5887579264134097e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.597667638483965\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.421187\n", - "std 0.108116\n", - "min 0.000000\n", - "25% 0.350740\n", - "50% 0.416101\n", - "75% 0.480072\n", - "max 0.972091\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12731453008255086, pvalue=0.0008059106457544173)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1476648434866464, pvalue=4.7610094969077205e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.2594752186588921\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_probase_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_probase_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "chemical-ministry", - "metadata": {}, - "source": [ - "### Abstract Text Embeddings | 19k+19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "unusual-wesley", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "import re\n", - "absEmbeddings = {}\n", - "for _, row in pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]).iterrows():\n", - " if not(pd.isna(row['BERT_abstract_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in row['BERT_abstract_emb'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node1_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node1_emb'][1:-1])))])\n", - " \n", - " if not(pd.isna(row['BERT_abstract_emb_right'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in row['BERT_abstract_emb_right'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node2_emb'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node2_emb'][1:-1])))])" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "numerous-timer", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "detected-royalty", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "familiar-cabinet", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "overhead-intellectual", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "fifth-campbell", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "systematic-specialist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategory
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454U
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784U
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022U
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260M
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112M
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id category \n", - "0 Q454 U \n", - "1 Q13648784 U \n", - "2 Q178022 U \n", - "3 Q21004260 M \n", - "4 Q49112 M " - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "warming-medicare", - "metadata": {}, - "outputs": [], - "source": [ - "missingWordSimSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in absEmbeddings)] + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in absEmbeddings)])" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "convenient-honduras", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3.3354244232177734 s\n", - "0.11755561828613281 s\n", - "0.11744570732116699 s\n", - "0.1175832748413086 s\n", - "0.11750054359436035 s\n", - "0.11730837821960449 s\n", - "0.11754989624023438 s\n", - "0.11766695976257324 s\n", - "0.11713695526123047 s\n", - "0.11739706993103027 s\n", - "0.12069988250732422 s\n", - "0.11744093894958496 s\n", - "0.11738061904907227 s\n", - "0.11722540855407715 s\n", - "0.11743450164794922 s\n", - "0.11770343780517578 s\n", - "0.11734700202941895 s\n", - "0.11752867698669434 s\n", - "0.11753010749816895 s\n", - "0.11727476119995117 s\n", - "0.11757302284240723 s\n", - "0.11744475364685059 s\n", - "0.1178896427154541 s\n", - "0.11759018898010254 s\n", - "0.11737680435180664 s\n", - "0.11777734756469727 s\n", - "0.11771225929260254 s\n", - "0.11792659759521484 s\n", - "0.1174314022064209 s\n", - "0.1175081729888916 s\n", - "0.11757636070251465 s\n", - "0.11760926246643066 s\n", - "0.11748123168945312 s\n", - "0.11753368377685547 s\n", - "0.11712884902954102 s\n", - "0.11767840385437012 s\n", - "0.11764121055603027 s\n", - "0.11763525009155273 s\n", - "0.11754012107849121 s\n", - "0.11885714530944824 s\n" - ] - } - ], - "source": [ - "for _, row in wordSim353AnnotDF_New.iterrows():\n", - " if row.word1_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word1_kg_id] = getSentEmbeddings(row['Word 1'], 'bert-base-nli-mean-tokens')\n", - " if row.word2_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word2_kg_id] = getSentEmbeddings(row['Word 2'], 'bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "documentary-puppy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingWordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "rural-spyware", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19166\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19166.000000\n", - "mean 0.336606\n", - "std 0.081060\n", - "min 0.000000\n", - "25% 0.278247\n", - "50% 0.326289\n", - "75% 0.388139\n", - "max 0.669782\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3471431474655109, pvalue=5.660815639939061e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.35383380764979844, pvalue=1.6754686847593527e-22)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5697674418604651\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19166.000000\n", - "mean 0.244583\n", - "std 0.150115\n", - "min 0.000000\n", - "25% 0.103316\n", - "50% 0.233314\n", - "75% 0.372639\n", - "max 0.669782\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.34735894519691607, pvalue=5.347633678079643e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3462632061224712, pvalue=1.2793035570514484e-21)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.627906976744186\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19166.000000\n", - "mean 0.400089\n", - "std 0.083229\n", - "min 0.000000\n", - "25% 0.344853\n", - "50% 0.397861\n", - "75% 0.451782\n", - "max 0.835283\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.32390174521065745, pvalue=1.3650315049340146e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3325159043509967, pvalue=4.65056862032923e-20)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.47093023255813954\n" - ] - } - ], - "source": [ - "embedDict = normalize(absEmbeddings)\n", - "embedDictMaster['abstract_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['abstract_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['abstract_19k_old_'+str(weightCase)], confusionMatrixMaster['abstract_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "angry-ladder", - "metadata": {}, - "source": [ - "### Abstract 1st Sentence Text Embeddings | 19k+19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "missing-velvet", - "metadata": {}, - "outputs": [], - "source": [ - "import re\n", - "absEmbeddings = {}\n", - "for _, row in pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]).iterrows():\n", - " if not(pd.isna(row['BERT_abstract_firstSent_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in row['BERT_abstract_firstSent_emb'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node1_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node1_emb'][1:-1])))])\n", - " \n", - " if not(pd.isna(row['BERT_abstract_firstSent_emb_right'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in row['BERT_abstract_firstSent_emb_right'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node2_emb'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node2_emb'][1:-1])))])" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "increasing-ability", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "quarterly-collector", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "collaborative-yield", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "associate-seminar", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "falling-dublin", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "north-interpretation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategory
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454U
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784U
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022U
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260M
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112M
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id category \n", - "0 Q454 U \n", - "1 Q13648784 U \n", - "2 Q178022 U \n", - "3 Q21004260 M \n", - "4 Q49112 M " - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "willing-hanging", - "metadata": {}, - "outputs": [], - "source": [ - "missingWordSimSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in absEmbeddings)] + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in absEmbeddings)])" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "functional-mattress", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.11401677131652832 s\n", - "0.11957383155822754 s\n", - "0.09752821922302246 s\n", - "0.128997802734375 s\n", - "0.11990189552307129 s\n", - "0.11844491958618164 s\n", - "0.11752724647521973 s\n", - "0.11877274513244629 s\n", - "0.11719059944152832 s\n", - "0.11760425567626953 s\n", - "0.11708760261535645 s\n", - "0.09807181358337402 s\n", - "0.0916135311126709 s\n", - "0.09286952018737793 s\n", - "0.0907738208770752 s\n", - "0.0915842056274414 s\n", - "0.09347748756408691 s\n", - "0.08993768692016602 s\n", - "0.10148978233337402 s\n", - "0.11854410171508789 s\n", - "0.12027955055236816 s\n", - "0.13148927688598633 s\n", - "0.11908864974975586 s\n", - "0.13748478889465332 s\n", - "0.13097643852233887 s\n", - "0.11984562873840332 s\n", - "0.12159109115600586 s\n", - "0.12565040588378906 s\n", - "0.1192171573638916 s\n", - "0.14190435409545898 s\n", - "0.128098726272583 s\n", - "0.1173861026763916 s\n", - "0.11848211288452148 s\n", - "0.11741471290588379 s\n", - "0.11730766296386719 s\n", - "0.12353205680847168 s\n", - "0.11716032028198242 s\n", - "0.11889147758483887 s\n", - "0.11724376678466797 s\n", - "0.11714792251586914 s\n" - ] - } - ], - "source": [ - "for _, row in wordSim353AnnotDF_New.iterrows():\n", - " if row.word1_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word1_kg_id] = getSentEmbeddings(row['Word 1'], 'bert-base-nli-mean-tokens')\n", - " if row.word2_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word2_kg_id] = getSentEmbeddings(row['Word 2'], 'bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "macro-headline", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingWordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "provincial-matter", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19166\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19166.000000\n", - "mean 0.339064\n", - "std 0.072734\n", - "min 0.000000\n", - "25% 0.287403\n", - "50% 0.334725\n", - "75% 0.388172\n", - "max 0.660678\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3571490077264898, pvalue=4.7415066582386246e-21)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3713906787854944, pvalue=1.253257701630852e-24)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6017441860465116\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19166.000000\n", - "mean 0.244476\n", - "std 0.145834\n", - "min 0.000000\n", - "25% 0.104152\n", - "50% 0.234678\n", - "75% 0.376765\n", - "max 0.660678\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.37186923032141733, pvalue=1.0985961673989065e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.37051869405377086, pvalue=1.6123151472069758e-24)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6540697674418605\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19166.000000\n", - "mean 0.404541\n", - "std 0.081848\n", - "min 0.000000\n", - "25% 0.351736\n", - "50% 0.401690\n", - "75% 0.453416\n", - "max 0.872588\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31762341611315487, pvalue=5.624902334302071e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.33907069116618244, pvalue=8.52432972070843e-21)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.4941860465116279\n" - ] - } - ], - "source": [ - "embedDict = normalize(absEmbeddings)\n", - "embedDictMaster['abstract_firstSent_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['abstract_firstSent_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _, confusionMatrixMaster['abstract_firstSent_19k_old_'+str(weightCase)], confusionMatrixMaster['abstract_firstSent_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "commercial-uzbekistan", - "metadata": {}, - "source": [ - "### Combination of all old embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "selected-grain", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['text_7props_19k', 'text_2props_19k', 'complex_19k', 'transe_19k', 'complex_probase', 'transe_probase', 'complex_probase_19k', 'transe_probase_19k', 'abstract_19k', 'abstract_firstSent_19k'])" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "embedDictMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "remarkable-river", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['text_7props_19k_1', 'text_7props_19k_2', 'text_7props_19k_0.5', 'text_2props_19k_1', 'text_2props_19k_2', 'text_2props_19k_0.5', 'complex_19k_1', 'complex_19k_2', 'complex_19k_0.5', 'transe_19k_1', 'transe_19k_2', 'transe_19k_0.5', 'complex_probase_1', 'complex_probase_2', 'complex_probase_0.5', 'transe_probase_1', 'transe_probase_2', 'transe_probase_0.5', 'complex_probase_19k_1', 'complex_probase_19k_2', 'complex_probase_19k_0.5', 'transe_probase_19k_1', 'transe_probase_19k_2', 'transe_probase_19k_0.5', 'abstract_19k_1', 'abstract_19k_2', 'abstract_19k_0.5', 'abstract_firstSent_19k_1', 'abstract_firstSent_19k_2', 'abstract_firstSent_19k_0.5'])" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newEmbedDictMaster.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "after-wallace", - "metadata": {}, - "source": [ - "#### Compl + Transe + Abstract" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "manual-twist", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictConcat = {}\n", - "for key1 in ['complex_19k', 'transe_19k', \n", - " 'abstract_firstSent_19k']:\n", - " for word in embedDictMaster[key1].keys():\n", - " if word not in embedDictConcat:\n", - " embedDictConcat[word] = []\n", - " embedDictConcat[word].append(embedDictMaster[key1][word])\n", - "for word in embedDictConcat.keys():\n", - " embedDictConcat[word] = [item for sublist in embedDictConcat[word] for item in sublist]" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "according-identity", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Size of embedding: 968\n" - ] - } - ], - "source": [ - "print(f\"Size of embedding: {len(embedDictConcat['Q18037012'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "noble-fisher", - "metadata": {}, - "outputs": [], - "source": [ - "for word1 in list(embedDictConcat.keys()):\n", - " if len(embedDictConcat[word1]) != 968:\n", - " del embedDictConcat[word1]" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "liquid-spray", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19101.0\n", - "mean 968.0\n", - "std 0.0\n", - "min 968.0\n", - "25% 968.0\n", - "50% 968.0\n", - "75% 968.0\n", - "max 968.0\n", - "dtype: float64" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series([len(val1) for val1 in embedDictConcat.values()]).describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "designed-killing", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.336903\n", - "std 0.071873\n", - "min 0.000000\n", - "25% 0.284286\n", - "50% 0.332284\n", - "75% 0.389200\n", - "max 0.596558\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31344285039654224, pvalue=1.587990989990702e-16)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2983652058391759, pvalue=2.0692364624319403e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6676384839650146\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.245075\n", - "std 0.146398\n", - "min 0.000000\n", - "25% 0.099960\n", - "50% 0.239725\n", - "75% 0.380577\n", - "max 0.596558\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3270255968193857, pvalue=7.482780885295614e-18)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3144288703997577, pvalue=4.696112489737555e-18)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6880466472303207\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.400303\n", - "std 0.071506\n", - "min 0.000000\n", - "25% 0.357059\n", - "50% 0.402058\n", - "75% 0.445388\n", - "max 0.813749\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2967991230842074, pvalue=5.639053240442108e-15)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2739615906247492, pvalue=4.489403776140874e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_19k_v1'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_19k_v1_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "suburban-legislature", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.321205\n", - "std 0.063429\n", - "min 0.000000\n", - "25% 0.277493\n", - "50% 0.311720\n", - "75% 0.359268\n", - "max 0.596557\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2891828519936888, pvalue=2.717366700252014e-14)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27713398557337643, pvalue=2.2907553462981174e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6501457725947521\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.188928\n", - "std 0.144828\n", - "min 0.000000\n", - "25% 0.059667\n", - "50% 0.147733\n", - "75% 0.327197\n", - "max 0.596557\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.33562487778756755, pvalue=1.0136749729444057e-18)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.31665315908408964, pvalue=2.7384643013776528e-18)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.427234\n", - "std 0.094690\n", - "min 0.000000\n", - "25% 0.367149\n", - "50% 0.418971\n", - "75% 0.473102\n", - "max 0.895330\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.13050673469358315, pvalue=0.0005927381978235836)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1636905372538761, pvalue=6.524566396115546e-06)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.22157434402332363\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_probase_19k_v1'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_probase_19k__v1_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "interstate-tribute", - "metadata": {}, - "source": [ - "#### Text_7props + Text_2props + Complex + Transe + Abstract + Abstract_FirstSent" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "crucial-italian", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictConcat = {}\n", - "for key1 in ['text_7props_19k', 'text_2props_19k', 'complex_19k', 'transe_19k', \n", - " 'abstract_19k', 'abstract_firstSent_19k']:\n", - " for word in embedDictMaster[key1].keys():\n", - " if word not in embedDictConcat:\n", - " embedDictConcat[word] = []\n", - " embedDictConcat[word].append(embedDictMaster[key1][word])\n", - "for word in embedDictConcat.keys():\n", - " embedDictConcat[word] = [item for sublist in embedDictConcat[word] for item in sublist]" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "fatal-robert", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Size of embedding: 3784\n" - ] - } - ], - "source": [ - "print(f\"Size of embedding: {len(embedDictConcat['Q18037012'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "inside-offset", - "metadata": {}, - "outputs": [], - "source": [ - "for word1 in list(embedDictConcat.keys()):\n", - " if len(embedDictConcat[word1]) != 3784:\n", - " del embedDictConcat[word1]" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "colored-cattle", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19090.0\n", - "mean 3784.0\n", - "std 0.0\n", - "min 3784.0\n", - "25% 3784.0\n", - "50% 3784.0\n", - "75% 3784.0\n", - "max 3784.0\n", - "dtype: float64" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series([len(val1) for val1 in embedDictConcat.values()]).describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "promising-marijuana", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19090\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19090.000000\n", - "mean 0.318414\n", - "std 0.060577\n", - "min 0.000000\n", - "25% 0.273273\n", - "50% 0.313881\n", - "75% 0.362231\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.40347307747318084, pvalue=5.629213176377413e-25)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.40536224043013125, pvalue=1.6868252763103453e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6307692307692307\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19090.000000\n", - "mean 0.230697\n", - "std 0.135101\n", - "min 0.000000\n", - "25% 0.097307\n", - "50% 0.223935\n", - "75% 0.356438\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.40442451164800897, pvalue=4.371701842100601e-25)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.4101503518414275, pvalue=4.1055209935697305e-28)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19090.000000\n", - "mean 0.378997\n", - "std 0.061137\n", - "min 0.000000\n", - "25% 0.342927\n", - "50% 0.379359\n", - "75% 0.416067\n", - "max 0.760023\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3828276431671376, pvalue=1.2015280268194575e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.36987136293537864, pvalue=3.618695156207996e-23)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5415384615384615\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_19k_v2'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_19k_v2_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "piano-mortality", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19090\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19090.000000\n", - "mean 0.304466\n", - "std 0.054097\n", - "min 0.000000\n", - "25% 0.266260\n", - "50% 0.295631\n", - "75% 0.337646\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3563958420194592, pvalue=7.705212357023742e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.36941390801600477, pvalue=4.091096997249633e-23)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6092307692307692\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19090.000000\n", - "mean 0.178573\n", - "std 0.134771\n", - "min 0.000000\n", - "25% 0.057617\n", - "50% 0.140175\n", - "75% 0.314839\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.4167472980442226, pvalue=1.5499840293424274e-26)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.41238438242524034, pvalue=2.1128593107239733e-28)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6553846153846153\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19090.000000\n", - "mean 0.405175\n", - "std 0.085240\n", - "min 0.000000\n", - "25% 0.352177\n", - "50% 0.394099\n", - "75% 0.443428\n", - "max 0.797620\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.1299009113611685, pvalue=0.0008902251998159792)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1761010833372823, pvalue=2.3561612238907513e-06)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.16923076923076924\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_probase_19k_v2'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_probase_19k_v2_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "extensive-forty", - "metadata": {}, - "source": [ - "### Confusion Matrices" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "maritime-director", - "metadata": {}, - "outputs": [], - "source": [ - "confusionMatrixMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "qualified-empty", - "metadata": {}, - "outputs": [], - "source": [ - "embedDict = embedDictMaster['text_7props_19k']\n", - "newEmbedDict = newEmbedDictMaster['text_7props_19k_2']\n", - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - "assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - "assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - "wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - "wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - "wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - "# wordSimMissingSet\n", - "print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n", - "print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "\n", - "print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - "print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "id": "distinct-timothy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 210\n", - "U 101\n", - "I 20\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 154, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New2['category'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "antique-infrastructure", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.subplots(figsize=(20,20))\n", - "for num, key1 in enumerate(['text_7props_19k_old_2', 'text_7props_19k_new_2', 'text_2props_19k_old_2', 'text_2props_19k_new_2', \n", - " 'transe_19k_old_1', 'transe_19k_new_1', 'complex_19k_old_1', 'complex_19k_new_1']):\n", - " plt.subplot(4, 2, num+1)\n", - " sns.heatmap(pd.DataFrame(confusionMatrixMaster[key1], LABELS, LABELS), annot=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ahead-letters", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "micro-phrase", - "metadata": {}, - "source": [ - "# Save all embeddings and similarity scores" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "boring-campus", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDictMaster['concat_probase_19k_v1_2'] = newEmbedDictMaster['concat_probase_19k__v1_2']" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "automatic-update", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Length of wordsim dataset: 344\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d97162bbb58542999eb317ede34a3300", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.0067204430541292475, 0.008331487632641807, ...[-0.004515859562266559, -0.011723668837741234,...3.4683703.384407[0.006720440253943506, 0.00833148416118722, 0....[-0.0050116109222357935, -0.013383541509188317...[0.006720440253943506, 0.00833148416118722, 0....[-0.004971298302113362, -0.013254267455943004,...3.4683703.463734
1Arafatterror93D4NaN3U4...[0.0067204430541292475, 0.008331487632641807, ...[-0.004862257036458548, 0.014077170447753274, ...3.0355342.991152[0.006720440253943506, 0.00833148416118722, 0....[-0.005805280378137928, 0.015115419540555773, ...[0.006720440253943506, 0.00833148416118722, 0....[-0.004862255010517295, 0.01407716458226321, 0...3.0355342.991152
2FBIfingerprint1093D4NaN4NaN3...[0.006466897046995817, 0.014694837513784692, -...[0.01523113313292473, 0.005271417432183582, -0...2.9023562.850218[0.0064668943524542844, 0.014694831390933237, ...[0.013922101038066187, 0.0023911841962956006, ...[0.0064668943524542844, 0.014694831390933237, ...[0.01381456413075283, 0.0024352598782685863, -...2.9023562.895993
3FBIinvestigation1103U3U3U3...[0.006466897046995817, 0.014694837513784692, -...[0.013016090555331788, 0.01114268765690899, -0...2.9952062.962306[0.0064668943524542844, 0.014694831390933237, ...[0.013274960537868754, 0.010965634834463656, -...[0.0064668943524542844, 0.014694831390933237, ...[0.013242882478240212, 0.010953106140234146, -...2.9952062.993596
4HarvardYale1372S3S2S2...[0.01322626153814759, 0.005047111609608307, -0...[0.010410829355084429, 0.014776997941327313, -...1.6893151.689315[0.013226256027203037, 0.00504710950664428, -0...[0.010410825017237097, 0.01477699178424233, -0...[0.013226256027203037, 0.00504710950664428, -0...[0.010410825017237097, 0.01477699178424233, -0...1.6893151.689315
\n", - "

5 rows × 104 columns

\n", - "" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.0067204430541292475, 0.008331487632641807, ... \n", - "1 ... [0.0067204430541292475, 0.008331487632641807, ... \n", - "2 ... [0.006466897046995817, 0.014694837513784692, -... \n", - "3 ... [0.006466897046995817, 0.014694837513784692, -... \n", - "4 ... [0.01322626153814759, 0.005047111609608307, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859562266559, -0.011723668837741234,... 3.468370 \n", - "1 [-0.004862257036458548, 0.014077170447753274, ... 3.035534 \n", - "2 [0.01523113313292473, 0.005271417432183582, -0... 2.902356 \n", - "3 [0.013016090555331788, 0.01114268765690899, -0... 2.995206 \n", - "4 [0.010410829355084429, 0.014776997941327313, -... 1.689315 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.384407 \n", - "1 2.991152 \n", - "2 2.850218 \n", - "3 2.962306 \n", - "4 1.689315 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "1 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "2 [0.0064668943524542844, 0.014694831390933237, ... \n", - "3 [0.0064668943524542844, 0.014694831390933237, ... \n", - "4 [0.013226256027203037, 0.00504710950664428, -0... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.0050116109222357935, -0.013383541509188317... \n", - "1 [-0.005805280378137928, 0.015115419540555773, ... \n", - "2 [0.013922101038066187, 0.0023911841962956006, ... \n", - "3 [0.013274960537868754, 0.010965634834463656, -... \n", - "4 [0.010410825017237097, 0.01477699178424233, -0... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "1 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "2 [0.0064668943524542844, 0.014694831390933237, ... \n", - "3 [0.0064668943524542844, 0.014694831390933237, ... \n", - "4 [0.013226256027203037, 0.00504710950664428, -0... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.004971298302113362, -0.013254267455943004,... \n", - "1 [-0.004862255010517295, 0.01407716458226321, 0... \n", - "2 [0.01381456413075283, 0.0024352598782685863, -... \n", - "3 [0.013242882478240212, 0.010953106140234146, -... \n", - "4 [0.010410825017237097, 0.01477699178424233, -0... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.468370 3.463734 \n", - "1 3.035534 2.991152 \n", - "2 2.902356 2.895993 \n", - "3 2.995206 2.993596 \n", - "4 1.689315 1.689315 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 212, - "id": "connected-limit", - "metadata": {}, - "outputs": [], - "source": [ - "cons_ann_3 = pd.read_csv('../data/consolidated_annotation_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 213, - "id": "trying-authorization", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2H_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversed
0toolimplement1NaN3U1NaN2i1NaN1.60.8945.3134.688
1arrangementaccommodation1NaN4NaN2I1NaN1NaN1.81.3045.1254.875
2woodforest3H1NaN1NaN1NaN3l1.81.0957.9382.063
3benchmarkindex2I2I2I4NaN4NaN2.81.0955.5004.500
4practiceinstitution2I3L,I3I3i3i2.80.4473.5636.438
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 tool implement 1 NaN 3 U 1 NaN 2 \n", - "1 arrangement accommodation 1 NaN 4 NaN 2 I 1 \n", - "2 wood forest 3 H 1 NaN 1 NaN 1 \n", - "3 benchmark index 2 I 2 I 2 I 4 \n", - "4 practice institution 2 I 3 L,I 3 I 3 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed \n", - "0 i 1 NaN 1.6 0.894 5.313 4.688 \n", - "1 NaN 1 NaN 1.8 1.304 5.125 4.875 \n", - "2 NaN 3 l 1.8 1.095 7.938 2.063 \n", - "3 NaN 4 NaN 2.8 1.095 5.500 4.500 \n", - "4 i 3 i 2.8 0.447 3.563 6.438 " - ] - }, - "execution_count": 213, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cons_ann_3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "id": "political-laptop", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "15" - ] - }, - "execution_count": 222, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(cons_ann_3)" - ] - }, - { - "cell_type": "code", - "execution_count": 300, - "id": "improved-relaxation", - "metadata": {}, - "outputs": [], - "source": [ - "ca_cols = cons_ann_3.columns\n", - "for _,row in cons_ann_3.iterrows():\n", - "# if ((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])).sum() == 2:\n", - "# print(row['Word 1'], row['Word 2'])\n", - "# print(wordSim353AnnotDF_New_Merged_DF[((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2']))])\n", - "# print (((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])).sum())\n", - " for col in ca_cols:\n", - " if col in ['Word 1', 'Word 2']:\n", - " continue\n", - " \n", - " wordSim353AnnotDF_New_Merged_DF.at[wordSim353AnnotDF_New_Merged_DF.index[(wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])], col] = row[col]\n", - "# print(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])][col])\n", - "# " - ] - }, - { - "cell_type": "code", - "execution_count": 301, - "id": "relevant-dodge", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[~wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2']].duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outside-letters", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "pretty-scholar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv', index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "gorgeous-syndrome", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'ID',\n", - " 'H_Sim',\n", - " 'H_Dim',\n", - " 'F_Sim',\n", - " 'F_Dim',\n", - " 'N_Sim',\n", - " 'N_Dim',\n", - " 'D_Sim',\n", - " 'D_Dim',\n", - " 'P_Sim',\n", - " 'P_Dim',\n", - " 'Avg',\n", - " 'Stdev',\n", - " 'H_orig',\n", - " 'H_reversed',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].to_csv('../data/wordsim353_all_embeddings_with_retrofits_scores_only_new.csv', index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "alpha-department", - "metadata": {}, - "source": [ - "# Determine Differences" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ahead-syndication", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "suspended-beach", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "racial-behalf", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "another-mississippi", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "metallic-smith", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.580594\n", - "std 0.457960\n", - "min 0.000000\n", - "25% 0.222619\n", - "50% 0.495179\n", - "75% 0.852326\n", - "max 5.000000\n", - "Name: transe_19k_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['transe_19k_old_cosSim_Diff'],ascending=False)['transe_19k_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "designed-vacuum", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.645644\n", - "std 0.526932\n", - "min 0.000000\n", - "25% 0.250461\n", - "50% 0.562808\n", - "75% 0.927608\n", - "max 5.000000\n", - "Name: transe_19k_1_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['transe_19k_1_new_cosSim_Diff'],ascending=False)['transe_19k_1_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "facial-second", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.495179:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 0.562808:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "lightweight-average", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'transe_19k_old_cosSim', 'transe_19k_1_new_cosSim', 'transe_19k_old_cosSim_Diff', 'transe_19k_1_new_cosSim_Diff', 'transe_19k_old_cosSim_Diff_Cat', 'transe_19k_1_new_cosSim_Diff_Cat']]" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "american-egypt", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgtranse_19k_old_cosSimtranse_19k_1_new_cosSimtranse_19k_old_cosSim_Difftranse_19k_1_new_cosSim_Difftranse_19k_old_cosSim_Diff_Cattranse_19k_1_new_cosSim_Diff_Cat
0Arafatpeace3.603.0763033.4776650.5236970.12233510
1Arafatterror3.603.1036682.9521810.4963320.64781911
2FBIfingerprint3.602.9113343.1262090.6886660.47379110
3FBIinvestigation3.002.8817632.9437500.1182370.05625000
4HarvardYale2.202.1350422.0800220.0649580.11997800
..............................
339wartroops3.002.8075393.1619370.1924610.16193700
340weaponsecret3.803.3102612.7938320.4897391.00616801
341weatherforecast3.002.4496022.7392800.5503980.26072010
342woodforest1.802.9316103.5417541.1316101.74175411
343wordsimilarity3.752.6484272.7581561.1015730.99184411
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg transe_19k_old_cosSim \\\n", - "0 Arafat peace 3.60 3.076303 \n", - "1 Arafat terror 3.60 3.103668 \n", - "2 FBI fingerprint 3.60 2.911334 \n", - "3 FBI investigation 3.00 2.881763 \n", - "4 Harvard Yale 2.20 2.135042 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.807539 \n", - "340 weapon secret 3.80 3.310261 \n", - "341 weather forecast 3.00 2.449602 \n", - "342 wood forest 1.80 2.931610 \n", - "343 word similarity 3.75 2.648427 \n", - "\n", - " transe_19k_1_new_cosSim transe_19k_old_cosSim_Diff \\\n", - "0 3.477665 0.523697 \n", - "1 2.952181 0.496332 \n", - "2 3.126209 0.688666 \n", - "3 2.943750 0.118237 \n", - "4 2.080022 0.064958 \n", - ".. ... ... \n", - "339 3.161937 0.192461 \n", - "340 2.793832 0.489739 \n", - "341 2.739280 0.550398 \n", - "342 3.541754 1.131610 \n", - "343 2.758156 1.101573 \n", - "\n", - " transe_19k_1_new_cosSim_Diff transe_19k_old_cosSim_Diff_Cat \\\n", - "0 0.122335 1 \n", - "1 0.647819 1 \n", - "2 0.473791 1 \n", - "3 0.056250 0 \n", - "4 0.119978 0 \n", - ".. ... ... \n", - "339 0.161937 0 \n", - "340 1.006168 0 \n", - "341 0.260720 1 \n", - "342 1.741754 1 \n", - "343 0.991844 1 \n", - "\n", - " transe_19k_1_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 1 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 0 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "automotive-trouble", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "123" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "compressed-emergency", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['old_cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "alert-holmes", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['new_cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "psychological-walter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['cat'] = wordSim353AnnotDF_New_Merged_DF['Avg'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "arabic-binding", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['old_cat'] != wordSim353AnnotDF_New_Merged_DF['cat']].to_csv('../data/transEmb/badBefore.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "acoustic-holocaust", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['new_cat'] != wordSim353AnnotDF_New_Merged_DF['cat']].to_csv('../data/transEmb/badAfter.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "accompanied-spyware", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/transEmb/entireSet.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "reverse-cincinnati", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "consistent-difference", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "breathing-footage", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "chief-chance", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "shaped-letter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "adolescent-monte", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "swiss-bridal", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "current-mirror", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "placed-identity", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "stopped-daisy", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "deadly-forwarding", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "southeast-canal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.567297\n", - "std 0.435379\n", - "min 0.000000\n", - "25% 0.250130\n", - "50% 0.508725\n", - "75% 0.835197\n", - "max 5.000000\n", - "Name: concat_19k_v1_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_old_cosSim_Diff'],ascending=False)['concat_19k_v1_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "adequate-terminology", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 3.440000e+02\n", - "mean 5.938081e-01\n", - "std 4.503200e-01\n", - "min 4.440892e-16\n", - "25% 2.665817e-01\n", - "50% 5.349785e-01\n", - "75% 8.528840e-01\n", - "max 5.000000e+00\n", - "Name: concat_19k_v1_2_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_2_new_cosSim_Diff'],ascending=False)['concat_19k_v1_2_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "wired-shoot", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.508725:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 5.349785e-01:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "operating-senegal", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'concat_19k_v1_old_cosSim', 'concat_19k_v1_2_new_cosSim', 'concat_19k_v1_old_cosSim_Diff', 'concat_19k_v1_2_new_cosSim_Diff', 'concat_19k_v1_old_cosSim_Diff_Cat', 'concat_19k_v1_2_new_cosSim_Diff_Cat']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quantitative-money", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_19k_v1_old_cosSim_Diffconcat_19k_v1_2_new_cosSim_Diffconcat_19k_v1_old_cosSim_Diff_Catconcat_19k_v1_2_new_cosSim_Diff_Cat
0Arafatpeace3.603.2511983.1932710.3488020.40672900
1Arafatterror3.603.2314093.1572290.3685910.44277100
2FBIfingerprint3.602.9484872.8530480.6515130.74695211
3FBIinvestigation3.002.9303652.8956040.0696350.10439600
4HarvardYale2.201.9910541.9910540.2089460.20894600
..............................
339wartroops3.002.9139312.7872130.0860690.21278700
340weaponsecret3.803.1525133.1190650.6474870.68093511
341weatherforecast3.002.4927652.4623890.5072350.53761101
342woodforest1.802.6126812.6069410.8126810.80694111
343wordsimilarity3.752.6782762.6528291.0717241.09717111
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg concat_19k_v1_old_cosSim \\\n", - "0 Arafat peace 3.60 3.251198 \n", - "1 Arafat terror 3.60 3.231409 \n", - "2 FBI fingerprint 3.60 2.948487 \n", - "3 FBI investigation 3.00 2.930365 \n", - "4 Harvard Yale 2.20 1.991054 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.913931 \n", - "340 weapon secret 3.80 3.152513 \n", - "341 weather forecast 3.00 2.492765 \n", - "342 wood forest 1.80 2.612681 \n", - "343 word similarity 3.75 2.678276 \n", - "\n", - " concat_19k_v1_2_new_cosSim concat_19k_v1_old_cosSim_Diff \\\n", - "0 3.193271 0.348802 \n", - "1 3.157229 0.368591 \n", - "2 2.853048 0.651513 \n", - "3 2.895604 0.069635 \n", - "4 1.991054 0.208946 \n", - ".. ... ... \n", - "339 2.787213 0.086069 \n", - "340 3.119065 0.647487 \n", - "341 2.462389 0.507235 \n", - "342 2.606941 0.812681 \n", - "343 2.652829 1.071724 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff concat_19k_v1_old_cosSim_Diff_Cat \\\n", - "0 0.406729 0 \n", - "1 0.442771 0 \n", - "2 0.746952 1 \n", - "3 0.104396 0 \n", - "4 0.208946 0 \n", - ".. ... ... \n", - "339 0.212787 0 \n", - "340 0.680935 1 \n", - "341 0.537611 0 \n", - "342 0.806941 1 \n", - "343 1.097171 1 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 0 \n", - "2 1 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 1 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "attractive-annex", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "164" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "proof-registrar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "elder-harmony", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "magnetic-marina", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "satisfied-increase", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "surprising-milan", - "metadata": {}, - "source": [ - "# SVM Models" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "unknown-techno", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting datacompy\n", - " Downloading datacompy-0.7.2-py3-none-any.whl (27 kB)\n", - "Requirement already satisfied: numpy>=1.11.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.20.1)\n", - "Requirement already satisfied: pandas>=0.25.0 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.2.2)\n", - "Requirement already satisfied: pytz>=2017.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2021.1)\n", - "Requirement already satisfied: python-dateutil>=2.7.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2.8.1)\n", - "Requirement already satisfied: six>=1.5 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas>=0.25.0->datacompy) (1.15.0)\n", - "Installing collected packages: datacompy\n", - "Successfully installed datacompy-0.7.2\n" - ] - } - ], - "source": [ - "!pip install datacompy" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "overhead-board", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "false-status", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "varying-bones", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004515859576248157, -0.01172366887295375, ...3.2445393.175157[0.006720440291834372, 0.008331484208161396, 0...[-0.005011610937734838, -0.013383541550578623,...[0.006720440291834372, 0.008331484208161396, 0...[-0.00497129831746384, -0.01325426749683971, -...3.2445393.240270
1Arafatterror93D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004862257088069111, 0.014077170590128979, ...3.0850833.013958[0.006720440291834372, 0.008331484208161396, 0...[-0.005805280438126139, 0.015115419696749257, ...[0.006720440291834372, 0.008331484208161396, 0...[-0.004862255062129871, 0.014077164724644747, ...3.0850833.013958
2FBIfingerprint1093D4NaN4NaN3...[0.006466897059812569, 0.014694837542908411, -...[0.01523113309590259, 0.005271417380511587, -0...2.8230932.745230[0.006466894365273728, 0.014694831420063071, -...[0.013922101136130544, 0.0023911842131386003, ...[0.006466894365273728, 0.014694831420063071, -...[0.013814564227839972, 0.0024352598952305004, ...2.8230932.816176
3FBIinvestigation1103U3U3U3...[0.006466897059812569, 0.014694837542908411, -...[0.013016090623183913, 0.01114268771757639, -0...2.9209862.886161[0.006466894365273728, 0.014694831420063071, -...[0.01327496060589727, 0.010965634890657862, -0...[0.006466894365273728, 0.014694831420063071, -...[0.013242882546106787, 0.010953106196386554, -...2.9209862.919120
4HarvardYale1372S3S2S2...[0.01322626159341165, 0.005047111630696947, -0...[0.010410829393995813, 0.014776997996557633, -...1.7076551.707655[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...1.7076551.707655
\n", - "

5 rows × 104 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "1 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "2 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "3 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "4 ... [0.01322626159341165, 0.005047111630696947, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859576248157, -0.01172366887295375, ... 3.244539 \n", - "1 [-0.004862257088069111, 0.014077170590128979, ... 3.085083 \n", - "2 [0.01523113309590259, 0.005271417380511587, -0... 2.823093 \n", - "3 [0.013016090623183913, 0.01114268771757639, -0... 2.920986 \n", - "4 [0.010410829393995813, 0.014776997996557633, -... 1.707655 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.175157 \n", - "1 3.013958 \n", - "2 2.745230 \n", - "3 2.886161 \n", - "4 1.707655 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.005011610937734838, -0.013383541550578623,... \n", - "1 [-0.005805280438126139, 0.015115419696749257, ... \n", - "2 [0.013922101136130544, 0.0023911842131386003, ... \n", - "3 [0.01327496060589727, 0.010965634890657862, -0... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.00497129831746384, -0.01325426749683971, -... \n", - "1 [-0.004862255062129871, 0.014077164724644747, ... \n", - "2 [0.013814564227839972, 0.0024352598952305004, ... \n", - "3 [0.013242882546106787, 0.010953106196386554, -... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.244539 3.240270 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.816176 \n", - "3 2.920986 2.919120 \n", - "4 1.707655 1.707655 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "id": "employed-clearing", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
text_7props_19k_old_cosSimtext_7props_19k_2_new_cosSimtext_2props_19k_old_cosSimtext_2props_19k_2_new_cosSimcomplex_19k_old_cosSimcomplex_19k_2_new_cosSimtranse_19k_old_cosSimtranse_19k_1_new_cosSimabstract_19k_old_cosSimabstract_19k_2_new_cosSim...transe_probase_19k_old_cosSimtranse_probase_19k_1_new_cosSimconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_probase_19k_v1_old_cosSimconcat_probase_19k_v1_2_new_cosSimconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
count344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000...344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000
mean2.5110332.4648762.4822542.4351612.9833022.6848182.9833022.6800022.6528662.593916...2.9833022.5658862.8753812.8264932.8753812.8651012.8680662.8166852.8680662.856603
std1.1488211.1529111.1510601.1554270.6459110.5390920.6459110.6192390.6805250.653512...0.6459110.5967500.5739020.5755850.5739020.5744101.0971211.1063621.0971211.099179
min1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000...1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
25%2.0050971.9632291.9934241.9498692.5885912.4554312.5885912.3118182.1809122.137568...2.5885912.1836862.5779382.5510332.5779382.5838112.3843372.3506452.3843372.377672
50%2.3282762.2736742.2746682.2321563.0390872.7085693.0390872.7222782.6168102.591640...3.0390872.6080412.9505782.9120982.9505782.9339842.7164712.6570782.7164712.704941
75%2.6369072.5761552.5804822.5275543.3592432.9592593.3592433.0905633.2089193.060782...3.3592432.9352263.2087353.1644263.2087353.1962702.9922652.8996262.9922652.977770
max7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000004.3400894.327902...7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.000000
\n", - "

8 rows × 28 columns

\n", - "
" - ], - "text/plain": [ - " text_7props_19k_old_cosSim text_7props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.511033 2.464876 \n", - "std 1.148821 1.152911 \n", - "min 1.000000 1.000000 \n", - "25% 2.005097 1.963229 \n", - "50% 2.328276 2.273674 \n", - "75% 2.636907 2.576155 \n", - "max 7.000000 7.000000 \n", - "\n", - " text_2props_19k_old_cosSim text_2props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.482254 2.435161 \n", - "std 1.151060 1.155427 \n", - "min 1.000000 1.000000 \n", - "25% 1.993424 1.949869 \n", - "50% 2.274668 2.232156 \n", - "75% 2.580482 2.527554 \n", - "max 7.000000 7.000000 \n", - "\n", - " complex_19k_old_cosSim complex_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.684818 \n", - "std 0.645911 0.539092 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.455431 \n", - "50% 3.039087 2.708569 \n", - "75% 3.359243 2.959259 \n", - "max 7.000000 7.000000 \n", - "\n", - " transe_19k_old_cosSim transe_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.680002 \n", - "std 0.645911 0.619239 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.311818 \n", - "50% 3.039087 2.722278 \n", - "75% 3.359243 3.090563 \n", - "max 7.000000 7.000000 \n", - "\n", - " abstract_19k_old_cosSim abstract_19k_2_new_cosSim ... \\\n", - "count 344.000000 344.000000 ... \n", - "mean 2.652866 2.593916 ... \n", - "std 0.680525 0.653512 ... \n", - "min 1.000000 1.000000 ... \n", - "25% 2.180912 2.137568 ... \n", - "50% 2.616810 2.591640 ... \n", - "75% 3.208919 3.060782 ... \n", - "max 4.340089 4.327902 ... \n", - "\n", - " transe_probase_19k_old_cosSim transe_probase_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.565886 \n", - "std 0.645911 0.596750 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.183686 \n", - "50% 3.039087 2.608041 \n", - "75% 3.359243 2.935226 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v1_old_cosSim concat_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.826493 \n", - "std 0.573902 0.575585 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.551033 \n", - "50% 2.950578 2.912098 \n", - "75% 3.208735 3.164426 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v1_old_cosSim concat_probase_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.865101 \n", - "std 0.573902 0.574410 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.583811 \n", - "50% 2.950578 2.933984 \n", - "75% 3.208735 3.196270 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v2_old_cosSim concat_19k_v2_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.816685 \n", - "std 1.097121 1.106362 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.350645 \n", - "50% 2.716471 2.657078 \n", - "75% 2.992265 2.899626 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.856603 \n", - "std 1.097121 1.099179 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.377672 \n", - "50% 2.716471 2.704941 \n", - "75% 2.992265 2.977770 \n", - "max 7.000000 7.000000 \n", - "\n", - "[8 rows x 28 columns]" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "id": "creative-interview", - "metadata": {}, - "outputs": [], - "source": [ - "import datacompy\n", - "compare = datacompy.Compare(\n", - " wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))],\n", - " wordSim353AnnotDF_New_Merged_DF_old[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF_old.columns.to_list()))],\n", - " join_columns = ['Word 1', 'Word 2'])" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "id": "noticed-andrew", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DataComPy Comparison\n", - "--------------------\n", - "\n", - "DataFrame Summary\n", - "-----------------\n", - "\n", - " DataFrame Columns Rows\n", - "0 df1 34 344\n", - "1 df2 34 344\n", - "\n", - "Column Summary\n", - "--------------\n", - "\n", - "Number of columns in common: 32\n", - "Number of columns in df1 but not in df2: 2\n", - "Number of columns in df2 but not in df1: 2\n", - "\n", - "Row Summary\n", - "-----------\n", - "\n", - "Matched on: word 1, word 2\n", - "Any duplicates on match values: No\n", - "Absolute Tolerance: 0\n", - "Relative Tolerance: 0\n", - "Number of rows in common: 344\n", - "Number of rows in df1 but not in df2: 0\n", - "Number of rows in df2 but not in df1: 0\n", - "\n", - "Number of rows with some compared columns unequal: 343\n", - "Number of rows with all compared columns equal: 1\n", - "\n", - "Column Comparison\n", - "-----------------\n", - "\n", - "Number of columns compared with some values unequal: 27\n", - "Number of columns compared with all values equal: 5\n", - "Total number of values which compare unequal: 5,136\n", - "\n", - "Columns with Unequal Values or Types\n", - "------------------------------------\n", - "\n", - " Column df1 dtype df2 dtype # Unequal Max Diff # Null Diff\n", - "25 abstract_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "17 abstract_19k_old_cossim float64 float64 9 4.440892e-16 0\n", - "8 abstract_firstsent_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "19 abstract_firstsent_19k_old_cossim float64 float64 8 4.440892e-16 0\n", - "6 category object object 4 0.000000e+00 0\n", - "12 complex_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "21 complex_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "11 complex_probase_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "18 complex_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "1 concat_19k_v1_2_new_cossim float64 float64 343 9.656675e-01 0\n", - "22 concat_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "2 concat_19k_v2_2_new_cossim float64 float64 325 4.810998e-01 0\n", - "3 concat_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "10 concat_probase_19k_v1_2_new_cossim float64 float64 341 9.673423e-01 0\n", - "7 concat_probase_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "26 concat_probase_19k_v2_2_new_cossim float64 float64 324 4.828636e-01 0\n", - "9 concat_probase_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "15 text_2props_19k_2_new_cossim float64 float64 7 4.440892e-16 0\n", - "0 text_2props_19k_old_cossim float64 float64 5 4.440892e-16 0\n", - "14 text_7props_19k_2_new_cossim float64 float64 11 4.440892e-16 0\n", - "24 text_7props_19k_old_cossim float64 float64 7 4.440892e-16 0\n", - "5 transe_19k_1_new_cossim float64 float64 5 4.440892e-16 0\n", - "4 transe_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "16 transe_probase_19k_1_new_cossim float64 float64 340 1.192889e-08 0\n", - "20 transe_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "23 transe_probase_1_new_cossim float64 float64 9 4.440892e-16 0\n", - "13 transe_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "\n", - "Sample Rows with Unequal Values\n", - "-------------------------------\n", - "\n", - " word 1 word 2 text_2props_19k_old_cossim (df1) text_2props_19k_old_cossim (df2)\n", - "33 bishop rabbi 2.333195 2.333195\n", - "69 credit card 1.834364 1.834364\n", - "107 drink ear 2.515900 2.515900\n", - "271 registration arrangement 1.826611 1.826611\n", - "169 line insurance 2.670612 2.670612\n", - "\n", - " word 1 word 2 concat_19k_v1_2_new_cossim (df1) concat_19k_v1_2_new_cossim (df2)\n", - "107 drink ear 3.116502 2.813165\n", - "112 energy crisis 3.024137 3.099512\n", - "14 admission ticket 2.647422 2.819317\n", - "63 computer software 2.167120 2.273544\n", - "241 precedent example 2.091422 2.138805\n", - "44 car flight 3.064250 2.948899\n", - "229 planet constellation 2.240850 2.286295\n", - "159 king queen 2.169999 2.241265\n", - "161 lad brother 2.755663 2.733430\n", - "297 stock egg 2.943623 2.952019\n", - "\n", - " word 1 word 2 concat_19k_v2_2_new_cossim (df1) concat_19k_v2_2_new_cossim (df2)\n", - "61 computer laboratory 2.670662 2.635687\n", - "239 precedent cognition 2.643438 2.676361\n", - "286 situation isolation 2.313211 2.399693\n", - "225 physics chemistry 1.755500 1.873616\n", - "262 psychology doctor 2.861167 2.665892\n", - "271 registration arrangement 1.935898 2.144032\n", - "111 drug abuse 2.653034 2.716209\n", - "150 impartiality interest 2.395906 2.496811\n", - "130 forest graveyard 2.963496 2.743907\n", - "80 cup substance 2.738585 2.703536\n", - "\n", - " word 1 word 2 concat_19k_v2_old_cossim (df1) concat_19k_v2_old_cossim (df2)\n", - "247 president medal 2.809529 3.039440\n", - "70 credit information 2.557827 2.567752\n", - "58 competition price 2.699197 2.854295\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "47 century nation 3.025727 3.021246\n", - "280 seven series 2.801360 2.821742\n", - "193 money dollar 2.376377 2.437513\n", - "5 Japanese American 2.564544 2.535274\n", - "340 weapon secret 2.889109 2.897323\n", - "189 money bank 2.261778 2.170577\n", - "\n", - " word 1 word 2 transe_19k_old_cossim (df1) transe_19k_old_cossim (df2)\n", - "36 book paper 3.078243 2.635533\n", - "5 Japanese American 2.496058 2.408249\n", - "26 baby mother 2.292784 2.155920\n", - "248 problem airport 3.826307 3.170909\n", - "55 coast hill 3.722873 2.798622\n", - "112 energy crisis 3.106233 3.230795\n", - "340 weapon secret 3.285620 3.310261\n", - "219 opera industry 3.296724 3.553488\n", - "169 line insurance 3.089979 2.829222\n", - "332 type kind 1.000000 1.000000\n", - "\n", - " word 1 word 2 transe_19k_1_new_cossim (df1) transe_19k_1_new_cossim (df2)\n", - "192 money deposit 2.837495 2.837495\n", - "232 planet people 3.716617 3.716617\n", - "114 energy secretary 2.865451 2.865451\n", - "304 street block 2.904156 2.904156\n", - "271 registration arrangement 1.933719 1.933719\n", - "\n", - " word 1 word 2 category (df1) category (df2)\n", - "296 stock CD U M\n", - "45 cell phone I M\n", - "328 tool implement I M\n", - "237 practice institution M U\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_old_cossim (df1) concat_probase_19k_v1_old_cossim (df2)\n", - "312 television film 3.266487 2.813985\n", - "191 money currency 2.401111 2.298975\n", - "243 precedent information 3.131530 3.019516\n", - "53 closet clothes 2.947983 2.705879\n", - "142 government crisis 3.181431 2.683486\n", - "183 media trading 3.103774 2.822458\n", - "89 delay racism 3.037041 2.943246\n", - "32 bird crane 2.323600 2.007661\n", - "126 food rooster 3.641608 3.323421\n", - "43 car automobile 1.000000 1.000000\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_2_new_cossim (df1) abstract_firstsent_19k_2_new_cossim (df2)\n", - "67 country citizen 2.307399 2.307399\n", - "218 oil stock 2.875288 2.875288\n", - "337 vodka gin 1.848263 1.848263\n", - "152 investor earning 1.998387 1.998387\n", - "90 deployment departure 1.826386 1.826386\n", - "208 movie theater 2.390347 2.390347\n", - "263 psychology fear 2.679016 2.679016\n", - "96 discovery space 2.952799 2.952799\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_old_cossim (df1) concat_probase_19k_v2_old_cossim (df2)\n", - "21 architecture century 3.188363 3.081890\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "60 computer keyboard 2.131908 2.212525\n", - "120 fertility egg 2.202871 2.244311\n", - "311 telephone communication 2.677514 2.463340\n", - "238 precedent antecedent 1.935676 2.019795\n", - "33 bishop rabbi 2.277504 2.458967\n", - "203 morality importance 2.272562 2.446757\n", - "228 planet astronomer 2.470710 2.152302\n", - "144 governor office 2.720705 2.742336\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_2_new_cossim (df1) concat_probase_19k_v1_2_new_cossim (df2)\n", - "166 life death 2.384376 2.467146\n", - "249 problem challenge 2.573163 2.851951\n", - "216 noon string 2.831571 3.404519\n", - "214 network hardware 2.797734 2.468385\n", - "324 tiger mammal 2.608830 2.218881\n", - "269 reason hypertension 3.043544 2.554564\n", - "35 book library 3.335751 2.560611\n", - "169 line insurance 3.121240 2.947265\n", - "319 tiger carnivore 3.332882 3.004569\n", - "161 lad brother 2.885448 2.868957\n", - "\n", - " word 1 word 2 complex_probase_2_new_cossim (df1) complex_probase_2_new_cossim (df2)\n", - "39 bread butter 1.926594 1.926594\n", - "102 dollar buck 2.733086 2.733086\n", - "193 money dollar 2.733086 2.733086\n", - "150 impartiality interest 2.323327 2.323327\n", - "1 Arafat terror 3.103668 3.103668\n", - "266 psychology psychiatry 1.826092 1.826092\n", - "10 Mexico Brazil 1.921104 1.921104\n", - "5 Japanese American 2.408249 2.408249\n", - "\n", - " word 1 word 2 complex_19k_old_cossim (df1) complex_19k_old_cossim (df2)\n", - "115 environment ecology 2.920428 2.903515\n", - "256 psychology Freud 3.234018 2.992413\n", - "169 line insurance 3.089979 2.829222\n", - "33 bishop rabbi 2.300842 2.845229\n", - "220 opera performance 3.163513 3.062105\n", - "267 psychology science 2.231959 2.334221\n", - "265 psychology mind 2.886509 2.426014\n", - "45 cell phone 3.622510 2.693966\n", - "26 baby mother 2.292784 2.155920\n", - "161 lad brother 3.110214 3.092837\n", - "\n", - " word 1 word 2 transe_probase_old_cossim (df1) transe_probase_old_cossim (df2)\n", - "209 murder manslaughter 2.249251 2.257188\n", - "141 glass metal 3.225510 2.093335\n", - "296 stock CD 3.395233 3.514011\n", - "325 tiger organism 3.290722 2.591059\n", - "35 book library 3.701910 2.539030\n", - "2 FBI fingerprint 3.149125 2.911334\n", - "254 profit loss 1.653272 1.573516\n", - "334 video archive 3.219152 2.407191\n", - "166 life death 2.565452 2.692000\n", - "9 Mars scientist 3.504530 3.187455\n", - "\n", - " word 1 word 2 text_7props_19k_2_new_cossim (df1) text_7props_19k_2_new_cossim (df2)\n", - "176 luxury car 2.942098 2.942098\n", - "293 space world 2.109041 2.109041\n", - "309 summer drought 2.687325 2.687325\n", - "67 country citizen 1.942392 1.942392\n", - "169 line insurance 2.691916 2.691916\n", - "302 stock phone 2.963663 2.963663\n", - "5 Japanese American 2.145108 2.145108\n", - "238 precedent antecedent 1.844509 1.844509\n", - "143 governor interview 2.651640 2.651640\n", - "152 investor earning 1.902240 1.902240\n", - "\n", - " word 1 word 2 text_2props_19k_2_new_cossim (df1) text_2props_19k_2_new_cossim (df2)\n", - "329 train car 1.998965 1.998965\n", - "10 Mexico Brazil 1.950233 1.950233\n", - "19 announcement production 1.866451 1.866451\n", - "121 fighting defeating 1.940122 1.940122\n", - "293 space world 1.993016 1.993016\n", - "8 Maradona football 2.351065 2.351065\n", - "114 energy secretary 2.803514 2.803514\n", - "\n", - " word 1 word 2 transe_probase_19k_1_new_cossim (df1) transe_probase_19k_1_new_cossim (df2)\n", - "155 journal association 2.736767 2.736767\n", - "123 focus life 2.337493 2.337493\n", - "159 king queen 1.570639 1.570639\n", - "169 line insurance 2.557647 2.557647\n", - "305 street children 3.186623 3.186623\n", - "336 vodka brandy 1.527815 1.527815\n", - "232 planet people 3.593423 3.593423\n", - "130 forest graveyard 3.142560 3.142560\n", - "69 credit card 2.076337 2.076337\n", - "40 brother monk 2.683273 2.683273\n", - "\n", - " word 1 word 2 abstract_19k_old_cossim (df1) abstract_19k_old_cossim (df2)\n", - "285 situation conclusion 1.808156 1.808156\n", - "303 street avenue 2.281843 2.281843\n", - "94 disability death 2.746255 2.746255\n", - "5 Japanese American 3.292768 3.292768\n", - "183 media trading 3.108796 3.108796\n", - "11 OPEC country 3.042327 3.042327\n", - "162 lad wizard 3.334772 3.334772\n", - "129 football tennis 2.518421 2.518421\n", - "231 planet moon 1.920149 1.920149\n", - "\n", - " word 1 word 2 complex_probase_old_cossim (df1) complex_probase_old_cossim (df2)\n", - "63 computer software 2.565704 2.726328\n", - "21 architecture century 3.418617 3.099197\n", - "179 man woman 2.351588 1.471079\n", - "149 image surface 3.137178 3.256807\n", - "81 cup tableware 2.124012 1.954043\n", - "36 book paper 3.078243 2.635533\n", - "194 money laundering 2.759570 2.800958\n", - "236 possibility girl 3.361988 2.920025\n", - "209 murder manslaughter 2.249251 2.257188\n", - "218 oil stock 2.577913 2.625197\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_old_cossim (df1) abstract_firstsent_19k_old_cossim (df2)\n", - "246 preservation world 3.234863 3.234863\n", - "5 Japanese American 2.728319 2.728319\n", - "285 situation conclusion 1.808156 1.808156\n", - "244 precedent law 1.878214 1.878214\n", - "94 disability death 3.016865 3.016865\n", - "175 lover quarrel 3.157233 3.157233\n", - "109 drink mother 3.128050 3.128050\n", - "177 magician wizard 1.909871 1.909871\n", - "\n", - " word 1 word 2 transe_probase_19k_old_cossim (df1) transe_probase_19k_old_cossim (df2)\n", - "79 cup object 2.627446 2.362561\n", - "234 planet star 2.586230 2.320493\n", - "176 luxury car 3.150901 2.977136\n", - "156 journey car 2.971068 2.457446\n", - "324 tiger mammal 2.909669 2.322927\n", - "120 fertility egg 2.547399 2.671721\n", - "248 problem airport 3.826307 3.170909\n", - "16 aluminum metal 2.712132 1.916614\n", - "36 book paper 3.078243 2.635533\n", - "211 music project 3.141641 3.304875\n", - "\n", - " word 1 word 2 complex_probase_19k_old_cossim (df1) complex_probase_19k_old_cossim (df2)\n", - "277 seafood lobster 2.240601 2.113436\n", - "27 bank money 3.066413 2.792811\n", - "337 vodka gin 1.857971 2.369972\n", - "211 music project 3.141641 3.304875\n", - "271 registration arrangement 2.319711 2.954145\n", - "143 governor interview 4.023383 3.076389\n", - "149 image surface 3.137178 3.256807\n", - "94 disability death 2.565398 2.939547\n", - "166 life death 2.565452 2.692000\n", - "226 physics proton 3.802075 2.800635\n", - "\n", - " word 1 word 2 concat_19k_v1_old_cossim (df1) concat_19k_v1_old_cossim (df2)\n", - "270 record number 2.977163 2.589607\n", - "282 shower flood 3.398140 2.908007\n", - "97 dividend calculation 2.507181 2.708939\n", - "239 precedent cognition 2.724066 2.793355\n", - "125 food preparation 2.932974 2.836360\n", - "342 wood forest 3.144257 2.612681\n", - "304 street block 2.690410 2.201689\n", - "250 production crew 2.552550 2.783363\n", - "6 Jerusalem Israel 2.978292 2.383538\n", - "210 museum theater 3.208882 2.943593\n", - "\n", - " word 1 word 2 transe_probase_1_new_cossim (df1) transe_probase_1_new_cossim (df2)\n", - "108 drink eat 2.334188 2.334188\n", - "25 attempt peace 2.624155 2.624155\n", - "232 planet people 3.392578 3.392578\n", - "204 morality marriage 2.173908 2.173908\n", - "267 psychology science 1.840069 1.840069\n", - "20 announcement warning 1.930855 1.930855\n", - "37 boxing round 3.527058 3.527058\n", - "77 cup food 2.657233 2.657233\n", - "73 cup artifact 2.065621 2.065621\n", - "\n", - " word 1 word 2 text_7props_19k_old_cossim (df1) text_7props_19k_old_cossim (df2)\n", - "311 telephone communication 2.269291 2.269291\n", - "205 movie critic 2.872865 2.872865\n", - "69 credit card 1.834364 1.834364\n", - "334 video archive 1.948662 1.948662\n", - "51 change attitude 1.894075 1.894075\n", - "260 psychology depression 1.948810 1.948810\n", - "63 computer software 1.918968 1.918968\n", - "\n", - " word 1 word 2 abstract_19k_2_new_cossim (df1) abstract_19k_2_new_cossim (df2)\n", - "90 deployment departure 1.826386 1.826386\n", - "14 admission ticket 2.890691 2.890691\n", - "84 day summer 1.820569 1.820569\n", - "217 observation architecture 2.541219 2.541219\n", - "243 precedent information 2.768309 2.768309\n", - "253 professor doctor 2.462181 2.462181\n", - "60 computer keyboard 1.977226 1.977226\n", - "95 disaster area 3.350219 3.350219\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_2_new_cossim (df1) concat_probase_19k_v2_2_new_cossim (df2)\n", - "208 movie theater 2.614114 2.456455\n", - "177 magician wizard 2.146197 2.011585\n", - "86 death row 2.990100 2.809539\n", - "293 space world 2.481352 2.412213\n", - "123 focus life 2.908816 2.990622\n", - "316 territory surface 2.778507 2.489232\n", - "289 smart student 2.754242 2.578396\n", - "333 victim emergency 2.380390 2.445431\n", - "55 coast hill 2.826077 2.516979\n", - "78 cup liquid 2.365327 2.264276\n", - "\n", - "\n" - ] - } - ], - "source": [ - "print(compare.report())" - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "id": "common-vietnam", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idword 1word 2idh_simh_dimf_simf_dimn_sim...concat_19k_v2_word2_newconcat_19k_v2_old_cossimconcat_19k_v2_2_new_cossimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cossimconcat_probase_19k_v2_2_new_cossimavg_old
0Q106106Q11460closetclothes423H3H3...[0.0014151543049584102, 0.003161483781535701, ...2.6970222.652559[0.013902607489678993, 0.013241494756981564, -...[0.0014224480432097992, 0.0031547764732941653,...[0.01371531560905985, 0.013126875633706597, -0...[0.0014206775968733409, 0.0031581452887393872,...2.6970222.6833183.0
1Q107Q16502spaceworld2933L3S3...[-0.0031782974877087693, 0.003973805776938075,...2.4858592.347308[0.00027019944749503126, 0.005353652289998999,...[-0.0032792710227188605, 0.0036472880832864947...[0.00027492382990721006, 0.0053545622809597, -...[-0.0032450374860671267, 0.0036673577053825254...2.4858592.4813523.2
2Q107Q2329spacechemistry2924NaN4NaN4...[0.015268952851071075, -0.0024137893437008715,...2.7987882.782963[0.00027019944749503126, 0.005353652289998999,...[0.015322423107720673, -0.0024500099720118624,...[0.00027492382990721006, 0.0053545622809597, -...[0.015281665873653082, -0.002421165402091456, ...2.7987882.7950474.0
3Q1074Q7364skineye2883H3H3...[0.002992664951436964, 0.013922942027531155, -...2.3558132.314417[-0.0026976204618851985, 0.001541600665881322,...[0.0033640181667058486, 0.014044398230441645, ...[-0.002678224125439186, 0.0015598357892553907,...[0.0033484286344994184, 0.014002864550517797, ...2.3558132.3506033.0
4Q1079023Q500834championshiptournament381NaN1NaN2...[0.00920825730356781, 0.011965374832474578, 0....1.8686991.865663[-0.0008601077391385219, 0.005201185839222482,...[0.00923153244996602, 0.011960544533439752, 0....[-0.0008458279784483333, 0.005209858282773185,...[0.009207264410626997, 0.011951895965764294, 0...1.8686991.8667851.2
\n", - "

5 rows × 105 columns

\n", - "
" - ], - "text/plain": [ - " word1_kg_id word2_kg_id word 1 word 2 id h_sim h_dim f_sim \\\n", - "0 Q106106 Q11460 closet clothes 42 3 H 3 \n", - "1 Q107 Q16502 space world 293 3 L 3 \n", - "2 Q107 Q2329 space chemistry 292 4 NaN 4 \n", - "3 Q1074 Q7364 skin eye 288 3 H 3 \n", - "4 Q1079023 Q500834 championship tournament 38 1 NaN 1 \n", - "\n", - " f_dim n_sim ... concat_19k_v2_word2_new \\\n", - "0 H 3 ... [0.0014151543049584102, 0.003161483781535701, ... \n", - "1 S 3 ... [-0.0031782974877087693, 0.003973805776938075,... \n", - "2 NaN 4 ... [0.015268952851071075, -0.0024137893437008715,... \n", - "3 H 3 ... [0.002992664951436964, 0.013922942027531155, -... \n", - "4 NaN 2 ... [0.00920825730356781, 0.011965374832474578, 0.... \n", - "\n", - " concat_19k_v2_old_cossim concat_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.652559 \n", - "1 2.485859 2.347308 \n", - "2 2.798788 2.782963 \n", - "3 2.355813 2.314417 \n", - "4 1.868699 1.865663 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.013902607489678993, 0.013241494756981564, -... \n", - "1 [0.00027019944749503126, 0.005353652289998999,... \n", - "2 [0.00027019944749503126, 0.005353652289998999,... \n", - "3 [-0.0026976204618851985, 0.001541600665881322,... \n", - "4 [-0.0008601077391385219, 0.005201185839222482,... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [0.0014224480432097992, 0.0031547764732941653,... \n", - "1 [-0.0032792710227188605, 0.0036472880832864947... \n", - "2 [0.015322423107720673, -0.0024500099720118624,... \n", - "3 [0.0033640181667058486, 0.014044398230441645, ... \n", - "4 [0.00923153244996602, 0.011960544533439752, 0.... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.01371531560905985, 0.013126875633706597, -0... \n", - "1 [0.00027492382990721006, 0.0053545622809597, -... \n", - "2 [0.00027492382990721006, 0.0053545622809597, -... \n", - "3 [-0.002678224125439186, 0.0015598357892553907,... \n", - "4 [-0.0008458279784483333, 0.005209858282773185,... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [0.0014206775968733409, 0.0031581452887393872,... \n", - "1 [-0.0032450374860671267, 0.0036673577053825254... \n", - "2 [0.015281665873653082, -0.002421165402091456, ... \n", - "3 [0.0033484286344994184, 0.014002864550517797, ... \n", - "4 [0.009207264410626997, 0.011951895965764294, 0... \n", - "\n", - " concat_probase_19k_v2_old_cossim concat_probase_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.683318 \n", - "1 2.485859 2.481352 \n", - "2 2.798788 2.795047 \n", - "3 2.355813 2.350603 \n", - "4 1.868699 1.866785 \n", - "\n", - " avg_old \n", - "0 3.0 \n", - "1 3.2 \n", - "2 4.0 \n", - "3 3.0 \n", - "4 1.2 \n", - "\n", - "[5 rows x 105 columns]" - ] - }, - "execution_count": 157, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "rising-platform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.20519776]])" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cosine_similarity(np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word1_new'][1:-1].split(\",\")]).reshape(1,-1), np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word2_new'][1:-1].split(\",\")]).reshape(1,-1))" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "governing-offer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Word 1', 'Word 2', 'ID', 'H_Sim', 'H_Dim', 'F_Sim', 'F_Dim', 'N_Sim',\n", - " 'N_Dim', 'D_Sim',\n", - " ...\n", - " 'concat_19k_v2_word1_new', 'concat_19k_v2_word2_new',\n", - " 'concat_19k_v2_old_cosSim', 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_word1_old', 'concat_probase_19k_v2_word2_old',\n", - " 'concat_probase_19k_v2_word1_new', 'concat_probase_19k_v2_word2_new',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim'],\n", - " dtype='object', length=104)" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "rough-february", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_7props_19k_2_new_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'text_2props_19k_2_new_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'complex_19k_2_new_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'transe_19k_1_new_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_19k_2_new_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_2_new_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'complex_probase_2_new_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'transe_probase_1_new_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'complex_probase_19k_2_new_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_1_new_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_19k_v1_2_new_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_2_new_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim']" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "hired-center", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "\n", - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "extraordinary-value", - "metadata": {}, - "outputs": [], - "source": [ - "emb_pairs = [('text_7props_19k', 'text_7props_19k_2'),\n", - " ('text_2props_19k', 'text_2props_19k_2'),\n", - " ('complex_19k', 'complex_19k_2'),\n", - " ('transe_19k', 'transe_19k_1'),\n", - " ('abstract_19k', 'abstract_19k_2'),\n", - " ('abstract_firstSent_19k', 'abstract_firstSent_19k_2'),\n", - " ('complex_probase', 'complex_probase_2'),\n", - " ('transe_probase', 'transe_probase_1'),\n", - " ('complex_probase_19k', 'complex_probase_19k_2'),\n", - " ('transe_probase_19k', 'transe_probase_19k_1'),\n", - " ('concat_19k_v1', 'concat_19k_v1_2'),\n", - " ('concat_probase_19k_v1', 'concat_probase_19k_v1_2'),\n", - " ('concat_19k_v2', 'concat_19k_v2_2'),\n", - " ('concat_probase_19k_v2', 'concat_probase_19k_v2_2')]\n", - "colMappers = {p[0]+'_old_cosSim': p[1]+'_new_cosSim' for p in emb_pairs}" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "political-battle", - "metadata": {}, - "outputs": [], - "source": [ - "oldColList = list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "flexible-booking", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 123, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "radio-outline", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "recent-portal", - "metadata": {}, - "outputs": [], - "source": [ - "# oldColList, [colMappers[col] for col in oldColList]\n", - "t1234 = []\n", - "t4567 = []\n", - "for col in oldColList:\n", - " t1234.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(labelSamples), wordSim353AnnotDF_New_Merged_DF[col].apply(labelSamples)))\n", - " t4567.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(labelSamples), wordSim353AnnotDF_New_Merged_DF[colMappers[col]].apply(labelSamples)))\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "id": "opening-inside", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = list(zip(indNames,t1234, t4567))" - ] - }, - { - "cell_type": "code", - "execution_count": 187, - "id": "settled-overhead", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = pd.DataFrame(t1234, columns=['Type', 'Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category'])" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "id": "young-heath", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TypeAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated category
10Complex-Transe-AbsFirstSent - 19k0.6802330.686047
11Complex-Transe-AbsFirstSent - Probase-19k0.6802330.680233
8Complex - Probase-19k0.5988370.662791
2Complex - 19k0.5988370.659884
6Complex - Probase0.5988370.656977
3Transe - 19k0.5988370.654070
5Abstract First Sentence - 19k0.6511630.654070
7Transe - Probase0.5988370.645349
9Transe - Probase-19k0.5988370.642442
4Abstract - 19k0.6279070.627907
136 embeddings - Probase-19k0.6250000.627907
126 embeddings - 19k0.6250000.625000
0Text 7 props - 19k0.5726740.569767
1Text 2 props - 19k0.5668600.555233
\n", - "
" - ], - "text/plain": [ - " Type \\\n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "8 Complex - Probase-19k \n", - "2 Complex - 19k \n", - "6 Complex - Probase \n", - "3 Transe - 19k \n", - "5 Abstract First Sentence - 19k \n", - "7 Transe - Probase \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "10 0.680233 \n", - "11 0.680233 \n", - "8 0.598837 \n", - "2 0.598837 \n", - "6 0.598837 \n", - "3 0.598837 \n", - "5 0.651163 \n", - "7 0.598837 \n", - "9 0.598837 \n", - "4 0.627907 \n", - "13 0.625000 \n", - "12 0.625000 \n", - "0 0.572674 \n", - "1 0.566860 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \n", - "10 0.686047 \n", - "11 0.680233 \n", - "8 0.662791 \n", - "2 0.659884 \n", - "6 0.656977 \n", - "3 0.654070 \n", - "5 0.654070 \n", - "7 0.645349 \n", - "9 0.642442 \n", - "4 0.627907 \n", - "13 0.627907 \n", - "12 0.625000 \n", - "0 0.569767 \n", - "1 0.555233 " - ] - }, - "execution_count": 188, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t1234.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "id": "beneficial-continuity", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " tempVals.append(acc/N_SPLITS)\n", - "\n", - " for col in colList:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " tempVals.append(acc/N_SPLITS)\n", - " return tempVals\n", - "\n", - "def compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, newColList, indNames):\n", - " tempVals1 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, oldColList)\n", - " tempVals2 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, newColList)\n", - " summ = (pd.DataFrame(list(zip(tempVals1, tempVals2)), index = ['Combined'] + indNames, columns = ['Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category']) * 100)\n", - " summ['Increase'] = summ['Accuracy (in %) of new embeddings compared to annotated category'] - summ['Accuracy (in %) of old embeddings compared to annotated category']\n", - " return summ.sort_values(by=['Increase'], ascending=False)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "intensive-platform", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "id": "significant-season", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracyRF(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = RandomForestClassifier(max_depth=max(2 * len(colList) // 3,3), random_state=100)\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "id": "fitting-jurisdiction", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Text 2 props - 19k66.00000067.1596641.159664
Complex - 19k66.86554667.1596640.294118
Combined68.89916069.1680670.268908
Transe - 19k66.86554666.571429-0.294118
Abstract - 19k66.54621865.983193-0.563025
Text 7 props - 19k67.74789967.159664-0.588235
Abstract First Sentence - 19k73.21848771.504202-1.714286
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Text 2 props - 19k 66.000000 \n", - "Complex - 19k 66.865546 \n", - "Combined 68.899160 \n", - "Transe - 19k 66.865546 \n", - "Abstract - 19k 66.546218 \n", - "Text 7 props - 19k 67.747899 \n", - "Abstract First Sentence - 19k 73.218487 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Text 2 props - 19k 67.159664 \n", - "Complex - 19k 67.159664 \n", - "Combined 69.168067 \n", - "Transe - 19k 66.571429 \n", - "Abstract - 19k 65.983193 \n", - "Text 7 props - 19k 67.159664 \n", - "Abstract First Sentence - 19k 71.504202 \n", - "\n", - " Increase \n", - "Text 2 props - 19k 1.159664 \n", - "Complex - 19k 0.294118 \n", - "Combined 0.268908 \n", - "Transe - 19k -0.294118 \n", - "Abstract - 19k -0.563025 \n", - "Text 7 props - 19k -0.588235 \n", - "Abstract First Sentence - 19k -1.714286 " - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - "'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', \n", - " 'Transe - 19k', 'Abstract - 19k', 'Abstract First Sentence - 19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "loose-cuisine", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Complex + Transe + Abstract FirstSent 19k66.17647166.4621850.285714
Combined68.75630369.0336130.277311
Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent69.63025269.327731-0.302521
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.176471 \n", - "Combined 68.756303 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.630252 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.462185 \n", - "Combined 69.033613 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.327731 \n", - "\n", - " Increase \n", - "Complex + Transe + Abstract FirstSent 19k 0.285714 \n", - "Combined 0.277311 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... -0.302521 " - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['concat_19k_v1_old_cosSim',\n", - "'concat_19k_v2_old_cosSim']\n", - "indNames = ['Complex + Transe + Abstract FirstSent 19k', 'Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "second-lightning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 271, - "id": "institutional-gamma", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "KeyboardInterrupt\n", - "\n" - ] - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "seven-edinburgh", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "individual-store", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "processed-reynolds", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "oldColPairs = list(zip(oldColList, indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "forced-dining", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Text 7 props - 19k\n", - "Text 2 props - 19k\n", - "Complex - 19k\n", - "Transe - 19k\n", - "Abstract - 19k\n", - "Abstract First Sentence - 19k\n", - "Complex - Probase\n", - "Transe - Probase\n", - "Complex - Probase-19k\n", - "Transe - Probase-19k\n", - "Complex-Transe-AbsFirstSent - 19k\n", - "Complex-Transe-AbsFirstSent - Probase-19k\n", - "6 embeddings - 19k\n", - "6 embeddings - Probase-19k\n" - ] - } - ], - "source": [ - "print(\"\\n\".join(indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "permanent-comfort", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2002" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comb(len(oldColPairs), 9)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "quantitative-japanese", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "16384" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "2**(len(oldColPairs))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "flexible-preparation", - "metadata": {}, - "outputs": [], - "source": [ - "# accs = []\n", - "# for r in tqdm(range(1,len(oldColPairs)+1)):\n", - "# for comb in tqdm(combinations(oldColPairs, r)):\n", - "# print(len(comb))\n", - "# # oldAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [col[0] for col in comb])\n", - "# # newAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [colMappers[col[0]] for col in comb])\n", - "# print(\" & \".join([col[1] for col in comb]).count(\"&\"))\n", - "# # accs.append((indName, oldAcc, newAcc))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 316, - "id": "fatal-publicity", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "77739ea8b6bf4cfb933f406e6e9699a5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.42857165.126050-0.3025211
1Text 2 props - 19k64.55462263.680672-0.8739501
2Complex - 19k64.57983265.4453780.8655461
3Transe - 19k64.57983266.8907562.3109241
4Abstract - 19k67.73949668.0504200.3109241
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.428571 \n", - "1 64.554622 \n", - "2 64.579832 \n", - "3 64.579832 \n", - "4 67.739496 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 65.126050 -0.302521 \n", - "1 63.680672 -0.873950 \n", - "2 65.445378 0.865546 \n", - "3 66.890756 2.310924 \n", - "4 68.050420 0.310924 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 325, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 326, - "id": "congressional-genre", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 327, - "id": "single-duration", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 328, - "id": "sharp-tunisia", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
30Text 2 props - 19k & Abstract First Sentence - 19k71.84033670.966387-0.8739502
204Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k71.84033670.378151-1.4621853
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
60Abstract - 19k & Abstract First Sentence - 19k71.54621871.243697-0.3025212
12350Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.504202-1.4705888
12329Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.075630-0.8991608
12154Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.084034-0.8907568
11944Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.781513-1.1932778
12349Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.210084-1.7647068
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "30 Text 2 props - 19k & Abstract First Sentence - 19k \n", - "204 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "12350 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12329 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12154 Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "11944 Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12349 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "30 71.840336 \n", - "204 71.840336 \n", - "18 71.840336 \n", - "60 71.546218 \n", - "12350 70.974790 \n", - "12329 70.974790 \n", - "12154 70.974790 \n", - "11944 70.974790 \n", - "12349 70.974790 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "30 70.966387 \n", - "204 70.378151 \n", - "18 71.848739 \n", - "60 71.243697 \n", - "12350 69.504202 \n", - "12329 70.075630 \n", - "12154 70.084034 \n", - "11944 69.781513 \n", - "12349 69.210084 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "30 -0.873950 2 \n", - "204 -1.462185 3 \n", - "18 0.008403 2 \n", - "60 -0.302521 2 \n", - "12350 -1.470588 8 \n", - "12329 -0.899160 8 \n", - "12154 -0.890756 8 \n", - "11944 -1.193277 8 \n", - "12349 -1.764706 8 " - ] - }, - "execution_count": 328, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 329, - "id": "federal-timing", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
5318Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.39495871.5462181.1512616
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
108Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k69.21008471.2521012.0420173
694Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k70.08403471.2521011.1680674
8035Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.09243771.2521011.1596647
7049Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.38655571.2521010.8655467
1916Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k69.79831971.2521011.4537825
11327Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.10084071.2521011.1512618
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "5318 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "108 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k \n", - "694 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "8035 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7049 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "1916 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "11327 Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "18 71.840336 \n", - "5318 70.394958 \n", - "5 72.705882 \n", - "51 68.630252 \n", - "108 69.210084 \n", - "694 70.084034 \n", - "8035 70.092437 \n", - "7049 70.386555 \n", - "1916 69.798319 \n", - "11327 70.100840 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "18 71.848739 \n", - "5318 71.546218 \n", - "5 71.537815 \n", - "51 71.521008 \n", - "108 71.252101 \n", - "694 71.252101 \n", - "8035 71.252101 \n", - "7049 71.252101 \n", - "1916 71.252101 \n", - "11327 71.252101 \n", - "\n", - " Increase count \n", - "18 0.008403 2 \n", - "5318 1.151261 6 \n", - "5 -1.168067 1 \n", - "51 2.890756 2 \n", - "108 2.042017 3 \n", - "694 1.168067 4 \n", - "8035 1.159664 7 \n", - "7049 0.865546 7 \n", - "1916 1.453782 5 \n", - "11327 1.151261 8 " - ] - }, - "execution_count": 329, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 330, - "id": "known-basement", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
1041Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k66.28571469.1932772.9075634
2828Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k65.71428668.6134452.8991605
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
9440Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k66.56302569.1848742.6218497
2701Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k65.71428668.3277312.6134455
1035Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k66.28571468.8991602.6134454
1030Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k66.28571468.8991602.6134454
2689Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k65.71428668.3193282.6050425
2834Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k65.71428668.3193282.6050425
1026Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k68.64705971.2268912.5798324
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "1041 Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "2828 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "9440 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "2701 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "1035 Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k \n", - "1030 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k \n", - "2689 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k \n", - "2834 Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k \n", - "1026 Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "1041 66.285714 \n", - "2828 65.714286 \n", - "51 68.630252 \n", - "9440 66.563025 \n", - "2701 65.714286 \n", - "1035 66.285714 \n", - "1030 66.285714 \n", - "2689 65.714286 \n", - "2834 65.714286 \n", - "1026 68.647059 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "1041 69.193277 \n", - "2828 68.613445 \n", - "51 71.521008 \n", - "9440 69.184874 \n", - "2701 68.327731 \n", - "1035 68.899160 \n", - "1030 68.899160 \n", - "2689 68.319328 \n", - "2834 68.319328 \n", - "1026 71.226891 \n", - "\n", - " Increase count \n", - "1041 2.907563 4 \n", - "2828 2.899160 5 \n", - "51 2.890756 2 \n", - "9440 2.621849 7 \n", - "2701 2.613445 5 \n", - "1035 2.613445 4 \n", - "1030 2.613445 4 \n", - "2689 2.605042 5 \n", - "2834 2.605042 5 \n", - "1026 2.579832 4 " - ] - }, - "execution_count": 330, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "id": "private-conditions", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
126 embeddings - 19k70.09243771.2521011.1596641
136 embeddings - Probase-19k70.09243770.6722690.5798321
4Abstract - 19k67.73949668.0504200.3109241
11Complex-Transe-AbsFirstSent - Probase-19k67.47058867.176471-0.2941181
10Complex-Transe-AbsFirstSent - 19k67.47058866.899160-0.5714291
3Transe - 19k64.57983266.8907562.3109241
9Transe - Probase-19k64.57983266.8907562.3109241
7Transe - Probase64.57983266.5966392.0168071
8Complex - Probase-19k64.57983265.4453780.8655461
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "12 6 embeddings - 19k \n", - "13 6 embeddings - Probase-19k \n", - "4 Abstract - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "7 Transe - Probase \n", - "8 Complex - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "12 70.092437 \n", - "13 70.092437 \n", - "4 67.739496 \n", - "11 67.470588 \n", - "10 67.470588 \n", - "3 64.579832 \n", - "9 64.579832 \n", - "7 64.579832 \n", - "8 64.579832 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "12 71.252101 \n", - "13 70.672269 \n", - "4 68.050420 \n", - "11 67.176471 \n", - "10 66.899160 \n", - "3 66.890756 \n", - "9 66.890756 \n", - "7 66.596639 \n", - "8 65.445378 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "12 1.159664 1 \n", - "13 0.579832 1 \n", - "4 0.310924 1 \n", - "11 -0.294118 1 \n", - "10 -0.571429 1 \n", - "3 2.310924 1 \n", - "9 2.310924 1 \n", - "7 2.016807 1 \n", - "8 0.865546 1 " - ] - }, - "execution_count": 331, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs[allCombs['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "markdown", - "id": "heard-think", - "metadata": {}, - "source": [ - "## RF" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "id": "trying-liabilities", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "123c20d4e60b4e3e8b09c0e0e46efc1e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.12605063.672269-1.4537821
1Text 2 props - 19k61.89916063.3445381.4453781
2Complex - 19k66.61344564.277311-2.3361341
3Transe - 19k66.61344566.310924-0.3025211
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.126050 \n", - "1 61.899160 \n", - "2 66.613445 \n", - "3 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 63.672269 -1.453782 \n", - "1 63.344538 1.445378 \n", - "2 64.277311 -2.336134 \n", - "3 66.310924 -0.302521 \n", - "4 66.008403 -2.890756 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "id": "increased-indonesian", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs1)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "id": "english-brother", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "id": "fantastic-narrow", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
60Abstract - 19k & Abstract First Sentence - 19k72.11764768.327731-3.7899162
138Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k72.10084070.361345-1.7394963
151Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.83193370.378151-1.4537823
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
2114Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k71.81512669.789916-2.0252105
2001Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k71.81512669.798319-2.0168075
2000Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k71.81512670.378151-1.4369755
1999Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k71.81512669.495798-2.3193285
1998Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k71.81512669.487395-2.3277315
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "138 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "151 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "2114 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "2001 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "2000 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "1999 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k \n", - "1998 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 73.285714 \n", - "60 72.117647 \n", - "138 72.100840 \n", - "151 71.831933 \n", - "152 71.831933 \n", - "2114 71.815126 \n", - "2001 71.815126 \n", - "2000 71.815126 \n", - "1999 71.815126 \n", - "1998 71.815126 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 70.075630 \n", - "60 68.327731 \n", - "138 70.361345 \n", - "151 70.378151 \n", - "152 71.252101 \n", - "2114 69.789916 \n", - "2001 69.798319 \n", - "2000 70.378151 \n", - "1999 69.495798 \n", - "1998 69.487395 \n", - "\n", - " Increase count \n", - "5 -3.210084 1 \n", - "60 -3.789916 2 \n", - "138 -1.739496 3 \n", - "151 -1.453782 3 \n", - "152 -0.579832 3 \n", - "2114 -2.025210 5 \n", - "2001 -2.016807 5 \n", - "2000 -1.436975 5 \n", - "1999 -2.319328 5 \n", - "1998 -2.327731 5 " - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 259, - "id": "brown-punishment", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
681Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k70.66386671.2605040.5966394
218Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.22689171.2521010.0252103
1575Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.23529471.2521010.0168075
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
3884Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k68.31092471.2352942.9243706
129Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k69.76470671.2352941.4705883
217Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.22689170.974790-0.2521013
604Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.52941270.966387-0.5630254
7207Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k68.60504270.9663872.3613457
690Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k70.66386670.9663870.3025214
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "681 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k \n", - "218 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "1575 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "3884 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "129 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k \n", - "217 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "604 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "7207 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "690 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "681 70.663866 \n", - "218 71.226891 \n", - "1575 71.235294 \n", - "152 71.831933 \n", - "3884 68.310924 \n", - "129 69.764706 \n", - "217 71.226891 \n", - "604 71.529412 \n", - "7207 68.605042 \n", - "690 70.663866 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "681 71.260504 \n", - "218 71.252101 \n", - "1575 71.252101 \n", - "152 71.252101 \n", - "3884 71.235294 \n", - "129 71.235294 \n", - "217 70.974790 \n", - "604 70.966387 \n", - "7207 70.966387 \n", - "690 70.966387 \n", - "\n", - " Increase count \n", - "681 0.596639 4 \n", - "218 0.025210 3 \n", - "1575 0.016807 5 \n", - "152 -0.579832 3 \n", - "3884 2.924370 6 \n", - "129 1.470588 3 \n", - "217 -0.252101 3 \n", - "604 -0.563025 4 \n", - "7207 2.361345 7 \n", - "690 0.302521 4 " - ] - }, - "execution_count": 259, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 260, - "id": "considerable-syndication", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
13048Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210170.3529416.1008409
13084Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210169.2100844.9579839
14022Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.52941269.1764714.6470599
13861Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.24369768.8907564.6470599
7551Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k63.09243767.7226894.6302527
13058Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210168.6050424.3529419
6500Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k63.68907668.0336134.3445387
7537Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k63.09243767.4369754.3445387
7570Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k63.09243767.4285714.3361347
6499Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k63.68907668.0252104.3361347
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "13048 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "13084 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "14022 Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "13861 Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7551 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "13058 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "6500 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7537 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7570 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k \n", - "6499 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "13048 64.252101 \n", - "13084 64.252101 \n", - "14022 64.529412 \n", - "13861 64.243697 \n", - "7551 63.092437 \n", - "13058 64.252101 \n", - "6500 63.689076 \n", - "7537 63.092437 \n", - "7570 63.092437 \n", - "6499 63.689076 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "13048 70.352941 \n", - "13084 69.210084 \n", - "14022 69.176471 \n", - "13861 68.890756 \n", - "7551 67.722689 \n", - "13058 68.605042 \n", - "6500 68.033613 \n", - "7537 67.436975 \n", - "7570 67.428571 \n", - "6499 68.025210 \n", - "\n", - " Increase count \n", - "13048 6.100840 9 \n", - "13084 4.957983 9 \n", - "14022 4.647059 9 \n", - "13861 4.647059 9 \n", - "7551 4.630252 7 \n", - "13058 4.352941 9 \n", - "6500 4.344538 7 \n", - "7537 4.344538 7 \n", - "7570 4.336134 7 \n", - "6499 4.336134 7 " - ] - }, - "execution_count": 260, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 261, - "id": "binary-committee", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
11Complex-Transe-AbsFirstSent - Probase-19k70.04201770.6302520.5882351
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
10Complex-Transe-AbsFirstSent - 19k70.04201768.302521-1.7394961
136 embeddings - Probase-19k68.90756368.042017-0.8655461
126 embeddings - 19k68.90756366.857143-2.0504201
6Complex - Probase66.61344566.596639-0.0168071
7Transe - Probase66.61344566.596639-0.0168071
3Transe - 19k66.61344566.310924-0.3025211
9Transe - Probase-19k66.61344566.008403-0.6050421
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "6 Complex - Probase \n", - "7 Transe - Probase \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "11 70.042017 \n", - "5 73.285714 \n", - "10 70.042017 \n", - "13 68.907563 \n", - "12 68.907563 \n", - "6 66.613445 \n", - "7 66.613445 \n", - "3 66.613445 \n", - "9 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "11 70.630252 \n", - "5 70.075630 \n", - "10 68.302521 \n", - "13 68.042017 \n", - "12 66.857143 \n", - "6 66.596639 \n", - "7 66.596639 \n", - "3 66.310924 \n", - "9 66.008403 \n", - "4 66.008403 \n", - "\n", - " Increase count \n", - "11 0.588235 1 \n", - "5 -3.210084 1 \n", - "10 -1.739496 1 \n", - "13 -0.865546 1 \n", - "12 -2.050420 1 \n", - "6 -0.016807 1 \n", - "7 -0.016807 1 \n", - "3 -0.302521 1 \n", - "9 -0.605042 1 \n", - "4 -2.890756 1 " - ] - }, - "execution_count": 261, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1[allCombs1['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "approximate-event", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "successful-spider", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "moral-thought", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "western-easter", - "metadata": {}, - "source": [ - "# Generate Embeddings Files" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "nervous-physiology", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = pd.concat([wordSim353AnnotDF_New2[['word1_kg_id', 'Word 1']], wordSim353AnnotDF_New2[['word2_kg_id', 'Word 2']].rename(columns={'Word 2': 'Word 1', 'word2_kg_id': 'word1_kg_id'})])" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "neither-hammer", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = wordList[~wordList.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "welsh-indiana", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in embedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "processed-wonder", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in newEmbedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings_new_attempt1.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "psychological-template", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['Word 1'].to_csv('../data/wordsim353_embeddings_words.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prime-munich", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assigned-appliance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "severe-textbook", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prompt-orlando", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "otherwise-qatar", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "inclusive-brick", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "micro-kernel", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "optical-atlas", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assured-means", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-fever", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opened-baker", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "supposed-charm", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "384px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Archived/Master P279 Emb Generation.ipynb b/Archived/Master P279 Emb Generation.ipynb deleted file mode 100644 index 4f1e932..0000000 --- a/Archived/Master P279 Emb Generation.ipynb +++ /dev/null @@ -1,4516 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "id": "incorrect-routine", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn.metrics.pairwise import euclidean_distances\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.metrics import confusion_matrix\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from tqdm.notebook import tqdm\n", - "from itertools import combinations\n", - "from math import comb\n", - "from sklearn.ensemble import RandomForestClassifier\n", - "import os\n", - "import h5py\n", - "import json" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "previous-cutting", - "metadata": {}, - "outputs": [], - "source": [ - "# DWD V2 files\n", - "SITELINKS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/sitelinks.en.tsv.gz\"\n", - "LABELS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/labels.en.tsv.gz\"\n", - "DESCRIPTIONS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/labels.en.tsv.gz\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "anonymous-psychology", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "everyday-colleague", - "metadata": {}, - "outputs": [], - "source": [ - "# ABSTRACT Embedding Related Files\n", - "DBPEDIA_SHORT_ABSTRACTS_TTL = \"../data/evaluation/source_files/short-abstracts_lang=en.ttl\"\n", - "DBPEDIA_SHORT_ABSTRACTS_CSV = \"../data/evaluation/source_files/short-abstracts_lang=en.csv\"" - ] - }, - { - "cell_type": "markdown", - "id": "noble-draft", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Common Code" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "broadband-background", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "275927\n" - ] - } - ], - "source": [ - "def get_all_nodes():\n", - " \"\"\"\n", - " This function generates the set of all nodes needed for execution\n", - " \"\"\"\n", - " p279ChildPar = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_baremetal.csv')\n", - " wordsim_df = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " wiki_cs_df = pd.read_csv('../data/wikidata-cs_categorized.csv')\n", - " concept_net_df = pd.read_csv('../data/kgtk_conceptnet_evaluation.csv')\n", - " p279QnodesList = set(p279ChildPar.node1.to_list() \n", - " + p279ChildPar.node2.to_list()\n", - " + wordsim_df['word1_kg_id'].to_list() \n", - " + wordsim_df['word2_kg_id'].to_list()\n", - " + wiki_cs_df['word1_kg_id'].to_list() \n", - " + wiki_cs_df['word2_kg_id'].to_list()\n", - " + concept_net_df['word1_kg_id'].to_list()\n", - " + concept_net_df['word2_kg_id'].to_list())\n", - " print(len(p279QnodesList))\n", - " return p279QnodesList\n", - "\n", - "allNodes = get_all_nodes()" - ] - }, - { - "cell_type": "markdown", - "id": "driven-yeast", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Complex + Transe Embeddings Generation" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "brief-timer", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "238889\n" - ] - } - ], - "source": [ - "p279ChildPar = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_baremetal.csv')\n", - "print(len(set(p279ChildPar.node1.to_list() \n", - " + p279ChildPar.node2.to_list())))\n", - "\n", - "# Load complex, transe embedding files and entity names file\n", - "compf = h5py.File('../data/complTrans/complEx.h5','r')\n", - "transf = h5py.File('../data/complTrans/transE.h5','r')\n", - "ent_names = json.load(open('../data/complTrans/entity_names_all_0.json'))\n", - "allNodes = get_all_nodes()\n", - "# json.dump(list(p279QnodesList), open('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_nodes.json', 'w'))\n", - "\n", - "complexEmb = {qnode: emb for emb, qnode in zip(compf['embeddings'], ent_names) if qnode in allNodes}\n", - "transeEmb = {qnode: emb for emb, qnode in zip(transf['embeddings'], ent_names) if qnode in allNodes}\n", - "print(f\"Out of {len(ent_names)} embeddings, retaining {len(transeEmb)} embeddings\")\n", - "\n", - "def serialize_embedding_dict(embed_dict):\n", - " for key2 in embed_dict.keys():\n", - " embed_dict[key2] = embed_dict[key2].tolist() if type(embed_dict[key2]) != list else embed_dict[key2]\n", - " return embed_dict\n", - "\n", - "json.dump(serialize_embedding_dict(complexEmb),open('../data/Master_P279_dataset/embeddings/complex_orig_embedding_dict.json','w'))\n", - "json.dump(serialize_embedding_dict(transeEmb),open('../data/Master_P279_dataset/embeddings/transe_orig_embedding_dict.json','w'))\n", - "# complexEmb = json.load(open('../data/Master_P279_dataset/embeddings/complex_orig_embedding_dict.json'))\n", - "# transeEmb = json.load(open('../data/Master_P279_dataset/embeddings/transe_orig_embedding_dict.json'))" - ] - }, - { - "cell_type": "markdown", - "id": "continued-locking", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Text Embedding" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "neural-gibson", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "p279ChildPar = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_baremetal.csv')\n", - "p279QnodesList = list(set(p279ChildPar.node1.to_list() + p279ChildPar.node2.to_list()))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "instructional-weather", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "missingNodes = allNodes - set(p279ChildPar.node1.to_list() + p279ChildPar.node2.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "specified-clear", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "37038" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingNodes)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "conditional-brooks", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6fb2da21d7cf4241a3e52ac132a7c534", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/38 [00:00 ../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - " print(cnt)\n", - " runCommCnt += 1\n", - " os.system(q1 + \" &\")\n", - " if runCommCnt % 15 == 0:\n", - " time.sleep(11*60)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "surprising-burning", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [], - "source": [ - "for cnt in tqdm(range(1,290)):\n", - " if countFileLines(\"../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\") != 4097:\n", - " print(cnt)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bottom-lodge", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "import time\n", - "from os.path import exists\n", - "\n", - "# roberta-large-nli-mean-tokens\n", - "runCommCnt = 0\n", - "for cnt in tqdm(range(252,290)):\n", - " if exists(\"../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\") and countFileLines(\"../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\") == 4097:\n", - " continue\n", - " q1 = \"\"\n", - "# if cnt % 10 == 0:\n", - "# q1 += \"sleep 20m; \"\n", - " q1 += \"~/miniconda3/envs/kgtkEnv2/bin/kgtk text-embedding -i ../data/Master_P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - " --model sentence-transformers/all-distilroberta-v1 \\\n", - " --property-labels-file ../data/labels.en.tsv --debug \\\n", - " --isa-properties P31 P279 \\\n", - " --save-embedding-sentence > ../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\"\n", - " print(cnt)\n", - " runCommCnt += 1\n", - " os.system(q1 + \" &\")\n", - " if runCommCnt % 15 == 0:\n", - " time.sleep(13*60)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "damaged-browse", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "p279QnodesList = set(json.load(open('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_nodes.json')))" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "collective-april", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# temp = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-1.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "decent-yorkshire", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99738027text_embedding0.74755263,1.6350263,-0.73952675,1.0463063,-0....
1Q99738027embedding_sentencenight shift, work shift during nighttime hours...
2Q99228502text_embedding0.25261465,0.06285462,0.029052094,0.50796187,0...
3Q99228502embedding_sentenceavenue, thoroughfare named \\\"avenue\\\" is thoro...
4Q98970128text_embedding0.11887096,0.8598291,0.4446009,-0.5038472,-0.9...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99738027 text_embedding \n", - "1 Q99738027 embedding_sentence \n", - "2 Q99228502 text_embedding \n", - "3 Q99228502 embedding_sentence \n", - "4 Q98970128 text_embedding \n", - "\n", - " value \n", - "0 0.74755263,1.6350263,-0.73952675,1.0463063,-0.... \n", - "1 night shift, work shift during nighttime hours... \n", - "2 0.25261465,0.06285462,0.029052094,0.50796187,0... \n", - "3 avenue, thoroughfare named \\\"avenue\\\" is thoro... \n", - "4 0.11887096,0.8598291,0.4446009,-0.5038472,-0.9... " - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# temp.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "satisfactory-speech", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "89ab35a23d2b4280817c0341f653926b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/289 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99738027text_embedding-0.013346219,-0.0011667104,-0.011631126,-0.035...
2Q99228502text_embedding-0.03083402,0.0063954173,-0.007306752,-0.04110...
4Q98970128text_embedding-0.002591213,0.020681797,-0.001562099,-0.05354...
6Q98964text_embedding0.04362039,0.01125773,0.022253651,-0.019940976...
8Q98958281text_embedding0.033505574,-0.019156927,-0.02115375,-0.016005...
\n", - "" - ], - "text/plain": [ - " node property \\\n", - "0 Q99738027 text_embedding \n", - "2 Q99228502 text_embedding \n", - "4 Q98970128 text_embedding \n", - "6 Q98964 text_embedding \n", - "8 Q98958281 text_embedding \n", - "\n", - " value \n", - "0 -0.013346219,-0.0011667104,-0.011631126,-0.035... \n", - "2 -0.03083402,0.0063954173,-0.007306752,-0.04110... \n", - "4 -0.002591213,0.020681797,-0.001562099,-0.05354... \n", - "6 0.04362039,0.01125773,0.022253651,-0.019940976... \n", - "8 0.033505574,-0.019156927,-0.02115375,-0.016005... " - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "text2Emb.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "concerned-april", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "507f79dc16a5412a88ebf38b99be0867", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/289 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
embeddingcountCoverage Percentage
0complex23844899.815395
1transe23844899.815395
2text2238889100.000000
3text7238889100.000000
4abstract10582844.300072
5abstractFirstSent10582844.300072
\n", - "" - ], - "text/plain": [ - " embedding count Coverage Percentage\n", - "0 complex 238448 99.815395\n", - "1 transe 238448 99.815395\n", - "2 text2 238889 100.000000\n", - "3 text7 238889 100.000000\n", - "4 abstract 105828 44.300072\n", - "5 abstractFirstSent 105828 44.300072" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(summArr, columns=['embedding', 'count', 'Coverage Percentage'])" - ] - }, - { - "cell_type": "markdown", - "id": "changing-strategy", - "metadata": {}, - "source": [ - "# Embeddings correction" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "purple-raising", - "metadata": {}, - "outputs": [], - "source": [ - "masterEmbedDictMaster = {}\n", - "subsetEmbedDictMaster = {}" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "round-product", - "metadata": {}, - "outputs": [], - "source": [ - "masterEmbedKeys = ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent']\n", - "for key1 in masterEmbedKeys:\n", - " masterEmbedDictMaster[key1] = json.load(open('../data/Master_P279_dataset/embeddings/'+key1+'_orig_embedding_dict.json'))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "metallic-insulin", - "metadata": {}, - "outputs": [], - "source": [ - "subsetEmbedKeys = ['text_7props', 'text_2props', 'complex', 'transe', 'abstract', 'abstract_first_sent']\n", - "for key1 in subsetEmbedKeys:\n", - " subsetEmbedDictMaster[key1] = json.load(open('../data/orig_embeddings/'+key1+'_original_embeddings_dict.json'))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "assigned-parameter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "olympic-yemen", - "metadata": {}, - "outputs": [], - "source": [ - "wordsim_pairs = {(row['word1_kg_id'], row['word2_kg_id']) for _, row in wordSim353AnnotDF_New.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "welcome-disorder", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pair Coverage by text_7props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by text_2props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by complex embeddings created for 19k retrofitting: 342\n", - "Pair Coverage by transe embeddings created for 19k retrofitting: 342\n", - "Pair Coverage by abstract embeddings created for 19k retrofitting: 343\n", - "Pair Coverage by abstract_first_sent embeddings created for 19k retrofitting: 343\n" - ] - } - ], - "source": [ - "for key1 in subsetEmbedKeys:\n", - " print(f\"Pair Coverage by {key1} embeddings created for 19k retrofitting: {sum([row[0] in subsetEmbedDictMaster[key1] and row[1] in subsetEmbedDictMaster[key1] for row in wordsim_pairs])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "northern-psychiatry", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pair Coverage by old text_7_props embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old text_2_props embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old complex embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old transe embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old abstract embeddings created for 19k retrofitting: 183\n", - "Pair Coverage by old abstract_first_sent embeddings created for 19k retrofitting: 183\n" - ] - } - ], - "source": [ - "for key1 in masterEmbedKeys:\n", - " print(f\"Pair Coverage by old {key1} embeddings created for 19k retrofitting: {sum([row[0] in masterEmbedDictMaster[key1] and row[1] in masterEmbedDictMaster[key1] for row in wordsim_pairs])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "contrary-casino", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_set = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "alleged-polish", - "metadata": {}, - "outputs": [], - "source": [ - "from collections import defaultdict\n", - "masterEmbCorrections = defaultdict(list)\n", - "for node in wordSim353AnnotDF_New_set:\n", - " for i in range(len(masterEmbedKeys)):\n", - " if node not in masterEmbedDictMaster[masterEmbedKeys[i]] and node in wordSim353AnnotDF_New_set:\n", - " masterEmbCorrections[masterEmbedKeys[i]].append(node)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "periodic-buffer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['abstract', 'abstract_first_sent', 'text_7_props', 'text_2_props', 'complex', 'transe'])" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "masterEmbCorrections.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "awful-signal", - "metadata": {}, - "source": [ - "## Complex, Transe" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "exceptional-acting", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# correctedComplexEmb = {}\n", - "# correctedTranseEmb = {}\n", - "# for wordID in masterEmbCorrections['complex']:\n", - "# try:\n", - "# resp = requests.get(\"http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID).json()['_source']\n", - "# correctedComplexEmb[wordID] = [float(p) for p in resp['graph_embedding_complex'].split(',')]\n", - "# correctedTranseEmb[wordID] = [float(p) for p in resp['graph_embeddings_transe'].split(',')]\n", - "# except:\n", - "# print(\"Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "assigned-journey", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "51850ec9544547f293820bd9e94091f4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/42575933 [00:00 ../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-corrections.tsv\"\n", - "# print(q1)\n", - "os.system(q1 + \" &\")" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "cooked-vinyl", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "32512" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "q1 = \"kgtk text-embedding -i ../data/Master_P279_dataset/output/wikidataos.for.text-embedding-ext-corrections.tsv \\\n", - " --model roberta-large-nli-mean-tokens \\\n", - " --property-labels-file ../data/labels.en.tsv --debug \\\n", - " --isa-properties P31 P279 \\\n", - " --save-embedding-sentence > ../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-corrections.tsv\"\n", - "# print(q1)\n", - "os.system(q1 + \" &\")" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "static-failure", - "metadata": {}, - "outputs": [], - "source": [ - "corrected7Emb = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-corrections.tsv', sep='\\t')\n", - "corrected2Emb = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-corrections.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "spare-flexibility", - "metadata": {}, - "outputs": [], - "source": [ - "corrected7Emb = corrected7Emb[corrected7Emb.property == 'text_embedding']\n", - "corrected7Emb['value'] = corrected7Emb.value.apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "\n", - "corrected2Emb = corrected2Emb[corrected2Emb.property == 'text_embedding']\n", - "corrected2Emb['value'] = corrected2Emb.value.apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "id": "minute-oakland", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in corrected7Emb.iterrows():\n", - " masterEmbedDictMaster['text_7_props'][row['node']] = row['value']\n", - "for _, row in corrected2Emb.iterrows():\n", - " masterEmbedDictMaster['text_2_props'][row['node']] = row['value']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "documentary-fluid", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "analyzed-naples", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "psychological-brighton", - "metadata": {}, - "source": [ - "## Abstract" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "meaning-spanking", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DBPedia dataset has 5732949 records with unique 5732947 index values\n", - "There are 8472828 sitelinks present in the dataset corresponding to 8472828 unique node1s (Qxxx), 8401883 unique labels (text)\n" - ] - } - ], - "source": [ - "df1 = pd.read_csv(\"../data/short-abstracts_lang=en.csv\", skiprows=1, skipfooter=1, header=None, engine='python')\n", - "df1.columns = ['ignore', 'node1', 'url', 'ignore2', 'abstract']\n", - "df1 = df1.set_index('node1')\n", - "df1[df1.url.apply(lambda p: 'http://dbpedia.org/resource' not in p)]\n", - "print(f\"DBPedia dataset has {len(df1)} records with unique {df1.index.nunique()} index values\")\n", - "sitelinksDF = pd.read_csv(\"../data/sitelinks.en.tsv.gz\", sep='\\t')\n", - "sitelinksDF['trimmedNode2'] = sitelinksDF.node2.apply(lambda p: p.split(\"/\")[-1] if p.split(\"/\")[-1] != '' else p.split(\"/\")[-2])\n", - "sitelinksDF1 = sitelinksDF[sitelinksDF.label == 'wikipedia_sitelink']\n", - "sitelinksDF2 = sitelinksDF1.set_index('trimmedNode2')\n", - "print(f\"There are {len(sitelinksDF2)} sitelinks present in the dataset corresponding to {sitelinksDF2.node1.nunique()} unique node1s (Qxxx), {sitelinksDF2.index.nunique()} unique labels (text)\")\n", - "sitelinksDF2.loc[sitelinksDF2[sitelinksDF2.index.duplicated()].index]\n", - "masterEmbCorrections_abs_set = set(masterEmbCorrections['abstract'])\n", - "sitelinksDF2 = sitelinksDF2[sitelinksDF2.node1.apply(lambda p: p in masterEmbCorrections_abs_set)]" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "offensive-enclosure", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')\n", - "labelsDF = labelsDF[labelsDF.node1.apply(lambda p: p in masterEmbCorrections_abs_set)]\n", - "labelsDict = {row['node1']: row['node2'] for _, row in labelsDF.iterrows()}\n", - "descriptionsDF = pd.read_csv('../../wd-correctness/gdrive-kgtk-dump-2020-12-07/descriptions.en.tsv.gz', compression='gzip', sep='\\t')\n", - "descriptionsDF = descriptionsDF[descriptionsDF.node1.apply(lambda p: p in masterEmbCorrections_abs_set)]\n", - "descDict = {row['node1']: row['node2'] for _, row in descriptionsDF.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "better-tuner", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "From 58 Qnodes, there are 16 sitelink Qnodes which do not have a short abstract i.e 42 have a short abstract\n" - ] - } - ], - "source": [ - "sdf_set = set(sitelinksDF2.index.to_list())\n", - "df1 = df1[df1.index.map(lambda p: p in sdf_set)]\n", - "abstractsDF2 = sitelinksDF2.join(df1).reset_index()\n", - "print(f\"From {len(abstractsDF2)} Qnodes, there are {abstractsDF2.ignore2.isna().sum()} sitelink Qnodes which do not have a short abstract i.e {len(abstractsDF2) - abstractsDF2.ignore2.isna().sum()} have a short abstract\")\n", - "# abstractsDF2 = abstractsDF2[~abstractsDF2.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "invalid-fiction", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2['node1_label'] = abstractsDF2.node1.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else \"\")\n", - "abstractsDF2['node1_desc'] = abstractsDF2.node1.apply(lambda p: descDict[p][1:-4] if p in descDict else \"\")\n", - "def combineAbsLabDesc(row, parameter):\n", - " if not(pd.isna(row[parameter])) and row[parameter] != 'nan' and row[parameter] != \"\":\n", - " return row[parameter]\n", - " elif row['node1_label'] == \"\" and row['node1_desc'] == \"\":\n", - " return None\n", - " else:\n", - " return row['node1_label'] + ' ' + row['node1_desc']" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "opened-drink", - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.tokenize import sent_tokenize\n", - "abstractsDF2['abstract_firstSent'] = abstractsDF2.abstract.apply(lambda p: sent_tokenize(str(p))[0] if p else None)\n", - "abstractsDF2 = abstractsDF2.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "affected-reproduction", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2['abstract'] = abstractsDF2.apply(combineAbsLabDesc, axis=1, args=('abstract',))\n", - "abstractsDF2['abstract_firstSent'] = abstractsDF2.apply(combineAbsLabDesc, axis=1, args=('abstract_firstSent',))" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "actual-communication", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "58" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(abstractsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "quantitative-tumor", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2 = abstractsDF2[~abstractsDF2.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "turned-retail", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "58" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(abstractsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "heard-freedom", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2 = abstractsDF2.drop(columns=['index']).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "forty-southeast", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
level_0indextrimmedNode2idnode1labelnode2ignoreurlignore2abstractnode1_labelnode1_descabstract_firstSent
000LuxuriesQ10953913-wikipedia_sitelink-538fe3-0Q10953913wikipedia_sitelinkhttp://en.wikipedia.org/wiki/LuxuriesNaNNaNNaNluxuryBehavior, expenses or equipment that far...luxuryBehavior, expenses or equipment that far excee...nan
111PotatoQ10998-wikipedia_sitelink-56b85c-0Q10998wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Potato10709.0<http://dbpedia.org/resource/Potato><http://www.w3.org/2000/01/rdf-schema#comment>The potato is a root vegetable native to the A...potatospecies of plantThe potato is a root vegetable native to the A...
222MarsQ111-wikipedia_sitelink-9ff296-0Q111wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Mars1803088.0<http://dbpedia.org/resource/Mars><http://www.w3.org/2000/01/rdf-schema#comment>Mars is the fourth planet from the Sun and the...Marsfourth planet from the SunMars is the fourth planet from the Sun and the...
333DawnQ11326182-wikipedia_sitelink-ae2918-0Q11326182wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Dawn97544.0<http://dbpedia.org/resource/Dawn><http://www.w3.org/2000/01/rdf-schema#comment>Dawn is the time that marks the beginning of t...dawntime that marks the beginning of the twilight ...Dawn is the time that marks the beginning of t...
444Change_(philosophy)Q1150070-wikipedia_sitelink-81cf5f-0Q1150070wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Change_(philosophy)NaNNaNNaNchangeprocess, event or action that deviates f...changeprocess, event or action that deviates from th...nan
\n", - "
" - ], - "text/plain": [ - " level_0 index trimmedNode2 id \\\n", - "0 0 0 Luxuries Q10953913-wikipedia_sitelink-538fe3-0 \n", - "1 1 1 Potato Q10998-wikipedia_sitelink-56b85c-0 \n", - "2 2 2 Mars Q111-wikipedia_sitelink-9ff296-0 \n", - "3 3 3 Dawn Q11326182-wikipedia_sitelink-ae2918-0 \n", - "4 4 4 Change_(philosophy) Q1150070-wikipedia_sitelink-81cf5f-0 \n", - "\n", - " node1 label \\\n", - "0 Q10953913 wikipedia_sitelink \n", - "1 Q10998 wikipedia_sitelink \n", - "2 Q111 wikipedia_sitelink \n", - "3 Q11326182 wikipedia_sitelink \n", - "4 Q1150070 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "0 http://en.wikipedia.org/wiki/Luxuries NaN \n", - "1 http://en.wikipedia.org/wiki/Potato 10709.0 \n", - "2 http://en.wikipedia.org/wiki/Mars 1803088.0 \n", - "3 http://en.wikipedia.org/wiki/Dawn 97544.0 \n", - "4 http://en.wikipedia.org/wiki/Change_(philosophy) NaN \n", - "\n", - " url \\\n", - "0 NaN \n", - "1 \n", - "2 \n", - "3 \n", - "4 NaN \n", - "\n", - " ignore2 \\\n", - "0 NaN \n", - "1 \n", - "2 \n", - "3 \n", - "4 NaN \n", - "\n", - " abstract node1_label \\\n", - "0 luxuryBehavior, expenses or equipment that far... luxury \n", - "1 The potato is a root vegetable native to the A... potato \n", - "2 Mars is the fourth planet from the Sun and the... Mars \n", - "3 Dawn is the time that marks the beginning of t... dawn \n", - "4 changeprocess, event or action that deviates f... change \n", - "\n", - " node1_desc \\\n", - "0 Behavior, expenses or equipment that far excee... \n", - "1 species of plant \n", - "2 fourth planet from the Sun \n", - "3 time that marks the beginning of the twilight ... \n", - "4 process, event or action that deviates from th... \n", - "\n", - " abstract_firstSent \n", - "0 nan \n", - "1 The potato is a root vegetable native to the A... \n", - "2 Mars is the fourth planet from the Sun and the... \n", - "3 Dawn is the time that marks the beginning of t... \n", - "4 nan " - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "id": "multiple-offer", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getIndSentEmbeddings(sent, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode([sent])\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "id": "sustainable-breakdown", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.6419482231140137 s\n", - "0.5260367393493652 s\n" - ] - } - ], - "source": [ - "abstractsDF2['abs_emb'] = pd.Series(list(getSentEmbeddings(abstractsDF2.abstract, 'bert-base-nli-mean-tokens')))\n", - "abstractsDF2['abs_firstSent_emb'] = pd.Series(list(getSentEmbeddings(abstractsDF2.abstract_firstSent, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "usual-selling", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in abstractsDF2.iterrows():\n", - " masterEmbedDictMaster['abstract'][row['node1']] = row['abs_emb']\n", - " masterEmbedDictMaster['abstract_first_sent'][row['node1']] = row['abs_firstSent_emb']" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "id": "promising-owner", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.37706875801086426 s\n", - "0.3001420497894287 s\n", - "0.370746374130249 s\n", - "0.6896324157714844 s\n", - "0.33779358863830566 s\n", - "0.3965473175048828 s\n", - "0.3200962543487549 s\n", - "0.3489806652069092 s\n", - "0.3413431644439697 s\n", - "0.32114505767822266 s\n", - "0.3811838626861572 s\n", - "0.34630370140075684 s\n", - "0.37790727615356445 s\n", - "0.26860570907592773 s\n", - "0.3601953983306885 s\n", - "0.3713240623474121 s\n", - "0.34137582778930664 s\n", - "0.33736181259155273 s\n", - "0.37023448944091797 s\n", - "0.31382036209106445 s\n", - "0.35136938095092773 s\n", - "0.37309718132019043 s\n", - "0.33543896675109863 s\n", - "0.38199710845947266 s\n", - "0.3740067481994629 s\n", - "0.3278031349182129 s\n", - "0.32283997535705566 s\n", - "0.34000563621520996 s\n", - "0.31502628326416016 s\n", - "0.34996771812438965 s\n", - "0.3871273994445801 s\n", - "0.3487060070037842 s\n", - "0.35172486305236816 s\n", - "0.3280646800994873 s\n", - "0.3519773483276367 s\n", - "0.3354451656341553 s\n", - "0.3633551597595215 s\n", - "0.3226644992828369 s\n", - "0.33882975578308105 s\n", - "0.36072254180908203 s\n", - "0.3833494186401367 s\n", - "0.2929043769836426 s\n", - "0.32875680923461914 s\n", - "0.36334872245788574 s\n", - "0.34148168563842773 s\n", - "0.3569769859313965 s\n", - "0.37468576431274414 s\n", - "0.399524450302124 s\n", - "0.3516504764556885 s\n", - "0.333402156829834 s\n", - "0.3851203918457031 s\n", - "0.34867238998413086 s\n", - "0.3607771396636963 s\n", - "0.38669753074645996 s\n", - "0.33347272872924805 s\n", - "0.36278390884399414 s\n", - "0.3602781295776367 s\n", - "0.3322322368621826 s\n", - "0.36807823181152344 s\n", - "0.3407411575317383 s\n", - "0.3837134838104248 s\n", - "0.38958096504211426 s\n", - "0.3332521915435791 s\n", - "0.3331124782562256 s\n", - "0.35001134872436523 s\n", - "0.32433485984802246 s\n", - "0.36315059661865234 s\n", - "0.34323906898498535 s\n", - "0.3112339973449707 s\n", - "0.30588483810424805 s\n", - "0.30704236030578613 s\n", - "0.31201720237731934 s\n" - ] - } - ], - "source": [ - "for node in masterEmbCorrections_abs_set:\n", - " if node not in masterEmbedDictMaster['abstract']:\n", - " if node in labelsDict and node in descDict:\n", - " masterEmbedDictMaster['abstract'][node] = getIndSentEmbeddings(labelsDict[node] + ' ' + descDict[node], 'bert-base-nli-mean-tokens')[0]\n", - " elif node in labelsDict:\n", - " masterEmbedDictMaster['abstract'][node] = getIndSentEmbeddings(labelsDict[node], 'bert-base-nli-mean-tokens')[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "id": "acquired-manitoba", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.32213783264160156 s\n", - "0.357776403427124 s\n", - "0.37949395179748535 s\n", - "0.35210466384887695 s\n", - "0.28103041648864746 s\n", - "0.3626406192779541 s\n", - "0.35109710693359375 s\n", - "0.34203338623046875 s\n", - "0.32386112213134766 s\n", - "0.3354361057281494 s\n", - "0.3063056468963623 s\n", - "0.3441202640533447 s\n", - "0.32869935035705566 s\n", - "0.42442989349365234 s\n", - "0.37239527702331543 s\n", - "0.38650059700012207 s\n", - "0.3191685676574707 s\n", - "0.3609733581542969 s\n", - "0.3115823268890381 s\n", - "0.36015963554382324 s\n", - "0.3338603973388672 s\n", - "0.3487727642059326 s\n", - "0.3250617980957031 s\n", - "0.35145044326782227 s\n", - "0.33944034576416016 s\n", - "0.31502413749694824 s\n", - "0.3611795902252197 s\n", - "0.35285043716430664 s\n", - "0.3575010299682617 s\n", - "0.304781436920166 s\n", - "0.4003562927246094 s\n", - "0.3315858840942383 s\n", - "0.36008763313293457 s\n", - "0.36187100410461426 s\n", - "0.32981252670288086 s\n", - "0.3378865718841553 s\n", - "0.31662964820861816 s\n", - "0.32143092155456543 s\n", - "0.3152732849121094 s\n", - "0.38222813606262207 s\n", - "0.3846759796142578 s\n", - "0.33153700828552246 s\n", - "0.37013936042785645 s\n", - "0.33272790908813477 s\n", - "0.29526567459106445 s\n", - "0.3218040466308594 s\n", - "0.3795340061187744 s\n", - "0.3576061725616455 s\n", - "0.35764193534851074 s\n", - "0.36867713928222656 s\n", - "0.3807237148284912 s\n", - "0.33266758918762207 s\n", - "0.33878159523010254 s\n", - "0.38289546966552734 s\n", - "0.38695788383483887 s\n", - "0.33074188232421875 s\n", - "0.32749414443969727 s\n", - "0.33860039710998535 s\n", - "0.36585235595703125 s\n", - "0.33011841773986816 s\n", - "0.3293156623840332 s\n", - "0.3491702079772949 s\n", - "0.3720529079437256 s\n", - "0.3078622817993164 s\n", - "0.3844125270843506 s\n", - "0.32468104362487793 s\n", - "0.3186354637145996 s\n", - "0.3438723087310791 s\n", - "0.36643028259277344 s\n", - "0.34279680252075195 s\n", - "0.3625810146331787 s\n", - "0.35865354537963867 s\n", - "0.3503103256225586 s\n", - "0.37160682678222656 s\n", - "0.3268110752105713 s\n", - "0.2564544677734375 s\n", - "0.37343525886535645 s\n", - "0.33298277854919434 s\n" - ] - } - ], - "source": [ - "for node in masterEmbCorrections_abs_set:\n", - " if node not in masterEmbedDictMaster['abstract_first_sent']:\n", - " if node in labelsDict and node in descDict:\n", - " masterEmbedDictMaster['abstract_first_sent'][node] = getIndSentEmbeddings(labelsDict[node] + ' ' + descDict[node], 'bert-base-nli-mean-tokens')[0]\n", - " elif node in labelsDict:\n", - " masterEmbedDictMaster['abstract_first_sent'][node] = getIndSentEmbeddings(labelsDict[node], 'bert-base-nli-mean-tokens')[0]" - ] - }, - { - "cell_type": "markdown", - "id": "veterinary-thailand", - "metadata": {}, - "source": [ - "## Updated coverage details" - ] - }, - { - "cell_type": "code", - "execution_count": 145, - "id": "intimate-campus", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pair Coverage by new text_7_props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by new text_2_props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by new complex embeddings created for 19k retrofitting: 343\n", - "Pair Coverage by new transe embeddings created for 19k retrofitting: 343\n", - "Pair Coverage by new abstract embeddings created for 19k retrofitting: 339\n", - "Pair Coverage by new abstract_first_sent embeddings created for 19k retrofitting: 339\n" - ] - } - ], - "source": [ - "for key1 in masterEmbedKeys:\n", - " print(f\"Pair Coverage by new {key1} embeddings created for 19k retrofitting: {sum([row[0] in masterEmbedDictMaster[key1] and row[1] in masterEmbedDictMaster[key1] for row in wordsim_pairs])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "lovely-token", - "metadata": {}, - "outputs": [], - "source": [ - "for key1 in masterEmbedDictMaster.keys():\n", - " for key2 in masterEmbedDictMaster[key1].keys():\n", - " if type(masterEmbedDictMaster[key1][key2]) != list:\n", - " masterEmbedDictMaster[key1][key2] = masterEmbedDictMaster[key1][key2].tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "exact-surfing", - "metadata": {}, - "outputs": [], - "source": [ - "for key1 in ['complex', 'transe']:\n", - " json.dump(masterEmbedDictMaster[key1], open('../data/Master_P279_dataset/embeddings/'+key1+'_orig_embedding_dict_updated.json', 'w'))" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "behavioral-spain", - "metadata": {}, - "outputs": [], - "source": [ - "def countOverlap(source, target):\n", - " cnt = 0\n", - " for key1 in source:\n", - " if key1 in target:\n", - " cnt += 1\n", - " return cnt\n", - "p279QnodesList = set(json.load(open('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_nodes.json')))" - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "id": "hawaiian-brain", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
embeddingtotal countoverlap countCoverage Percentage
0text_7_props238930238889100.000000
1text_2_props238930238889100.000000
2complex23850023844899.815395
3transe23850023844899.815395
4abstract10596410591644.336910
5abstract_first_sent10596410591644.336910
\n", - "
" - ], - "text/plain": [ - " embedding total count overlap count Coverage Percentage\n", - "0 text_7_props 238930 238889 100.000000\n", - "1 text_2_props 238930 238889 100.000000\n", - "2 complex 238500 238448 99.815395\n", - "3 transe 238500 238448 99.815395\n", - "4 abstract 105964 105916 44.336910\n", - "5 abstract_first_sent 105964 105916 44.336910" - ] - }, - "execution_count": 147, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summArr = []\n", - "for key1 in masterEmbedDictMaster:\n", - " cnt = countOverlap(masterEmbedDictMaster[key1], p279QnodesList)\n", - " summArr.append([key1, len(masterEmbedDictMaster[key1]), cnt, cnt / len(p279QnodesList) * 100])\n", - "pd.DataFrame(summArr, columns=['embedding', 'total count', 'overlap count', 'Coverage Percentage'])" - ] - }, - { - "cell_type": "markdown", - "id": "greater-namibia", - "metadata": {}, - "source": [ - "# Concatenated Embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "fifth-associate", - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "embedDictMaster = {}\n", - "for key1 in ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent']:\n", - " embedDictMaster[key1] = json.load(open('../data/Master_P279_dataset/embeddings/'+key1+'_orig_embedding_dict_updated.json'))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "egyptian-sentence", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "text_7_props : 1024\n", - "text_2_props : 1024\n", - "complex : 200\n", - "transe : 200\n", - "abstract : 768\n", - "abstract_first_sent : 768\n" - ] - } - ], - "source": [ - "def determineEmbeddingLengths(embedDictMaster):\n", - " for key in embedDictMaster.keys():\n", - " embed_size = len(next(iter(embedDictMaster[key].values())))\n", - " print(key,\": \",embed_size)\n", - "determineEmbeddingLengths(embedDictMaster)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "perfect-extension", - "metadata": {}, - "outputs": [], - "source": [ - "def fillCoverage(embedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " wordSim353AnnotDF_set = set(wordSim353AnnotDF_New['word1_kg_id'].to_list() + wordSim353AnnotDF_New['word2_kg_id'].to_list())\n", - " embed_size = len(embedDict[next(iter(embedDict))])\n", - "# print(embed_size)\n", - " count = 0\n", - " for word in wordSim353AnnotDF_set:\n", - " if word not in embedDict:\n", - " embedDict[word] = np.zeros((embed_size))\n", - " count += 1\n", - " print(f\"Added {count} corrections\")\n", - " return embedDict\n", - "\n", - "def deserializeEmbeddingDict(embedDict):\n", - " for key2 in embedDict.keys():\n", - " embedDict[key2] = np.array(embedDict[key2])\n", - " return embedDict\n", - "\n", - "def serializeEmbeddingDict(embedDict):\n", - " for key2 in embedDict.keys():\n", - " embedDict[key2] = embedDict[key2].tolist() if type(embedDict[key2]) != list else embedDict[key2]\n", - " return embedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "removable-point", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Added 11 corrections\n", - "Added 11 corrections\n", - "Added 0 corrections\n", - "Added 0 corrections\n", - "Added 4 corrections\n", - "Added 4 corrections\n" - ] - } - ], - "source": [ - "for key1 in embedDictMaster.keys():\n", - " embedDictMaster[key1] = deserializeEmbeddingDict(embedDictMaster[key1])\n", - "# Fill Coverage of embedding dictionaries\n", - "for key1 in embedDictMaster.keys():\n", - " embedDictMaster[key1] = fillCoverage(embedDictMaster[key1])" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "productive-indiana", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "text_7_props 238941\n", - "text_2_props 238941\n", - "complex 238941\n", - "transe 238941\n", - "abstract 238941\n", - "abstract_first_sent 238941\n" - ] - } - ], - "source": [ - "for key1 in embedDictMaster.keys():\n", - " print(key1, len(next(iter(embedDictMaster.values()))))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "mechanical-retro", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ready-financing", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "prime-hometown", - "metadata": {}, - "source": [ - "# Retrofitting sample" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "tight-civilization", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchNeighbours(df):\n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row.bert2SentSim))\n", - " \n", - " if row.node2 not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row.bert2SentSim))\n", - " print(max([len(neigh) for neigh in neighboursDict.values()]))\n", - " return neighboursDict" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "exciting-circle", - "metadata": {}, - "outputs": [], - "source": [ - "def retrofit(embedDict, neighDict, weightCase, weightAssignment=False):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - "# assert len(neighbs) == 1\n", - " if weightAssignment:\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " else:\n", - " sumOfSims = sum([1 for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] for neighb in neighbs])\n", - " \n", - " if weightCase == 1:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sumOfEmbs) / ((len(neighbs)) + sumOfSims)\n", - " elif weightCase == 2:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " elif weightCase == 0.5:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sumOfEmbs) / ((len(neighbs))**0.5 + sumOfSims)\n", - " else:\n", - " raise\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "hollywood-prisoner", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import classification_report\n", - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - "LABELS = ['I','U','M']\n", - "def fetchCorrelationResults(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "# print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - "# wordSim353AnnotDF_New2 = wordSim353AnnotDF_New\n", - " wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - " wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - " responseDict = {}\n", - " responseDict['wordSimMissingSet'] = wordSimMissingSet\n", - " responseDict['coveredPairs'] = len(wordSim353AnnotDF_New2)\n", - " responseDict['totalPairs'] = len(wordSim353AnnotDF_New)\n", - " \n", - "# wordSimMissingSet\n", - "# print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textOld'] == -1, 'textOld'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textOld'] != -1]['textOld'].mean()\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textNew'] == -1, 'textNew'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textNew'] != -1]['textNew'].mean()\n", - " \n", - " # Logic 1: Scale min,max value to 1,4 strictly\n", - "# min1, max1 = wordSim353AnnotDF_New['textOld'].min(), wordSim353AnnotDF_New['textOld'].max()\n", - "# min2, max2 = wordSim353AnnotDF_New['textNew'].min(), wordSim353AnnotDF_New['textNew'].max()\n", - "# wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * (p - min1) / (max1 - min1))\n", - "# wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * (p - min2) / (max2 - min2))\n", - " \n", - " # Logic 2: Scale abs value to 1,4 strictly\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * abs(p))\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * abs(p))\n", - "\n", - " \n", - "# print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "# print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " \n", - "# print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - "# print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " responseDict['KT_old_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_new_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_old_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['KT_new_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['old_acc'] = accuracy_score(wordSim353AnnotDF_New['textOld'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " responseDict['new_acc'] = accuracy_score(wordSim353AnnotDF_New['textNew'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " \n", - " responseDict['class_rep_old'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), output_dict=True)\n", - " responseDict['class_rep_new'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), output_dict=True)\n", - " \n", - " cm_old = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), labels=LABELS)\n", - " cm_new = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), labels=LABELS)\n", - " \n", - " responseDict['cm_old'] = cm_old\n", - " responseDict['cm_new'] = cm_new\n", - " \n", - " return responseDict" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "severe-explosion", - "metadata": {}, - "outputs": [], - "source": [ - "neighDictMaster, embedDictMaster = {}, {}" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "decreased-syndication", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "39218\n" - ] - } - ], - "source": [ - "neighDictMaster['19k_childPar'] = fetchNeighbours(p279ChildPar)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "rocky-criterion", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster['complex'] = complexEmb\n", - "embedDictMaster['transe'] = transeEmb" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "apparent-sapphire", - "metadata": {}, - "outputs": [], - "source": [ - "for key1 in embedDictMaster.keys():\n", - " for key2 in embedDictMaster[key1].keys():\n", - " embedDictMaster[key1][key2] = np.array(embedDictMaster[key1][key2])" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "precise-oxygen", - "metadata": {}, - "outputs": [], - "source": [ - "embList = list(embedDictMaster.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "identical-keyboard", - "metadata": {}, - "outputs": [], - "source": [ - "basisList = list(neighDictMaster.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "aging-flavor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['19k_childPar'])" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "neighDictMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "amended-remove", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDictMaster, responsesDictMaster = {}, {}" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "surgical-insurance", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7817a00dcf3c412b92a7c5ac75517168", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/1 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
EmbeddingBasisWeightWeightednessIteration NumOld AccNew AccIncreasePairs CoveredOld I Precision...Old U PrecisionOld U RecallOld U F1-ScoreNew I PrecisionNew I RecallNew I F1-ScoreNew U PrecisionNew U RecallNew U F1-ScoreRank
0complex19k_childPar1True160.75581464.2441863.4883722911.000000...0.4331210.6601940.5230771.0000000.400.5714290.4634150.5533980.5044252
20transe19k_childPar1True162.50000065.6976743.1976742910.888889...0.3970590.2621360.3157890.8333330.500.6250000.4500000.1747570.2517480
1complex19k_childPar1True264.24418667.1511632.9069772911.000000...0.4634150.5533980.5044251.0000000.500.6666670.4950500.4854370.4901964
11complex19k_childPar2True261.91860563.6627911.7441862911.000000...0.4444440.6601940.5312501.0000000.450.6206900.4589040.6504850.53815313
10complex19k_childPar2True160.75581461.9186051.1627912911.000000...0.4331210.6601940.5230771.0000000.400.5714290.4444440.6601940.53125012
2complex19k_childPar1True367.15116367.7325580.5813952911.000000...0.4950500.4854370.4901960.9090910.500.6451610.5119050.4174760.4598931
4complex19k_childPar1True567.15116367.7325580.5813952910.916667...0.4929580.3398060.4022990.9166670.550.6875000.5079370.3106800.3855425
36transe19k_childPar2True762.50000063.0813950.5813952910.846154...0.3518520.1844660.2420380.8461540.550.6666670.3653850.1844660.2451616
30transe19k_childPar2True162.50000063.0813950.5813952910.888889...0.3970590.2621360.3157890.9000000.450.6000000.4000000.2524270.30952417
22transe19k_childPar1True364.82558165.4069770.5813952910.750000...0.3939390.1262140.1911760.7500000.750.7500000.4000000.1165050.1804513
38transe19k_childPar2True963.08139563.3720930.2906982910.785714...0.3725490.1844660.2467530.7857140.550.6470590.3800000.1844660.2483668
33transe19k_childPar2True462.79069863.0813950.2906982910.900000...0.3833330.2233010.2822090.8461540.550.6666670.3750000.2038830.26415114
18complex19k_childPar2True963.08139563.0813950.0000002910.909091...0.4444440.5436890.4890830.9090910.500.6451610.4444440.5436890.48908319
37transe19k_childPar2True863.08139563.0813950.0000002910.846154...0.3653850.1844660.2451610.7857140.550.6470590.3725490.1844660.2467537
32transe19k_childPar2True362.79069862.7906980.0000002910.900000...0.3870970.2330100.2909090.9000000.450.6000000.3833330.2233010.28220912
23transe19k_childPar1True465.40697765.4069770.0000002910.750000...0.4000000.1165050.1804510.6521740.750.6976740.4444440.1165050.1846151
39transe19k_childPar2True1063.37209363.3720930.0000002910.785714...0.3800000.1844660.2483660.7857140.550.6470590.3800000.1844660.2483669
15complex19k_childPar2True663.66279163.6627910.0000002911.000000...0.4552240.5922330.5147681.0000000.450.6206900.4538460.5728160.50643817
14complex19k_childPar2True563.66279163.6627910.0000002911.000000...0.4571430.6213590.5267491.0000000.450.6206900.4552240.5922330.51476816
13complex19k_childPar2True463.66279163.6627910.0000002911.000000...0.4577460.6310680.5306121.0000000.450.6206900.4571430.6213590.52674915
12complex19k_childPar2True363.66279163.6627910.0000002911.000000...0.4589040.6504850.5381531.0000000.450.6206900.4577460.6310680.53061214
17complex19k_childPar2True863.37209363.081395-0.2906982910.909091...0.4488190.5533980.4956520.9090910.500.6451610.4444440.5436890.48908318
16complex19k_childPar2True763.66279163.372093-0.2906982911.000000...0.4538460.5728160.5064380.9090910.500.6451610.4488190.5533980.4956529
35transe19k_childPar2True662.79069862.500000-0.2906982910.846154...0.3636360.1941750.2531650.8461540.550.6666670.3518520.1844660.2420385
34transe19k_childPar2True563.08139562.790698-0.2906982910.846154...0.3750000.2038830.2641510.8461540.550.6666670.3636360.1941750.25316515
31transe19k_childPar2True263.08139562.790698-0.2906982910.900000...0.4000000.2524270.3095240.9000000.450.6000000.3870970.2330100.29090911
28transe19k_childPar1True960.75581460.465116-0.2906982910.394737...0.3684210.0679610.1147540.3658540.750.4918030.3888890.0679610.11570213
19complex19k_childPar2True1063.08139562.790698-0.2906982910.909091...0.4444440.5436890.4890830.9000000.450.6000000.4444440.5436890.48908310
26transe19k_childPar1True762.20930261.627907-0.5813952910.428571...0.4285710.0873790.1451610.4166670.750.5357140.4000000.0776700.1300814
29transe19k_childPar1True1060.46511659.883721-0.5813952910.365854...0.3888890.0679610.1157020.3333330.750.4615380.4117650.0679610.11666716
8complex19k_childPar1True965.11627964.534884-0.5813952910.785714...0.4423080.2233010.2967740.7857140.550.6470590.4166670.1941750.2649010
3complex19k_childPar1True467.73255867.151163-0.5813952910.909091...0.5119050.4174760.4598930.9166670.550.6875000.4929580.3398060.4022993
6complex19k_childPar1True766.56976765.988372-0.5813952910.916667...0.4754100.2815530.3536590.8461540.550.6666670.4642860.2524270.3270447
7complex19k_childPar1True865.98837265.116279-0.8720932910.846154...0.4642860.2524270.3270440.7857140.550.6470590.4423080.2233010.2967748
21transe19k_childPar1True265.69767464.825581-0.8720932910.833333...0.4500000.1747570.2517480.7500000.600.6666670.3939390.1262140.1911762
27transe19k_childPar1True861.62790760.755814-0.8720932910.416667...0.4000000.0776700.1300810.3947370.750.5172410.3684210.0679610.11475410
25transe19k_childPar1True663.37209362.209302-1.1627912910.468750...0.4545450.0970870.1600000.4285710.750.5454550.4285710.0873790.14516119
5complex19k_childPar1True667.73255866.569767-1.1627912910.916667...0.5079370.3106800.3855420.9166670.550.6875000.4754100.2815530.3536596
9complex19k_childPar1True1064.53488463.081395-1.4534882910.785714...0.4166670.1941750.2649010.6875000.550.6111110.3777780.1650490.22973011
24transe19k_childPar1True565.40697763.372093-2.0348842910.652174...0.4444440.1165050.1846150.4687500.750.5769230.4545450.0970870.16000018
\n", - "

40 rows × 22 columns

\n", - "" - ], - "text/plain": [ - " Embedding Basis Weight Weightedness Iteration Num Old Acc \\\n", - "0 complex 19k_childPar 1 True 1 60.755814 \n", - "20 transe 19k_childPar 1 True 1 62.500000 \n", - "1 complex 19k_childPar 1 True 2 64.244186 \n", - "11 complex 19k_childPar 2 True 2 61.918605 \n", - "10 complex 19k_childPar 2 True 1 60.755814 \n", - "2 complex 19k_childPar 1 True 3 67.151163 \n", - "4 complex 19k_childPar 1 True 5 67.151163 \n", - "36 transe 19k_childPar 2 True 7 62.500000 \n", - "30 transe 19k_childPar 2 True 1 62.500000 \n", - "22 transe 19k_childPar 1 True 3 64.825581 \n", - "38 transe 19k_childPar 2 True 9 63.081395 \n", - "33 transe 19k_childPar 2 True 4 62.790698 \n", - "18 complex 19k_childPar 2 True 9 63.081395 \n", - "37 transe 19k_childPar 2 True 8 63.081395 \n", - "32 transe 19k_childPar 2 True 3 62.790698 \n", - "23 transe 19k_childPar 1 True 4 65.406977 \n", - "39 transe 19k_childPar 2 True 10 63.372093 \n", - "15 complex 19k_childPar 2 True 6 63.662791 \n", - "14 complex 19k_childPar 2 True 5 63.662791 \n", - "13 complex 19k_childPar 2 True 4 63.662791 \n", - "12 complex 19k_childPar 2 True 3 63.662791 \n", - "17 complex 19k_childPar 2 True 8 63.372093 \n", - "16 complex 19k_childPar 2 True 7 63.662791 \n", - "35 transe 19k_childPar 2 True 6 62.790698 \n", - "34 transe 19k_childPar 2 True 5 63.081395 \n", - "31 transe 19k_childPar 2 True 2 63.081395 \n", - "28 transe 19k_childPar 1 True 9 60.755814 \n", - "19 complex 19k_childPar 2 True 10 63.081395 \n", - "26 transe 19k_childPar 1 True 7 62.209302 \n", - "29 transe 19k_childPar 1 True 10 60.465116 \n", - "8 complex 19k_childPar 1 True 9 65.116279 \n", - "3 complex 19k_childPar 1 True 4 67.732558 \n", - "6 complex 19k_childPar 1 True 7 66.569767 \n", - "7 complex 19k_childPar 1 True 8 65.988372 \n", - "21 transe 19k_childPar 1 True 2 65.697674 \n", - "27 transe 19k_childPar 1 True 8 61.627907 \n", - "25 transe 19k_childPar 1 True 6 63.372093 \n", - "5 complex 19k_childPar 1 True 6 67.732558 \n", - "9 complex 19k_childPar 1 True 10 64.534884 \n", - "24 transe 19k_childPar 1 True 5 65.406977 \n", - "\n", - " New Acc Increase Pairs Covered Old I Precision ... Old U Precision \\\n", - "0 64.244186 3.488372 291 1.000000 ... 0.433121 \n", - "20 65.697674 3.197674 291 0.888889 ... 0.397059 \n", - "1 67.151163 2.906977 291 1.000000 ... 0.463415 \n", - "11 63.662791 1.744186 291 1.000000 ... 0.444444 \n", - "10 61.918605 1.162791 291 1.000000 ... 0.433121 \n", - "2 67.732558 0.581395 291 1.000000 ... 0.495050 \n", - "4 67.732558 0.581395 291 0.916667 ... 0.492958 \n", - "36 63.081395 0.581395 291 0.846154 ... 0.351852 \n", - "30 63.081395 0.581395 291 0.888889 ... 0.397059 \n", - "22 65.406977 0.581395 291 0.750000 ... 0.393939 \n", - "38 63.372093 0.290698 291 0.785714 ... 0.372549 \n", - "33 63.081395 0.290698 291 0.900000 ... 0.383333 \n", - "18 63.081395 0.000000 291 0.909091 ... 0.444444 \n", - "37 63.081395 0.000000 291 0.846154 ... 0.365385 \n", - "32 62.790698 0.000000 291 0.900000 ... 0.387097 \n", - "23 65.406977 0.000000 291 0.750000 ... 0.400000 \n", - "39 63.372093 0.000000 291 0.785714 ... 0.380000 \n", - "15 63.662791 0.000000 291 1.000000 ... 0.455224 \n", - "14 63.662791 0.000000 291 1.000000 ... 0.457143 \n", - "13 63.662791 0.000000 291 1.000000 ... 0.457746 \n", - "12 63.662791 0.000000 291 1.000000 ... 0.458904 \n", - "17 63.081395 -0.290698 291 0.909091 ... 0.448819 \n", - "16 63.372093 -0.290698 291 1.000000 ... 0.453846 \n", - "35 62.500000 -0.290698 291 0.846154 ... 0.363636 \n", - "34 62.790698 -0.290698 291 0.846154 ... 0.375000 \n", - "31 62.790698 -0.290698 291 0.900000 ... 0.400000 \n", - "28 60.465116 -0.290698 291 0.394737 ... 0.368421 \n", - "19 62.790698 -0.290698 291 0.909091 ... 0.444444 \n", - "26 61.627907 -0.581395 291 0.428571 ... 0.428571 \n", - "29 59.883721 -0.581395 291 0.365854 ... 0.388889 \n", - "8 64.534884 -0.581395 291 0.785714 ... 0.442308 \n", - "3 67.151163 -0.581395 291 0.909091 ... 0.511905 \n", - "6 65.988372 -0.581395 291 0.916667 ... 0.475410 \n", - "7 65.116279 -0.872093 291 0.846154 ... 0.464286 \n", - "21 64.825581 -0.872093 291 0.833333 ... 0.450000 \n", - "27 60.755814 -0.872093 291 0.416667 ... 0.400000 \n", - "25 62.209302 -1.162791 291 0.468750 ... 0.454545 \n", - "5 66.569767 -1.162791 291 0.916667 ... 0.507937 \n", - "9 63.081395 -1.453488 291 0.785714 ... 0.416667 \n", - "24 63.372093 -2.034884 291 0.652174 ... 0.444444 \n", - "\n", - " Old U Recall Old U F1-Score New I Precision New I Recall \\\n", - "0 0.660194 0.523077 1.000000 0.40 \n", - "20 0.262136 0.315789 0.833333 0.50 \n", - "1 0.553398 0.504425 1.000000 0.50 \n", - "11 0.660194 0.531250 1.000000 0.45 \n", - "10 0.660194 0.523077 1.000000 0.40 \n", - "2 0.485437 0.490196 0.909091 0.50 \n", - "4 0.339806 0.402299 0.916667 0.55 \n", - "36 0.184466 0.242038 0.846154 0.55 \n", - "30 0.262136 0.315789 0.900000 0.45 \n", - "22 0.126214 0.191176 0.750000 0.75 \n", - "38 0.184466 0.246753 0.785714 0.55 \n", - "33 0.223301 0.282209 0.846154 0.55 \n", - "18 0.543689 0.489083 0.909091 0.50 \n", - "37 0.184466 0.245161 0.785714 0.55 \n", - "32 0.233010 0.290909 0.900000 0.45 \n", - "23 0.116505 0.180451 0.652174 0.75 \n", - "39 0.184466 0.248366 0.785714 0.55 \n", - "15 0.592233 0.514768 1.000000 0.45 \n", - "14 0.621359 0.526749 1.000000 0.45 \n", - "13 0.631068 0.530612 1.000000 0.45 \n", - "12 0.650485 0.538153 1.000000 0.45 \n", - "17 0.553398 0.495652 0.909091 0.50 \n", - "16 0.572816 0.506438 0.909091 0.50 \n", - "35 0.194175 0.253165 0.846154 0.55 \n", - "34 0.203883 0.264151 0.846154 0.55 \n", - "31 0.252427 0.309524 0.900000 0.45 \n", - "28 0.067961 0.114754 0.365854 0.75 \n", - "19 0.543689 0.489083 0.900000 0.45 \n", - "26 0.087379 0.145161 0.416667 0.75 \n", - "29 0.067961 0.115702 0.333333 0.75 \n", - "8 0.223301 0.296774 0.785714 0.55 \n", - "3 0.417476 0.459893 0.916667 0.55 \n", - "6 0.281553 0.353659 0.846154 0.55 \n", - "7 0.252427 0.327044 0.785714 0.55 \n", - "21 0.174757 0.251748 0.750000 0.60 \n", - "27 0.077670 0.130081 0.394737 0.75 \n", - "25 0.097087 0.160000 0.428571 0.75 \n", - "5 0.310680 0.385542 0.916667 0.55 \n", - "9 0.194175 0.264901 0.687500 0.55 \n", - "24 0.116505 0.184615 0.468750 0.75 \n", - "\n", - " New I F1-Score New U Precision New U Recall New U F1-Score Rank \n", - "0 0.571429 0.463415 0.553398 0.504425 2 \n", - "20 0.625000 0.450000 0.174757 0.251748 0 \n", - "1 0.666667 0.495050 0.485437 0.490196 4 \n", - "11 0.620690 0.458904 0.650485 0.538153 13 \n", - "10 0.571429 0.444444 0.660194 0.531250 12 \n", - "2 0.645161 0.511905 0.417476 0.459893 1 \n", - "4 0.687500 0.507937 0.310680 0.385542 5 \n", - "36 0.666667 0.365385 0.184466 0.245161 6 \n", - "30 0.600000 0.400000 0.252427 0.309524 17 \n", - "22 0.750000 0.400000 0.116505 0.180451 3 \n", - "38 0.647059 0.380000 0.184466 0.248366 8 \n", - "33 0.666667 0.375000 0.203883 0.264151 14 \n", - "18 0.645161 0.444444 0.543689 0.489083 19 \n", - "37 0.647059 0.372549 0.184466 0.246753 7 \n", - "32 0.600000 0.383333 0.223301 0.282209 12 \n", - "23 0.697674 0.444444 0.116505 0.184615 1 \n", - "39 0.647059 0.380000 0.184466 0.248366 9 \n", - "15 0.620690 0.453846 0.572816 0.506438 17 \n", - "14 0.620690 0.455224 0.592233 0.514768 16 \n", - "13 0.620690 0.457143 0.621359 0.526749 15 \n", - "12 0.620690 0.457746 0.631068 0.530612 14 \n", - "17 0.645161 0.444444 0.543689 0.489083 18 \n", - "16 0.645161 0.448819 0.553398 0.495652 9 \n", - "35 0.666667 0.351852 0.184466 0.242038 5 \n", - "34 0.666667 0.363636 0.194175 0.253165 15 \n", - "31 0.600000 0.387097 0.233010 0.290909 11 \n", - "28 0.491803 0.388889 0.067961 0.115702 13 \n", - "19 0.600000 0.444444 0.543689 0.489083 10 \n", - "26 0.535714 0.400000 0.077670 0.130081 4 \n", - "29 0.461538 0.411765 0.067961 0.116667 16 \n", - "8 0.647059 0.416667 0.194175 0.264901 0 \n", - "3 0.687500 0.492958 0.339806 0.402299 3 \n", - "6 0.666667 0.464286 0.252427 0.327044 7 \n", - "7 0.647059 0.442308 0.223301 0.296774 8 \n", - "21 0.666667 0.393939 0.126214 0.191176 2 \n", - "27 0.517241 0.368421 0.067961 0.114754 10 \n", - "25 0.545455 0.428571 0.087379 0.145161 19 \n", - "5 0.687500 0.475410 0.281553 0.353659 6 \n", - "9 0.611111 0.377778 0.165049 0.229730 11 \n", - "24 0.576923 0.454545 0.097087 0.160000 18 \n", - "\n", - "[40 rows x 22 columns]" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "resultsDF.sort_values(by=['Increase'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "utility-globe", - "metadata": {}, - "outputs": [], - "source": [ - "resultsDF.to_csv('../data/retrofitting/masterRetro_Aug20_2021.csv', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "crazy-scene", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv2", - "language": "python", - "name": "kgtkenv2" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "288px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Archived/Master P279-Dataset Generation.ipynb b/Archived/Master P279-Dataset Generation.ipynb deleted file mode 100644 index a479fcd..0000000 --- a/Archived/Master P279-Dataset Generation.ipynb +++ /dev/null @@ -1,5729 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "individual-diamond", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import scipy.stats as stats\n", - "import json\n", - "from tqdm.notebook import tqdm\n", - "import gzip" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "adequate-steering", - "metadata": {}, - "outputs": [], - "source": [ - "# Filepaths\n", - "\n", - "# DWD Files\n", - "# DERIVED_IS_COUNTS_FILE = '../data/derived.dwd_isa_class_count.compact.tsv'\n", - "LABELS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/labels.en.tsv.gz\"\n", - "DESCRIPTIONS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/descriptions.en.tsv.gz\"\n", - "P279_EDGES_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/derived.P279.tsv.gz\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "documentary-malpractice", - "metadata": {}, - "outputs": [], - "source": [ - "P279_CHILD_PAR_OP_FILE = \"../data/basis/P279_ChildPar.all-distilroberta-v1.csv\"" - ] - }, - { - "cell_type": "markdown", - "id": "funny-florist", - "metadata": {}, - "source": [ - "# Other Utility Files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "genuine-memorabilia", - "metadata": {}, - "outputs": [], - "source": [ - "# Alt\n", - "# !zcat ../data/derived.dwd_isa_class_count.compact.tsv.gz | cut -f 3 | tail -n +2 | sed -e 's/|/\\n/g' -e 's/:/\\t/g' | sort | uniq > ../data/class-counts.tsv" - ] - }, - { - "cell_type": "markdown", - "id": "threatened-pacific", - "metadata": {}, - "source": [ - "# P279 ChildPar Dataset\n", - "\n", - "Use descriptions wherever available, if not use labels, if not skip rows\n", - "\n", - "Old Version Details:\n", - "[Wikidata OS File (Wikidata 2021-02-15 DWD version)](https://drive.google.com/drive/folders/168j3OfdVGXMTKcs6VyH8rq_p0n6w0GGj?usp=sharing)\n", - "\n", - "There are 721983 rows in P279 dataset, 606996 unique number of nodes in this dataset, 511841 labels and 299844 descriptions\n", - "\n", - "There are 373463 rows in P279 dataset s.t. both nodes have either a label or a description. There are 373463 rows where both nodes have labels. There are 373463 rows where both nodes have descriptions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "polyphonic-county", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk filter -i ../data/wikidataos.for.text-embedding.tsv.gz -p \";P279;\" -o ../data/P279_dataset/wikidata-P279.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "silent-liver", - "metadata": {}, - "outputs": [], - "source": [ - "p279DF = pd.read_csv(P279_EDGES_FILE,sep='\\t')\n", - "p279DFNodesSet = set(p279DF.node1.to_list() + p279DF.node2.to_list())\n", - "labelsDF = pd.read_csv(LABELS_FILE, sep='\\t')\n", - "descriptionsDF = pd.read_csv(DESCRIPTIONS_FILE, compression='gzip', sep='\\t')\n", - "labelsDF = labelsDF[labelsDF.node1.apply(lambda p: p in p279DFNodesSet)]\n", - "descriptionsDF = descriptionsDF[descriptionsDF.node1.apply(lambda p: p in p279DFNodesSet)]" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "cubic-taxation", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "There are 3077831 rows in P279 dataset, 2503943 unique number of nodes in this dataset, 2406580 labels and 1369514 descriptions\n" - ] - } - ], - "source": [ - "print(f\"There are {len(p279DF)} rows in P279 dataset, {len(p279DFNodesSet)} unique number of nodes in this dataset, {len(labelsDF)} labels and {len(descriptionsDF)} descriptions\")" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "damaged-driving", - "metadata": {}, - "outputs": [], - "source": [ - "p279DFNew = p279DF\n", - "temp1 = p279DFNew.set_index('node1').join(labelsDF.set_index('node1'), rsuffix='_label')\n", - "temp1 = temp1[['id','label','node2','node2_label']]\n", - "temp2 = temp1.reset_index().set_index('node2').join(labelsDF.set_index('node1'), rsuffix='_label2')\n", - "temp3 = temp2[['id','node1','label','node2', 'node2_label']].rename(columns={'node2_label': 'node1_label', 'node2':'node2_label'}).reset_index().rename(columns={'index':'node2'})\n", - "temp3 = temp3[['id','node1','node1_label','label','node2','node2_label']]\n", - "temp3['node1_label'] = temp3['node1_label'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "temp3['node2_label'] = temp3['node2_label'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "hierDF = temp3.copy()\n", - "\n", - "p279DFNew = hierDF\n", - "temp1 = p279DFNew.set_index('node1').join(descriptionsDF.set_index('node1'), rsuffix='_desc')\n", - "temp1 = temp1[['id','label','node2','node1_label','node2_label', 'node2_desc']]\n", - "temp2 = temp1.reset_index().set_index('node2').join(descriptionsDF.set_index('node1'), rsuffix='_desc2')\n", - "temp3 = temp2[['id','node1','label','node2', 'node1_label', 'node2_label', 'node2_desc']].rename(columns={'node2_desc': 'node1_desc', 'node2':'node2_desc'}).reset_index().rename(columns={'index':'node2'})\n", - "temp3['node1_desc'] = temp3['node1_desc'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "temp3['node2_desc'] = temp3['node2_desc'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "hierDF = temp3.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dress-yellow", - "metadata": {}, - "outputs": [], - "source": [ - "def combineLabDesc(row, nodeNum):\n", - " if type(row['node'+str(nodeNum)+'_desc']) == str and type(row['node'+str(nodeNum)+'_label']) == str :\n", - " return row['node'+str(nodeNum)+'_label'] + ' ' + row['node'+str(nodeNum)+'_desc']\n", - " else:\n", - " return None\n", - "hierDF['node1_labDesc'] = hierDF.apply(combineLabDesc, axis=1, args=(1,))\n", - "hierDF['node2_labDesc'] = hierDF.apply(combineLabDesc, axis=1, args=(2,))\n", - "hierDF = hierDF[~hierDF['node1_labDesc'].isna()]\n", - "hierDF = hierDF[~hierDF['node2_labDesc'].isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "adaptive-measure", - "metadata": {}, - "outputs": [], - "source": [ - "print(f\"There are {len(hierDF)} rows in P279 dataset s.t. both nodes have either a label or a description. \\\n", - " There are {len(hierDF[(~hierDF.node1_label.isna()) & (~hierDF.node2_label.isna())])} rows where both nodes have labels. \\\n", - " There are {len(hierDF[(~hierDF.node1_desc.isna()) & (~hierDF.node2_desc.isna())])} rows where both nodes have descriptions.\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "disturbed-adaptation", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dominant-crowd", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "robust-translator", - "metadata": {}, - "outputs": [], - "source": [ - "modelName = 'sentence-transformers/all-distilroberta-v1'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "difficult-applicant", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = hierDF.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "objective-cowboy", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF.node1_labDesc.isna().sum(), hierDF.node2_labDesc.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "charged-finland", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF['node1_emb'] = pd.Series(list(getSentEmbeddings(hierDF.node1_labDesc, modelName)))\n", - "hierDF['node2_emb'] = pd.Series(list(getSentEmbeddings(hierDF.node2_labDesc, modelName)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "silver-variation", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "wanted-eclipse", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF.node1_emb.isna().sum(), hierDF.node2_emb.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "varying-landing", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF['similarity_value'] = hierDF.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "deadly-guard", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF.to_csv(P279_CHILD_PAR_OP_FILE)" - ] - }, - { - "cell_type": "markdown", - "id": "higher-merchandise", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## Filter based on direct P279 counts" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "ordered-basin", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "hierDF = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "thirty-display", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "373463" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "recorded-major", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dirP279Counts = pd.read_csv('../data/Master_P279_dataset/hierDF_direct_P279_counts.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "upper-nothing", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1
0Q1000267
1Q10003711
2Q10004710
3Q1000520084
4Q1000529381
\n", - "
" - ], - "text/plain": [ - " node2 node1\n", - "0 Q100026 7\n", - "1 Q1000371 1\n", - "2 Q100047 10\n", - "3 Q100052008 4\n", - "4 Q100052938 1" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dirP279Counts.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "sunrise-motorcycle", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dirP279Counts = dirP279Counts.set_index('node2')['node1']" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "federal-diabetes", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dirP279Counts1 = dirP279Counts[dirP279Counts >= 7]" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "superior-today", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "node2\n", - "Q100026 7\n", - "Q1000371 1\n", - "Q100047 10\n", - "Q100052008 4\n", - "Q100052938 1\n", - "Name: node1, dtype: int64" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dirP279Counts.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "virgin-freedom", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 109631.000000\n", - "mean 5.686056\n", - "std 124.365173\n", - "min 1.000000\n", - "25% 1.000000\n", - "50% 2.000000\n", - "75% 4.000000\n", - "max 39217.000000\n", - "Name: node1, dtype: float64" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dirP279Counts.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "received-magic", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dirP279CountsNeededSet = set(dirP279Counts1.index.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "damaged-market", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "hierDF_dirP279_filtered = hierDF[hierDF.node2.apply(lambda p: p in dirP279CountsNeededSet)]" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "third-queensland", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "4864" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(hierDF_dirP279_filtered.node1_desc == hierDF_dirP279_filtered.node2_desc).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "requested-prime", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "hierDF_dirP279_filtered1 = hierDF_dirP279_filtered[hierDF_dirP279_filtered.node1_desc != hierDF_dirP279_filtered.node2_desc]" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "intermediate-marsh", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(263907, 259043)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_dirP279_filtered), len(hierDF_dirP279_filtered1)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "scientific-martin", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "hierDF_dirP279_filtered1.to_csv('../data/Master_P279_dataset/P279ChildPar_dirP279_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "contained-direction", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "hierDF_dirP279_filtered1[['id', 'node1', 'label', 'node2']].to_csv('../data/Master_P279_dataset/P279ChildPar_dirP279_filtered_baremetal.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "capital-occasion", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.read_csv('../data/Master_P279_dataset/P279ChildPar_dirP279_filtered_baremetal.csv')[['id', 'node1', 'label', 'node2']].to_csv('../data/Master_P279_dataset/P279ChildPar_dirP279_filtered_baremetal.tsv', index=False, sep='\\t')" - ] - }, - { - "cell_type": "markdown", - "id": "plain-jurisdiction", - "metadata": {}, - "source": [ - "## Filter based on transitive P279 counts" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "broken-intermediate", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "trained-parent", - "metadata": {}, - "outputs": [], - "source": [ - "transitive_P279Counts = pd.read_csv('../data/class-counts.tsv', sep='\\t', header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "tutorial-buddy", - "metadata": {}, - "outputs": [], - "source": [ - "transitive_P279Counts = transitive_P279Counts.set_index(0)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "great-engine", - "metadata": {}, - "outputs": [], - "source": [ - "transitive_P279Counts = transitive_P279Counts[transitive_P279Counts >= 7]" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "matched-dance", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 6.853900e+04\n", - "mean 2.466702e+04\n", - "std 5.315130e+05\n", - "min 7.000000e+00\n", - "25% 1.200000e+01\n", - "50% 2.600000e+01\n", - "75% 9.600000e+01\n", - "max 4.157572e+07\n", - "Name: 1, dtype: float64" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "transitive_P279Counts.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "medical-hierarchy", - "metadata": {}, - "outputs": [], - "source": [ - "transitive_P279CountsNeededSet = set(transitive_P279Counts.index.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "peaceful-protocol", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered = hierDF[hierDF.node2.apply(lambda p: p in transitive_P279CountsNeededSet)]" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "threaded-insertion", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "6769" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(hierDF_transP279_filtered.node1_desc == hierDF_transP279_filtered.node2_desc).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "greenhouse-worthy", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered1 = hierDF_transP279_filtered[hierDF_transP279_filtered.node1_desc != hierDF_transP279_filtered.node2_desc]" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "apart-tooth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(310053, 303284)" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_transP279_filtered), len(hierDF_transP279_filtered1)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "spiritual-ballot", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered1.to_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "adjusted-supervision", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered1[['id', 'node1', 'label', 'node2']].to_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_baremetal.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "approved-genome", - "metadata": {}, - "outputs": [], - "source": [ - "pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_baremetal.csv')[['id', 'node1', 'label', 'node2']].to_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_baremetal.tsv', index=False, sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "extreme-visibility", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0Unnamed: 0.1indexnode2idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDescnode1_embnode2_embbert2SentSim
0001Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791974 fighter aircraft family by General DynamicsYF-16F-16 Fighting Falconinitial prototype of the F-16 fighter aircraftYF-16 initial prototype of the F-16 fighter ai...F-16 Fighting Falcon 1974 fighter aircraft fam...[-5.89544833e-01 1.19935878e-01 3.76383096e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.666525
1112Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791974 fighter aircraft family by General DynamicsF-16A/B Fighting FalconF-16 Fighting Falconinitial series of the F-16 fighter aircraftF-16A/B Fighting Falcon initial series of the ...F-16 Fighting Falcon 1974 fighter aircraft fam...[-6.08038664e-01 5.00908047e-02 5.60190260e-...[ 1.79253891e-01 6.10661447e-01 8.33987534e-...0.700515
2223Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791974 fighter aircraft family by General DynamicsF-16C/D Fighting FalconF-16 Fighting Falconmultirole series of the F-16 fighter aircraftF-16C/D Fighting Falcon multirole series of th...F-16 Fighting Falcon 1974 fighter aircraft fam...[-5.40582001e-01 1.56212196e-01 5.69522917e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.683245
3334Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791974 fighter aircraft family by General DynamicsF-16E/F Desert FalconF-16 Fighting Falconexport strike fighter series of the F-16 fight...F-16E/F Desert Falcon export strike fighter se...F-16 Fighting Falcon 1974 fighter aircraft fam...[-4.99146163e-01 6.76080063e-02 3.48868877e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.689516
4445Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791974 fighter aircraft family by General DynamicsF-16 VISTAF-16 Fighting Falconexperimental aircraftF-16 VISTA experimental aircraftF-16 Fighting Falcon 1974 fighter aircraft fam...[-1.47221148e-01 9.54690054e-02 1.05311513e+...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.603161
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 Unnamed: 0.1 index node2 \\\n", - "0 0 0 1 Q100026 \n", - "1 1 1 2 Q100026 \n", - "2 2 2 3 Q100026 \n", - "3 3 3 4 Q100026 \n", - "4 4 4 5 Q100026 \n", - "\n", - " id node1 label \\\n", - "0 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "1 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 \n", - "2 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 \n", - "3 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 \n", - "4 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 \n", - "\n", - " node2_desc node1_label \\\n", - "0 1974 fighter aircraft family by General Dynamics YF-16 \n", - "1 1974 fighter aircraft family by General Dynamics F-16A/B Fighting Falcon \n", - "2 1974 fighter aircraft family by General Dynamics F-16C/D Fighting Falcon \n", - "3 1974 fighter aircraft family by General Dynamics F-16E/F Desert Falcon \n", - "4 1974 fighter aircraft family by General Dynamics F-16 VISTA \n", - "\n", - " node2_label node1_desc \\\n", - "0 F-16 Fighting Falcon initial prototype of the F-16 fighter aircraft \n", - "1 F-16 Fighting Falcon initial series of the F-16 fighter aircraft \n", - "2 F-16 Fighting Falcon multirole series of the F-16 fighter aircraft \n", - "3 F-16 Fighting Falcon export strike fighter series of the F-16 fight... \n", - "4 F-16 Fighting Falcon experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "0 YF-16 initial prototype of the F-16 fighter ai... \n", - "1 F-16A/B Fighting Falcon initial series of the ... \n", - "2 F-16C/D Fighting Falcon multirole series of th... \n", - "3 F-16E/F Desert Falcon export strike fighter se... \n", - "4 F-16 VISTA experimental aircraft \n", - "\n", - " node2_labDesc \\\n", - "0 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "1 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "2 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "3 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "4 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "\n", - " node1_emb \\\n", - "0 [-5.89544833e-01 1.19935878e-01 3.76383096e-... \n", - "1 [-6.08038664e-01 5.00908047e-02 5.60190260e-... \n", - "2 [-5.40582001e-01 1.56212196e-01 5.69522917e-... \n", - "3 [-4.99146163e-01 6.76080063e-02 3.48868877e-... \n", - "4 [-1.47221148e-01 9.54690054e-02 1.05311513e+... \n", - "\n", - " node2_emb bert2SentSim \n", - "0 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.666525 \n", - "1 [ 1.79253891e-01 6.10661447e-01 8.33987534e-... 0.700515 \n", - "2 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.683245 \n", - "3 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.689516 \n", - "4 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.603161 " - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered1 = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered.csv')\n", - "hierDF_transP279_filtered1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "automated-science", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered1[['id', 'node1', 'label', 'node2', 'bert2SentSim']].to_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "three-highland", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 303284.000000\n", - "mean 0.623925\n", - "std 0.176450\n", - "min -0.111115\n", - "25% 0.496446\n", - "50% 0.630122\n", - "75% 0.751900\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered1['bert2SentSim'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "intermediate-heating", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "advised-stick", - "metadata": {}, - "source": [ - "## Correct bertsim values" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "english-alfred", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered.bert.base.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "interpreted-institute", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0Unnamed: 0.1indexnode2idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDescnode1_embnode2_embbert2SentSim
0001Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791974 fighter aircraft family by General DynamicsYF-16F-16 Fighting Falconinitial prototype of the F-16 fighter aircraftYF-16 initial prototype of the F-16 fighter ai...F-16 Fighting Falcon 1974 fighter aircraft fam...[-5.89544833e-01 1.19935878e-01 3.76383096e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.666525
1112Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791974 fighter aircraft family by General DynamicsF-16A/B Fighting FalconF-16 Fighting Falconinitial series of the F-16 fighter aircraftF-16A/B Fighting Falcon initial series of the ...F-16 Fighting Falcon 1974 fighter aircraft fam...[-6.08038664e-01 5.00908047e-02 5.60190260e-...[ 1.79253891e-01 6.10661447e-01 8.33987534e-...0.700515
2223Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791974 fighter aircraft family by General DynamicsF-16C/D Fighting FalconF-16 Fighting Falconmultirole series of the F-16 fighter aircraftF-16C/D Fighting Falcon multirole series of th...F-16 Fighting Falcon 1974 fighter aircraft fam...[-5.40582001e-01 1.56212196e-01 5.69522917e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.683245
3334Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791974 fighter aircraft family by General DynamicsF-16E/F Desert FalconF-16 Fighting Falconexport strike fighter series of the F-16 fight...F-16E/F Desert Falcon export strike fighter se...F-16 Fighting Falcon 1974 fighter aircraft fam...[-4.99146163e-01 6.76080063e-02 3.48868877e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.689516
4445Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791974 fighter aircraft family by General DynamicsF-16 VISTAF-16 Fighting Falconexperimental aircraftF-16 VISTA experimental aircraftF-16 Fighting Falcon 1974 fighter aircraft fam...[-1.47221148e-01 9.54690054e-02 1.05311513e+...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.603161
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 Unnamed: 0.1 index node2 \\\n", - "0 0 0 1 Q100026 \n", - "1 1 1 2 Q100026 \n", - "2 2 2 3 Q100026 \n", - "3 3 3 4 Q100026 \n", - "4 4 4 5 Q100026 \n", - "\n", - " id node1 label \\\n", - "0 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "1 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 \n", - "2 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 \n", - "3 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 \n", - "4 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 \n", - "\n", - " node2_desc node1_label \\\n", - "0 1974 fighter aircraft family by General Dynamics YF-16 \n", - "1 1974 fighter aircraft family by General Dynamics F-16A/B Fighting Falcon \n", - "2 1974 fighter aircraft family by General Dynamics F-16C/D Fighting Falcon \n", - "3 1974 fighter aircraft family by General Dynamics F-16E/F Desert Falcon \n", - "4 1974 fighter aircraft family by General Dynamics F-16 VISTA \n", - "\n", - " node2_label node1_desc \\\n", - "0 F-16 Fighting Falcon initial prototype of the F-16 fighter aircraft \n", - "1 F-16 Fighting Falcon initial series of the F-16 fighter aircraft \n", - "2 F-16 Fighting Falcon multirole series of the F-16 fighter aircraft \n", - "3 F-16 Fighting Falcon export strike fighter series of the F-16 fight... \n", - "4 F-16 Fighting Falcon experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "0 YF-16 initial prototype of the F-16 fighter ai... \n", - "1 F-16A/B Fighting Falcon initial series of the ... \n", - "2 F-16C/D Fighting Falcon multirole series of th... \n", - "3 F-16E/F Desert Falcon export strike fighter se... \n", - "4 F-16 VISTA experimental aircraft \n", - "\n", - " node2_labDesc \\\n", - "0 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "1 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "2 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "3 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "4 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "\n", - " node1_emb \\\n", - "0 [-5.89544833e-01 1.19935878e-01 3.76383096e-... \n", - "1 [-6.08038664e-01 5.00908047e-02 5.60190260e-... \n", - "2 [-5.40582001e-01 1.56212196e-01 5.69522917e-... \n", - "3 [-4.99146163e-01 6.76080063e-02 3.48868877e-... \n", - "4 [-1.47221148e-01 9.54690054e-02 1.05311513e+... \n", - "\n", - " node2_emb bert2SentSim \n", - "0 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.666525 \n", - "1 [ 1.79253891e-01 6.10661447e-01 8.33987534e-... 0.700515 \n", - "2 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.683245 \n", - "3 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.689516 \n", - "4 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.603161 " - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "committed-diamond", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "alpine-virus", - "metadata": {}, - "outputs": [], - "source": [ - "modelName = 'sentence-transformers/all-distilroberta-v1'" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "funny-asian", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = hierDF.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "stunning-consolidation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 0)" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.node1_labDesc.isna().sum(), hierDF.node2_labDesc.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "warming-dinner", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "198.2163701057434 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "157.96648454666138 s\n" - ] - } - ], - "source": [ - "hierDF['node1_emb'] = pd.Series(list(getSentEmbeddings(hierDF.node1_labDesc, modelName)))\n", - "hierDF['node2_emb'] = pd.Series(list(getSentEmbeddings(hierDF.node2_labDesc, modelName)))" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "noticed-electric", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
level_0Unnamed: 0Unnamed: 0.1indexnode2idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDescnode1_embnode2_embbert2SentSim
00001Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791974 fighter aircraft family by General DynamicsYF-16F-16 Fighting Falconinitial prototype of the F-16 fighter aircraftYF-16 initial prototype of the F-16 fighter ai...F-16 Fighting Falcon 1974 fighter aircraft fam...[-5.89544833e-01 1.19935878e-01 3.76383096e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.666525
11112Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791974 fighter aircraft family by General DynamicsF-16A/B Fighting FalconF-16 Fighting Falconinitial series of the F-16 fighter aircraftF-16A/B Fighting Falcon initial series of the ...F-16 Fighting Falcon 1974 fighter aircraft fam...[-6.08038664e-01 5.00908047e-02 5.60190260e-...[ 1.79253891e-01 6.10661447e-01 8.33987534e-...0.700515
22223Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791974 fighter aircraft family by General DynamicsF-16C/D Fighting FalconF-16 Fighting Falconmultirole series of the F-16 fighter aircraftF-16C/D Fighting Falcon multirole series of th...F-16 Fighting Falcon 1974 fighter aircraft fam...[-5.40582001e-01 1.56212196e-01 5.69522917e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.683245
33334Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791974 fighter aircraft family by General DynamicsF-16E/F Desert FalconF-16 Fighting Falconexport strike fighter series of the F-16 fight...F-16E/F Desert Falcon export strike fighter se...F-16 Fighting Falcon 1974 fighter aircraft fam...[-4.99146163e-01 6.76080063e-02 3.48868877e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.689516
44445Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791974 fighter aircraft family by General DynamicsF-16 VISTAF-16 Fighting Falconexperimental aircraftF-16 VISTA experimental aircraftF-16 Fighting Falcon 1974 fighter aircraft fam...[-1.47221148e-01 9.54690054e-02 1.05311513e+...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.603161
\n", - "
" - ], - "text/plain": [ - " level_0 Unnamed: 0 Unnamed: 0.1 index node2 \\\n", - "0 0 0 0 1 Q100026 \n", - "1 1 1 1 2 Q100026 \n", - "2 2 2 2 3 Q100026 \n", - "3 3 3 3 4 Q100026 \n", - "4 4 4 4 5 Q100026 \n", - "\n", - " id node1 label \\\n", - "0 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "1 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 \n", - "2 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 \n", - "3 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 \n", - "4 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 \n", - "\n", - " node2_desc node1_label \\\n", - "0 1974 fighter aircraft family by General Dynamics YF-16 \n", - "1 1974 fighter aircraft family by General Dynamics F-16A/B Fighting Falcon \n", - "2 1974 fighter aircraft family by General Dynamics F-16C/D Fighting Falcon \n", - "3 1974 fighter aircraft family by General Dynamics F-16E/F Desert Falcon \n", - "4 1974 fighter aircraft family by General Dynamics F-16 VISTA \n", - "\n", - " node2_label node1_desc \\\n", - "0 F-16 Fighting Falcon initial prototype of the F-16 fighter aircraft \n", - "1 F-16 Fighting Falcon initial series of the F-16 fighter aircraft \n", - "2 F-16 Fighting Falcon multirole series of the F-16 fighter aircraft \n", - "3 F-16 Fighting Falcon export strike fighter series of the F-16 fight... \n", - "4 F-16 Fighting Falcon experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "0 YF-16 initial prototype of the F-16 fighter ai... \n", - "1 F-16A/B Fighting Falcon initial series of the ... \n", - "2 F-16C/D Fighting Falcon multirole series of th... \n", - "3 F-16E/F Desert Falcon export strike fighter se... \n", - "4 F-16 VISTA experimental aircraft \n", - "\n", - " node2_labDesc \\\n", - "0 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "1 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "2 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "3 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "4 F-16 Fighting Falcon 1974 fighter aircraft fam... \n", - "\n", - " node1_emb \\\n", - "0 [-5.89544833e-01 1.19935878e-01 3.76383096e-... \n", - "1 [-6.08038664e-01 5.00908047e-02 5.60190260e-... \n", - "2 [-5.40582001e-01 1.56212196e-01 5.69522917e-... \n", - "3 [-4.99146163e-01 6.76080063e-02 3.48868877e-... \n", - "4 [-1.47221148e-01 9.54690054e-02 1.05311513e+... \n", - "\n", - " node2_emb bert2SentSim \n", - "0 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.666525 \n", - "1 [ 1.79253891e-01 6.10661447e-01 8.33987534e-... 0.700515 \n", - "2 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.683245 \n", - "3 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.689516 \n", - "4 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.603161 " - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "surrounded-thinking", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 0)" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.node1_emb.isna().sum(), hierDF.node2_emb.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "frozen-console", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF['similarity_value'] = hierDF.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "interior-treat", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ba6879c669da4812919bee809747ece9", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Batches: 0%| | 0/747 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0idnode1labelnode2
00Q17372279-P279-Q100026-beba8cd1-0Q17372279P279Q100026
11Q17372377-P279-Q100026-fd42bd71-0Q17372377P279Q100026
22Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P279Q100026
33Q17372455-P279-Q100026-c2b1bf36-0Q17372455P279Q100026
44Q2029940-P279-Q100026-ceba4380-0Q2029940P279Q100026
\n", - "" - ], - "text/plain": [ - " Unnamed: 0 id node1 label node2\n", - "0 0 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 Q100026\n", - "1 1 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 Q100026\n", - "2 2 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 Q100026\n", - "3 3 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 Q100026\n", - "4 4 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 Q100026" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "interpreted-elimination", - "metadata": {}, - "outputs": [], - "source": [ - "# hierDF_dirP279_filtered_left = hierDF_dirP279_filtered.set_index('node2')\n", - "# hierDF_dirP279_filtered_right = hierDF_dirP279_filtered_left.copy()\n", - "\n", - "hierDF_transP279_filtered_left = hierDF_transP279_filtered.set_index('node2')\n", - "hierDF_transP279_filtered_right = hierDF_transP279_filtered.copy().set_index('node2')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "constant-thread", - "metadata": {}, - "outputs": [], - "source": [ - "# hierDF_dirP279_filtered_sibs = hierDF_dirP279_filtered_left.join(hierDF_dirP279_filtered_right, rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "charitable-thesaurus", - "metadata": {}, - "outputs": [], - "source": [ - "%%time\n", - "hierDF_transP279_filtered_sibs = hierDF_transP279_filtered_left.join(hierDF_transP279_filtered_right, rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "consolidated-hampshire", - "metadata": {}, - "outputs": [], - "source": [ - "len(hierDF_transP279_filtered_sibs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "blessed-microwave", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "compliant-measure", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs.drop(columns=['Unnamed: 0', 'Unnamed: 0_right', 'label_right']).reset_index().rename(columns={'node2': 'par_node', 'node1_right': 'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "anticipated-occasion", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "steady-jacket", - "metadata": {}, - "outputs": [], - "source": [ - "len(hierDF_transP279_filtered_sibs1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "italian-slovak", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs1[hierDF_transP279_filtered_sibs1.node1 != hierDF_transP279_filtered_sibs1.node2]" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "digital-oxygen", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "109275284" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_transP279_filtered_sibs1)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "fewer-rebel", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1.to_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_baremetal.csv')" - ] - }, - { - "cell_type": "markdown", - "id": "failing-accent", - "metadata": {}, - "source": [ - "## Add labels + descs" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "controlled-width", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.utils.random import sample_without_replacement\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "prompt-grade", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_baremetal.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "american-porter", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs.iloc[sample_without_replacement(len(hierDF_transP279_filtered_sibs), 10000000, random_state=13)]" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "third-canon", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs1.drop(columns=['Unnamed: 0']).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "widespread-construction", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexpar_nodeidnode1labelid_rightnode2
035336627Q5663900Q26690795-P279-Q5663900-078ae6ac-0Q26690795P279Q26702202-P279-Q5663900-2e741279-0Q26702202
1103575910Q99762605Q98956067-P279-Q99762605-c31fed7d-0Q98956067P279Q98954409-P279-Q99762605-e294a05f-0Q98954409
252173412Q5663900Q26694052-P279-Q5663900-1876b09d-0Q26694052P279Q26698259-P279-Q5663900-cf00016d-0Q26698259
334573004Q5663900Q26690675-P279-Q5663900-6453a6a5-0Q26690675P279Q26692431-P279-Q5663900-d4b30075-0Q26692431
42387372Q11436Q135880-P279-Q11436-96699f83-0Q135880P279Q7395320-P279-Q11436-c0a6c3fd-0Q7395320
\n", - "
" - ], - "text/plain": [ - " index par_node id node1 label \\\n", - "0 35336627 Q5663900 Q26690795-P279-Q5663900-078ae6ac-0 Q26690795 P279 \n", - "1 103575910 Q99762605 Q98956067-P279-Q99762605-c31fed7d-0 Q98956067 P279 \n", - "2 52173412 Q5663900 Q26694052-P279-Q5663900-1876b09d-0 Q26694052 P279 \n", - "3 34573004 Q5663900 Q26690675-P279-Q5663900-6453a6a5-0 Q26690675 P279 \n", - "4 2387372 Q11436 Q135880-P279-Q11436-96699f83-0 Q135880 P279 \n", - "\n", - " id_right node2 \n", - "0 Q26702202-P279-Q5663900-2e741279-0 Q26702202 \n", - "1 Q98954409-P279-Q99762605-e294a05f-0 Q98954409 \n", - "2 Q26698259-P279-Q5663900-cf00016d-0 Q26698259 \n", - "3 Q26692431-P279-Q5663900-d4b30075-0 Q26692431 \n", - "4 Q7395320-P279-Q11436-c0a6c3fd-0 Q7395320 " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "necessary-gibson", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "10000000" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_transP279_filtered_sibs1)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "prospective-beast", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv(LABELS_FILE, sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "dutch-night", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_set = set(hierDF_transP279_filtered_sibs1.node1.to_list() + hierDF_transP279_filtered_sibs1.node2.to_list() + hierDF_transP279_filtered_sibs1.par_node.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "sunset-mercy", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = labelsDF[labelsDF.node1.apply(lambda p: p in hierDF_transP279_filtered_set)]" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "ongoing-maryland", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2
8758Q1000032-label-enQ1000032label'unschooling'@en
8970Q100004761-label-enQ100004761label'shelf label'@en
9322Q1000064-label-enQ1000064label'nuclear reactor technology'@en
9558Q1000084-label-enQ1000084label'economy of Djibouti'@en
9716Q1000120-label-enQ1000120label'maximal torus'@en
\n", - "
" - ], - "text/plain": [ - " id node1 label node2\n", - "8758 Q1000032-label-en Q1000032 label 'unschooling'@en\n", - "8970 Q100004761-label-en Q100004761 label 'shelf label'@en\n", - "9322 Q1000064-label-en Q1000064 label 'nuclear reactor technology'@en\n", - "9558 Q1000084-label-en Q1000084 label 'economy of Djibouti'@en\n", - "9716 Q1000120-label-en Q1000120 label 'maximal torus'@en" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "labelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "statewide-updating", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDict = {row['node1']: row['node2'] for _, row in labelsDF.iterrows() if row['node1'] in hierDF_transP279_filtered_set}" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "paperback-diagnosis", - "metadata": {}, - "outputs": [], - "source": [ - "descriptionsDF = pd.read_csv(DESCRIPTIONS_FILE, compression='gzip', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "radio-investigation", - "metadata": {}, - "outputs": [], - "source": [ - "descriptionsDF = descriptionsDF[descriptionsDF.node1.apply(lambda p: p in hierDF_transP279_filtered_set)]" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "rising-pride", - "metadata": {}, - "outputs": [], - "source": [ - "descDict = {row['node1']: row['node2'] for _, row in descriptionsDF.iterrows() if row['node1'] in hierDF_transP279_filtered_set}" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "mexican-clothing", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1['node1_label'] = hierDF_transP279_filtered_sibs1.node1.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else None)\n", - "hierDF_transP279_filtered_sibs1['node2_label'] = hierDF_transP279_filtered_sibs1.node2.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else None)\n", - "hierDF_transP279_filtered_sibs1['par_label'] = hierDF_transP279_filtered_sibs1.par_node.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "rotary-discipline", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1['node1_desc'] = hierDF_transP279_filtered_sibs1.node1.apply(lambda p: descDict[p][1:-4] if p in descDict else None)\n", - "hierDF_transP279_filtered_sibs1['node2_desc'] = hierDF_transP279_filtered_sibs1.node2.apply(lambda p: descDict[p][1:-4] if p in descDict else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "minute-chain", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1['node1_sent'] = hierDF_transP279_filtered_sibs1.apply(lambda p: p['node1_label'] + ' ' + p['node1_desc'] + ' is ' + p['par_label'],axis=1)\n", - "hierDF_transP279_filtered_sibs1['node2_sent'] = hierDF_transP279_filtered_sibs1.apply(lambda p: p['node2_label'] + ' ' + p['node2_desc'] + ' is ' + p['par_label'],axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "economic-document", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexpar_nodeidnode1labelid_rightnode2node1_labelnode2_labelpar_labelnode1_descnode2_descnode1_sentnode2_sent
035336627Q5663900Q26690795-P279-Q5663900-078ae6ac-0Q26690795P279Q26702202-P279-Q5663900-2e741279-0Q26702202mayor of Guarrománmayor of La Pueblamayor of a place in Spainpolitical position in Spainpolitical position in Spainmayor of Guarromán political position in Spain...mayor of La Puebla political position in Spain...
1103575910Q99762605Q98956067-P279-Q99762605-c31fed7d-0Q98956067P279Q98954409-P279-Q99762605-e294a05f-0Q98954409mayor of Dobreștimayor of Pâncotamayor of a place in Romaniamayor of Dobrești, Bihor countypublic office in Romaniamayor of Dobrești mayor of Dobrești, Bihor cou...mayor of Pâncota public office in Romania is m...
252173412Q5663900Q26694052-P279-Q5663900-1876b09d-0Q26694052P279Q26698259-P279-Q5663900-cf00016d-0Q26698259mayor of Zubietamayor of Congostomayor of a place in Spainpolitical position in Spainpolitical position in Spainmayor of Zubieta political position in Spain i...mayor of Congosto political position in Spain ...
334573004Q5663900Q26690675-P279-Q5663900-6453a6a5-0Q26690675P279Q26692431-P279-Q5663900-d4b30075-0Q26692431mayor of La Nou de Gayamayor of Pozohondomayor of a place in Spainpolitical position in Spainpolitical position in Spainmayor of La Nou de Gaya political position in ...mayor of Pozohondo political position in Spain...
42387372Q11436Q135880-P279-Q11436-96699f83-0Q135880P279Q7395320-P279-Q11436-c0a6c3fd-0Q7395320A-12SZD-49 Jantar Kaircraft1936 autogyro prototype by the Central Aero-Hy...glider aircraftA-12 1936 autogyro prototype by the Central Ae...SZD-49 Jantar K glider aircraft is aircraft
\n", - "
" - ], - "text/plain": [ - " index par_node id node1 label \\\n", - "0 35336627 Q5663900 Q26690795-P279-Q5663900-078ae6ac-0 Q26690795 P279 \n", - "1 103575910 Q99762605 Q98956067-P279-Q99762605-c31fed7d-0 Q98956067 P279 \n", - "2 52173412 Q5663900 Q26694052-P279-Q5663900-1876b09d-0 Q26694052 P279 \n", - "3 34573004 Q5663900 Q26690675-P279-Q5663900-6453a6a5-0 Q26690675 P279 \n", - "4 2387372 Q11436 Q135880-P279-Q11436-96699f83-0 Q135880 P279 \n", - "\n", - " id_right node2 node1_label \\\n", - "0 Q26702202-P279-Q5663900-2e741279-0 Q26702202 mayor of Guarromán \n", - "1 Q98954409-P279-Q99762605-e294a05f-0 Q98954409 mayor of Dobrești \n", - "2 Q26698259-P279-Q5663900-cf00016d-0 Q26698259 mayor of Zubieta \n", - "3 Q26692431-P279-Q5663900-d4b30075-0 Q26692431 mayor of La Nou de Gaya \n", - "4 Q7395320-P279-Q11436-c0a6c3fd-0 Q7395320 A-12 \n", - "\n", - " node2_label par_label \\\n", - "0 mayor of La Puebla mayor of a place in Spain \n", - "1 mayor of Pâncota mayor of a place in Romania \n", - "2 mayor of Congosto mayor of a place in Spain \n", - "3 mayor of Pozohondo mayor of a place in Spain \n", - "4 SZD-49 Jantar K aircraft \n", - "\n", - " node1_desc \\\n", - "0 political position in Spain \n", - "1 mayor of Dobrești, Bihor county \n", - "2 political position in Spain \n", - "3 political position in Spain \n", - "4 1936 autogyro prototype by the Central Aero-Hy... \n", - "\n", - " node2_desc \\\n", - "0 political position in Spain \n", - "1 public office in Romania \n", - "2 political position in Spain \n", - "3 political position in Spain \n", - "4 glider aircraft \n", - "\n", - " node1_sent \\\n", - "0 mayor of Guarromán political position in Spain... \n", - "1 mayor of Dobrești mayor of Dobrești, Bihor cou... \n", - "2 mayor of Zubieta political position in Spain i... \n", - "3 mayor of La Nou de Gaya political position in ... \n", - "4 A-12 1936 autogyro prototype by the Central Ae... \n", - "\n", - " node2_sent \n", - "0 mayor of La Puebla political position in Spain... \n", - "1 mayor of Pâncota public office in Romania is m... \n", - "2 mayor of Congosto political position in Spain ... \n", - "3 mayor of Pozohondo political position in Spain... \n", - "4 SZD-49 Jantar K glider aircraft is aircraft " - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "official-uniform", - "metadata": {}, - "outputs": [], - "source": [ - "# hierDF_transP279_filtered_sibs1.to_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "metric-essex", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1[['id', 'node1', 'label', 'node2', 'par_node']].to_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "closing-neighbor", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs2 = hierDF_transP279_filtered_sibs1[hierDF_transP279_filtered_sibs1.node1_desc != hierDF_transP279_filtered_sibs1.node2_desc]" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "young-british", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName, device='cuda:3')\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list(), show_progress_bar=True, batch_size=1000)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "heavy-composite", - "metadata": {}, - "outputs": [], - "source": [ - "modelName = 'sentence-transformers/all-distilroberta-v1'" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "chemical-simon", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs2 = hierDF_transP279_filtered_sibs2.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "protecting-reply", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3682.2832567691803 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3649.976934671402 s\n" - ] - } - ], - "source": [ - "hierDF_transP279_filtered_sibs2['node1_emb'] = pd.Series(list(getSentEmbeddings(hierDF_transP279_filtered_sibs2.node1_sent, modelName)))\n", - "hierDF_transP279_filtered_sibs2['node2_emb'] = pd.Series(list(getSentEmbeddings(hierDF_transP279_filtered_sibs2.node2_sent, modelName)))" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "infrared-success", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a35cdeb3c28e445dbfb84b318876a709", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Downloading: 0%| | 0.00/629 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
level_0indexpar_nodeidnode1labelid_rightnode2node1_labelnode2_labelpar_labelnode1_descnode2_descnode1_sentnode2_sentnode1_embnode2_emb
01103575910Q99762605Q98956067-P279-Q99762605-c31fed7d-0Q98956067P279Q98954409-P279-Q99762605-e294a05f-0Q98954409mayor of Dobreștimayor of Pâncotamayor of a place in Romaniamayor of Dobrești, Bihor countypublic office in Romaniamayor of Dobrești mayor of Dobrești, Bihor cou...mayor of Pâncota public office in Romania is m...[0.29432657, -0.12315029, -0.045695502, 0.3632...[0.40726575, -0.3538948, -0.19948234, -0.10712...
142387372Q11436Q135880-P279-Q11436-96699f83-0Q135880P279Q7395320-P279-Q11436-c0a6c3fd-0Q7395320A-12SZD-49 Jantar Kaircraft1936 autogyro prototype by the Central Aero-Hy...glider aircraftA-12 1936 autogyro prototype by the Central Ae...SZD-49 Jantar K glider aircraft is aircraft[-0.19948986, -0.35904005, 0.09085509, 0.16439...[-0.22941455, -0.05107765, 0.3621345, 0.495969...
2524016847Q21167512Q69525859-P279-Q21167512-f5328a1d-0Q69525859P279Q21175029-P279-Q21167512-56cdfd0e-0Q21175029sodium carbonate exposurespentaborane exposurechemical hazardhazardous chemical exposureshazardous chemical exposuresodium carbonate exposures hazardous chemical ...pentaborane exposure hazardous chemical exposu...[-0.23254174, -0.019664198, -0.49748045, 0.018...[-0.57571846, -0.29551026, -0.50132465, -0.239...
310108650504Q99762605Q98958530-P279-Q99762605-fdded642-0Q98958530P279Q98956734-P279-Q99762605-2dbce366-0Q98956734mayor of Urzicenimayor of Ioneștimayor of a place in Romaniamayor of Urziceni, Satu Mare countymayor of Ionești, Vâlcea countymayor of Urziceni mayor of Urziceni, Satu Mare...mayor of Ionești mayor of Ionești, Vâlcea coun...[0.5272284, -0.36796138, -0.053719513, 0.40885...[0.11683124, -0.23857604, -0.057602327, -0.193...
411106811689Q99762605Q98957693-P279-Q99762605-5c11a747-0Q98957693P279Q98955251-P279-Q99762605-400c2ed9-0Q98955251mayor of Racovițenimayor of Blandianamayor of a place in Romaniamayor of Racovițeni, Buzău countymayor of Blandiana, Alba countymayor of Racovițeni mayor of Racovițeni, Buzău...mayor of Blandiana mayor of Blandiana, Alba co...[0.34337035, -0.25570026, -0.20981959, 0.10492...[0.36922738, 0.20065087, -0.18316983, 0.193541...
\n", - "" - ], - "text/plain": [ - " level_0 index par_node id \\\n", - "0 1 103575910 Q99762605 Q98956067-P279-Q99762605-c31fed7d-0 \n", - "1 4 2387372 Q11436 Q135880-P279-Q11436-96699f83-0 \n", - "2 5 24016847 Q21167512 Q69525859-P279-Q21167512-f5328a1d-0 \n", - "3 10 108650504 Q99762605 Q98958530-P279-Q99762605-fdded642-0 \n", - "4 11 106811689 Q99762605 Q98957693-P279-Q99762605-5c11a747-0 \n", - "\n", - " node1 label id_right node2 \\\n", - "0 Q98956067 P279 Q98954409-P279-Q99762605-e294a05f-0 Q98954409 \n", - "1 Q135880 P279 Q7395320-P279-Q11436-c0a6c3fd-0 Q7395320 \n", - "2 Q69525859 P279 Q21175029-P279-Q21167512-56cdfd0e-0 Q21175029 \n", - "3 Q98958530 P279 Q98956734-P279-Q99762605-2dbce366-0 Q98956734 \n", - "4 Q98957693 P279 Q98955251-P279-Q99762605-400c2ed9-0 Q98955251 \n", - "\n", - " node1_label node2_label \\\n", - "0 mayor of Dobrești mayor of Pâncota \n", - "1 A-12 SZD-49 Jantar K \n", - "2 sodium carbonate exposures pentaborane exposure \n", - "3 mayor of Urziceni mayor of Ionești \n", - "4 mayor of Racovițeni mayor of Blandiana \n", - "\n", - " par_label \\\n", - "0 mayor of a place in Romania \n", - "1 aircraft \n", - "2 chemical hazard \n", - "3 mayor of a place in Romania \n", - "4 mayor of a place in Romania \n", - "\n", - " node1_desc \\\n", - "0 mayor of Dobrești, Bihor county \n", - "1 1936 autogyro prototype by the Central Aero-Hy... \n", - "2 hazardous chemical exposures \n", - "3 mayor of Urziceni, Satu Mare county \n", - "4 mayor of Racovițeni, Buzău county \n", - "\n", - " node2_desc \\\n", - "0 public office in Romania \n", - "1 glider aircraft \n", - "2 hazardous chemical exposure \n", - "3 mayor of Ionești, Vâlcea county \n", - "4 mayor of Blandiana, Alba county \n", - "\n", - " node1_sent \\\n", - "0 mayor of Dobrești mayor of Dobrești, Bihor cou... \n", - "1 A-12 1936 autogyro prototype by the Central Ae... \n", - "2 sodium carbonate exposures hazardous chemical ... \n", - "3 mayor of Urziceni mayor of Urziceni, Satu Mare... \n", - "4 mayor of Racovițeni mayor of Racovițeni, Buzău... \n", - "\n", - " node2_sent \\\n", - "0 mayor of Pâncota public office in Romania is m... \n", - "1 SZD-49 Jantar K glider aircraft is aircraft \n", - "2 pentaborane exposure hazardous chemical exposu... \n", - "3 mayor of Ionești mayor of Ionești, Vâlcea coun... \n", - "4 mayor of Blandiana mayor of Blandiana, Alba co... \n", - "\n", - " node1_emb \\\n", - "0 [0.29432657, -0.12315029, -0.045695502, 0.3632... \n", - "1 [-0.19948986, -0.35904005, 0.09085509, 0.16439... \n", - "2 [-0.23254174, -0.019664198, -0.49748045, 0.018... \n", - "3 [0.5272284, -0.36796138, -0.053719513, 0.40885... \n", - "4 [0.34337035, -0.25570026, -0.20981959, 0.10492... \n", - "\n", - " node2_emb \n", - "0 [0.40726575, -0.3538948, -0.19948234, -0.10712... \n", - "1 [-0.22941455, -0.05107765, 0.3621345, 0.495969... \n", - "2 [-0.57571846, -0.29551026, -0.50132465, -0.239... \n", - "3 [0.11683124, -0.23857604, -0.057602327, -0.193... \n", - "4 [0.36922738, 0.20065087, -0.18316983, 0.193541... " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "rural-vocabulary", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 0)" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs2.node1_emb.isna().sum(), hierDF_transP279_filtered_sibs2.node2_emb.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "basic-extreme", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs2['similarity_value'] = hierDF_transP279_filtered_sibs2.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "sweet-remainder", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 3.707847e+06\n", - "mean 5.596878e-01\n", - "std 1.731009e-01\n", - "min -1.290048e-01\n", - "25% 4.218415e-01\n", - "50% 5.907606e-01\n", - "75% 7.042572e-01\n", - "max 9.998616e-01\n", - "Name: similarity_value, dtype: float64" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs2['similarity_value'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "lasting-torture", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset reduced from 10000000 to 3707847 by eliminating rows where node1_desc == node2_desc\n" - ] - } - ], - "source": [ - "print(f\"Dataset reduced from {len(hierDF_transP279_filtered_sibs1)} to {len(hierDF_transP279_filtered_sibs2)} by eliminating rows where node1_desc == node2_desc\")" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "continental-interim", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs2[['id', 'node1', 'label', 'node2', 'par_node', 'similarity_value']].to_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cathedral-charge", - "metadata": {}, - "outputs": [], - "source": [ - "# import pandas as pd\n", - "# pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')['similarity_value'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "collect-picking", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "declared-monroe", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "opening-rally", - "metadata": {}, - "outputs": [], - "source": [ - "wordsim_nodes = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "diagnostic-guess", - "metadata": {}, - "outputs": [], - "source": [ - "P279_3M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "utility-prophet", - "metadata": {}, - "outputs": [], - "source": [ - "P279_10M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "treated-anniversary", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 40.2 s, sys: 779 ms, total: 40.9 s\n", - "Wall time: 40.9 s\n" - ] - }, - { - "data": { - "text/plain": [ - "398221" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%time\n", - "P279_3M_data.apply(lambda p: p['node1'] in wordsim_nodes or p['node2'] in wordsim_nodes or p['par_node'] in wordsim_nodes, axis=1).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "laughing-blake", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 1min 48s, sys: 2.78 s, total: 1min 51s\n", - "Wall time: 1min 51s\n" - ] - }, - { - "data": { - "text/plain": [ - "406185" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%time\n", - "P279_10M_data.apply(lambda p: p['node1'] in wordsim_nodes or p['node2'] in wordsim_nodes or p['par_node'] in wordsim_nodes, axis=1).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "traditional-guess", - "metadata": {}, - "outputs": [], - "source": [ - "P279_10M_data[P279_10M_data.apply(lambda p: p['node1'] in wordsim_nodes or p['node2'] in wordsim_nodes or p['par_node'] in wordsim_nodes, axis=1)].to_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_wordsim_only.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "loved-arkansas", - "metadata": {}, - "outputs": [], - "source": [ - "P279_19k_data = pd.read_csv('../data/P279_dataset/P279_19k_Siblings_Dataset.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "cloudy-encoding", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0indexnode1parentnode2node1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sentnode1_embnode2_embbert2SentSim
002897760Q7047901Q17517Q7410591Nokia 5330 Mobile TV Editionmobile phoneSamsung SGH-i780Nokia 5330 Mobile TV Edition is mobile phoneSamsung SGH-i780 is mobile phonemobile phone is typically Nokia 5330 Mobile TV...[-5.48004732e-02 3.50154340e-01 4.38094527e-...[-2.98046470e-01 3.74356419e-01 5.27383387e-...0.883490
1110431390Q15991265Q2736Q15991267amateur footballassociation footballprofessional footballamateur football is association footballprofessional football is association footballassociation football is typically amateur foot...[-1.95897296e-01 1.04528800e-01 4.40772206e-...[-2.94859111e-01 1.88360184e-01 -1.96894854e-...0.803443
22417162Q15222772Q1420Q7246913Glider (automobiles)motor carProbe 16Glider (automobiles) is motor carProbe 16 is motor carmotor car is typically Glider (automobiles) or...[-1.21378571e-01 3.04012895e-01 4.18751419e-...[ 0.16769831 0.62631613 1.0727373 0.235646...0.760663
33420822Q15609267Q1420Q16997137Isotta Fraschini Tipo Dmotor carAllard M2Isotta Fraschini Tipo D is motor carAllard M2 is motor carmotor car is typically Isotta Fraschini Tipo D...[ 1.71256125e-01 2.56909907e-01 7.91365981e-...[-3.38893235e-01 3.94817479e-02 6.53142512e-...0.851455
443361954Q10748135Q2095Q17116114kelewelefoodHorsebreadkelewele is foodHorsebread is foodfood is typically kelewele or Horsebread[ 2.51727879e-01 -1.59988493e-01 1.39032674e+...[-2.70331770e-01 -6.03621602e-01 7.06666887e-...0.728477
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 index node1 parent node2 \\\n", - "0 0 2897760 Q7047901 Q17517 Q7410591 \n", - "1 1 10431390 Q15991265 Q2736 Q15991267 \n", - "2 2 417162 Q15222772 Q1420 Q7246913 \n", - "3 3 420822 Q15609267 Q1420 Q16997137 \n", - "4 4 3361954 Q10748135 Q2095 Q17116114 \n", - "\n", - " node1_label par_label node2_label \\\n", - "0 Nokia 5330 Mobile TV Edition mobile phone Samsung SGH-i780 \n", - "1 amateur football association football professional football \n", - "2 Glider (automobiles) motor car Probe 16 \n", - "3 Isotta Fraschini Tipo D motor car Allard M2 \n", - "4 kelewele food Horsebread \n", - "\n", - " node1_sent \\\n", - "0 Nokia 5330 Mobile TV Edition is mobile phone \n", - "1 amateur football is association football \n", - "2 Glider (automobiles) is motor car \n", - "3 Isotta Fraschini Tipo D is motor car \n", - "4 kelewele is food \n", - "\n", - " node2_sent \\\n", - "0 Samsung SGH-i780 is mobile phone \n", - "1 professional football is association football \n", - "2 Probe 16 is motor car \n", - "3 Allard M2 is motor car \n", - "4 Horsebread is food \n", - "\n", - " comb_sent \\\n", - "0 mobile phone is typically Nokia 5330 Mobile TV... \n", - "1 association football is typically amateur foot... \n", - "2 motor car is typically Glider (automobiles) or... \n", - "3 motor car is typically Isotta Fraschini Tipo D... \n", - "4 food is typically kelewele or Horsebread \n", - "\n", - " node1_emb \\\n", - "0 [-5.48004732e-02 3.50154340e-01 4.38094527e-... \n", - "1 [-1.95897296e-01 1.04528800e-01 4.40772206e-... \n", - "2 [-1.21378571e-01 3.04012895e-01 4.18751419e-... \n", - "3 [ 1.71256125e-01 2.56909907e-01 7.91365981e-... \n", - "4 [ 2.51727879e-01 -1.59988493e-01 1.39032674e+... \n", - "\n", - " node2_emb bert2SentSim \n", - "0 [-2.98046470e-01 3.74356419e-01 5.27383387e-... 0.883490 \n", - "1 [-2.94859111e-01 1.88360184e-01 -1.96894854e-... 0.803443 \n", - "2 [ 0.16769831 0.62631613 1.0727373 0.235646... 0.760663 \n", - "3 [-3.38893235e-01 3.94817479e-02 6.53142512e-... 0.851455 \n", - "4 [-2.70331770e-01 -6.03621602e-01 7.06666887e-... 0.728477 " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P279_19k_data.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "creative-lloyd", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 305 ms, sys: 2.01 ms, total: 307 ms\n", - "Wall time: 304 ms\n" - ] - }, - { - "data": { - "text/plain": [ - "19454" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%time\n", - "P279_19k_data.apply(lambda p: p['node1'] in wordsim_nodes or p['node2'] in wordsim_nodes or p['parent'] in wordsim_nodes, axis=1).sum()" - ] - }, - { - "cell_type": "markdown", - "id": "radio-trainer", - "metadata": {}, - "source": [ - "## Correct bertsim values" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "stupid-doubt", - "metadata": {}, - "outputs": [ - { - "ename": "EmptyDataError", - "evalue": "No columns to parse from file", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mEmptyDataError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mhierDF_transP279_filtered_sibs1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'../data/Master_P279_dataset/P279Siblings_transP279_filtered.tsv'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'\\t'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)\u001b[0m\n\u001b[1;32m 608\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwds_defaults\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 609\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 610\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 611\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 612\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 460\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 461\u001b[0m \u001b[0;31m# Create the parser.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 462\u001b[0;31m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTextFileReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 463\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 464\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mchunksize\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[1;32m 817\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"has_index_names\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"has_index_names\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 818\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 819\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_engine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 820\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 821\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m_make_engine\u001b[0;34m(self, engine)\u001b[0m\n\u001b[1;32m 1048\u001b[0m )\n\u001b[1;32m 1049\u001b[0m \u001b[0;31m# error: Too many arguments for \"ParserBase\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1050\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmapping\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[call-arg]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1051\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1052\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_failover_to_python\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, src, **kwds)\u001b[0m\n\u001b[1;32m 1896\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1897\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1898\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reader\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparsers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTextReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandles\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1899\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1900\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandles\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32mpandas/_libs/parsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader.__cinit__\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mEmptyDataError\u001b[0m: No columns to parse from file" - ] - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1 = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "placed-michigan", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs2 = hierDF_transP279_filtered_sibs1[hierDF_transP279_filtered_sibs1.node1_desc != hierDF_transP279_filtered_sibs1.node2_desc]" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "ethical-bacteria", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset reduced from 10000000 to 3707847 by eliminating rows where node1_desc == node2_desc\n" - ] - } - ], - "source": [ - "print(f\"Dataset reduced from {len(hierDF_transP279_filtered_sibs1)} to {len(hierDF_transP279_filtered_sibs2)} by eliminating rows where node1_desc == node2_desc\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "welsh-blast", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs2" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "individual-neighborhood", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "modelName = 'sentence-transformers/all-distilroberta-v1'" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "worldwide-mayor", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "15682.8797955513 s\n", - "15108.38348031044 s\n" - ] - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1['node1_emb'] = pd.Series(list(getSentEmbeddings(hierDF_transP279_filtered_sibs1.node1_sent, modelName)))\n", - "hierDF_transP279_filtered_sibs1['node2_emb'] = pd.Series(list(getSentEmbeddings(hierDF_transP279_filtered_sibs1.node2_sent, modelName)))" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "weighted-raise", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 0)" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1.node1_emb.isna().sum(), hierDF_transP279_filtered_sibs1.node2_emb.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "monetary-experiment", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1['similarity_value'] = hierDF_transP279_filtered_sibs1.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "efficient-cancer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 1.000000e+07\n", - "mean 9.141334e-01\n", - "std 1.338514e-01\n", - "min -5.180746e-02\n", - "25% 8.585989e-01\n", - "50% 9.876406e-01\n", - "75% 9.928079e-01\n", - "max 1.000000e+00\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1['similarity_value'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "scientific-fossil", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs2[['id', 'node1', 'label', 'node2', 'par_node', 'similarity_value']].to_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "wanted-vault", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "automated-heath", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "current-switzerland", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "neither-consumer", - "metadata": {}, - "source": [ - "# Class Similarity Datasets\n", - "\n", - "`zcat derived.dwd_isa_class_count.compact.tsv.gz | cut -f 3 | tail -n +2 | sed -e 's/|/\\n/g' -e 's/:/\\t/g' | sort | uniq > class-counts.tsv`" - ] - }, - { - "cell_type": "markdown", - "id": "spread-snapshot", - "metadata": {}, - "source": [ - "## ChildPar" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "supposed-newport", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2 = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "reliable-publisher", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2[['node1', 'node2']].rename(columns={'node1':'q1', 'node2':'q2'}).to_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_min_cols_FOR_CLASS.tsv', sep='\\t', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "impressed-airfare", - "metadata": {}, - "outputs": [], - "source": [ - "class_dict = {}\n", - "with open('../data/derived.dwd_isa_class_count.compact.tsv') as class_file:\n", - " for line in tqdm(class_file):\n", - " line = line.split('\\t')\n", - " if line[0] in p279QnodesList:\n", - " class_dict[line[0]] = line[2].strip()\n", - "all_class_count_dict = {}\n", - "with open('../data/class-counts.tsv') as class_file:\n", - " for line in tqdm(class_file):\n", - " line = line.split('\\t')\n", - " if line[0] in p279QnodesList:\n", - " all_class_count_dict[line[0]] = line[1].strip()\n", - "\n", - "\n", - "class SemanticSimilarity(object):\n", - " def __init__(self):\n", - "# self.config = config\n", - "# self.embeddings_type = ['class']\n", - " self.N = float(52546967)\n", - " self.all_class_count_dict = all_class_count_dict\n", - " \n", - " def get_qnode_details(self, qnodes: list):\n", - " global class_dict\n", - " qnodes_dict = {}\n", - " qnodes_dict[qnodes[0]] = class_dict.get(qnodes[0],'')\n", - " qnodes_dict[qnodes[1]] = class_dict.get(qnodes[1],'')\n", - " return qnodes_dict\n", - " \n", - " def compute_class_similarity(self, q1, q2):\n", - " qnodes_dict = self.get_qnode_details([q1, q2])\n", - "# print(qnodes_dict)\n", - " feature_dict, feature_count_dict = self.build_qnode_feature_dict(qnodes_dict)\n", - "# print(feature_dict, feature_count_dict)\n", - " normalized_classes_idf = self.normalize_idf_classes(feature_dict, feature_count_dict)\n", - " if q1 in feature_dict and q2 in feature_dict:\n", - " q1_cl = set(feature_dict[q1])\n", - " q2_cl = set(feature_dict[q2])\n", - " q1_q2_intersection = q1_cl.intersection(q2_cl)\n", - "\n", - " _similarity = sum([normalized_classes_idf.get(c) for c in q1_q2_intersection])\n", - " return {\n", - " 'similarity': _similarity\n", - " }\n", - " return {\n", - " 'similarity': None\n", - " }\n", - "\n", - " def build_qnode_feature_dict(self, qnodes_dict: dict) -> (dict, dict):\n", - " feature_dict = {}\n", - " feature_count_dict = {}\n", - "\n", - " for qnode in qnodes_dict:\n", - " feature_val = []\n", - " \n", - " if '|' in qnodes_dict[qnode]:\n", - " cl = qnodes_dict[qnode].split(\"|\")\n", - "\n", - " for c in cl:\n", - " vals = c.split(\":\")\n", - " feature_val.append(vals[0])\n", - " feature_count_dict[vals[0]] = float(vals[1])\n", - " if qnode not in feature_val:\n", - " feature_val.append(qnode)\n", - " if qnode not in feature_count_dict:\n", - " feature_count_dict[qnode] = float(self.all_class_count_dict.get(qnode, 1.0))\n", - " feature_dict[qnode] = feature_val\n", - "\n", - " return feature_dict, feature_count_dict\n", - "\n", - " def normalize_idf_classes(self, feature_dict, feature_count_dict):\n", - "\n", - " classes_count = {}\n", - " for qnode in feature_dict:\n", - "\n", - " classes = feature_dict[qnode]\n", - " for c in classes:\n", - " if c not in classes_count:\n", - " classes_count[c] = 0\n", - " classes_count[c] += 1\n", - "\n", - " classes_idf = self.calculate_idf_features(feature_count_dict)\n", - "\n", - " # multiply class count with idf\n", - " for c in classes_idf:\n", - " classes_idf[c] = classes_count[c] * classes_idf[c]\n", - "\n", - " # normalize the idf scores so that they sum to 1\n", - " classes_idf_sum = sum([classes_idf[x] for x in classes_idf])\n", - " for c in classes_idf:\n", - " classes_idf[c] = classes_idf[c] / classes_idf_sum\n", - "\n", - " return classes_idf\n", - "\n", - " def calculate_idf_features(self, feature_count_dict):\n", - " _ = {}\n", - " for c in feature_count_dict:\n", - " _[c] = math.log(self.N / feature_count_dict[c])\n", - " return _" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "flying-perception", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# from tqdm.notebook import tqdm\n", - "# import json\n", - "# from joblib import Parallel, delayed\n", - "# import sys\n", - "\n", - "# hierDF_transP279_filtered2_class_arr = []\n", - "\n", - "# def fetchClassSim(row):\n", - "# resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\")\n", - "# try:\n", - "# row['classSim'] = float(resp.json()['similarity']) if resp else -1\n", - "# except Exception as exc:\n", - "# print(exc)\n", - "# print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - "# row['classSim'] = None\n", - "# row['Resp_code'] = resp\n", - "# return row\n", - "\n", - "# hierDF_transP279_filtered2_class_arr = Parallel(n_jobs=5)(delayed(fetchClassSim)(row) for _, row in tqdm(hierDF_transP279_filtered2.iloc[:100].iterrows(), total=len(hierDF_transP279_filtered2)))\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "empirical-suspect", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2_class_arr" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "helpful-medline", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2_class = pd.DataFrame(hierDF_transP279_filtered2_class_arr)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "activated-excuse", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: []\n", - "Index: []" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "baking-input", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "302108" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.classSim.isna().sum()" - ] - }, - { - "cell_type": "markdown", - "id": "cognitive-decade", - "metadata": {}, - "source": [ - "## Siblings" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "pacific-warehouse", - "metadata": {}, - "outputs": [], - "source": [ - "P279_3M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')\n", - "P279_10M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outdoor-sense", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# from tqdm.notebook import tqdm\n", - "# import json\n", - "# from joblib import Parallel, delayed\n", - "\n", - "# P279_3M_data_class_arr = []\n", - "\n", - "# def fetchClassSim(row):\n", - "# try:\n", - "# resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - "# row['classSim'] = float(resp) if resp else -1\n", - "# except:\n", - "# print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - "# row['classSim'] = None\n", - "# return row\n", - "\n", - "# P279_3M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_3M_data.iterrows(), total=len(P279_3M_data)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "handy-coral", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# from tqdm.notebook import tqdm\n", - "# import json\n", - "# from joblib import Parallel, delayed\n", - "\n", - "# P279_10M_data_class_arr = []\n", - "\n", - "# def fetchClassSim(row):\n", - "# try:\n", - "# resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - "# row['classSim'] = float(resp) if resp else -1\n", - "# except:\n", - "# print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - "# row['classSim'] = None\n", - "# return row\n", - "\n", - "# P279_10M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_10M_data.iterrows(), total=len(P279_10M_data)))" - ] - }, - { - "cell_type": "markdown", - "id": "descending-validity", - "metadata": {}, - "source": [ - "# JC Similarity Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "distinct-chamber", - "metadata": {}, - "source": [ - "## ChildPar" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "indonesian-jersey", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2 = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "remarkable-wallet", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "978c7892341342029d881b0bf31a6f66", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/303284 [00:00\n", - " Name: 0, dtype: object,\n", - " Unnamed: 0 1\n", - " id Q17372377-P279-Q100026-fd42bd71-0\n", - " node1 Q17372377\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.700515\n", - " classSim 0.94674\n", - " Resp_code \n", - " Name: 1, dtype: object,\n", - " Unnamed: 0 2\n", - " id Q17372444-P279-Q100026-ca0fc4bd-0\n", - " node1 Q17372444\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.683245\n", - " classSim 0.946647\n", - " Resp_code \n", - " Name: 2, dtype: object,\n", - " Unnamed: 0 3\n", - " id Q17372455-P279-Q100026-c2b1bf36-0\n", - " node1 Q17372455\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.689516\n", - " classSim 0.943256\n", - " Resp_code \n", - " Name: 3, dtype: object,\n", - " Unnamed: 0 4\n", - " id Q2029940-P279-Q100026-ceba4380-0\n", - " node1 Q2029940\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.603161\n", - " classSim 0.809487\n", - " Resp_code \n", - " Name: 4, dtype: object,\n", - " Unnamed: 0 5\n", - " id Q209480-P279-Q100026-a218e96b-0\n", - " node1 Q209480\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.61352\n", - " classSim 0.975716\n", - " Resp_code \n", - " Name: 5, dtype: object,\n", - " Unnamed: 0 6\n", - " id Q77929250-P279-Q100026-964ec021-0\n", - " node1 Q77929250\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.76767\n", - " classSim 0.961308\n", - " Resp_code \n", - " Name: 6, dtype: object,\n", - " Unnamed: 0 7\n", - " id Q1087043-P279-Q1000371-945e7797-0\n", - " node1 Q1087043\n", - " label P279\n", - " node2 Q1000371\n", - " bert2SentSim 0.699843\n", - " classSim 0.671266\n", - " Resp_code \n", - " Name: 7, dtype: object,\n", - " Unnamed: 0 8\n", - " id Q384656-P279-Q100047-6147b9a8-0\n", - " node1 Q384656\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 8, dtype: object,\n", - " Unnamed: 0 9\n", - " id Q471089-P279-Q100047-473b504b-0\n", - " node1 Q471089\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.679593\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 9, dtype: object,\n", - " Unnamed: 0 10\n", - " id Q471094-P279-Q100047-14b1b1df-0\n", - " node1 Q471094\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 10, dtype: object,\n", - " Unnamed: 0 11\n", - " id Q471102-P279-Q100047-886a847c-0\n", - " node1 Q471102\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 11, dtype: object,\n", - " Unnamed: 0 12\n", - " id Q471127-P279-Q100047-6738fc46-0\n", - " node1 Q471127\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 12, dtype: object,\n", - " Unnamed: 0 13\n", - " id Q471144-P279-Q100047-766e1fa3-0\n", - " node1 Q471144\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.811462\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 13, dtype: object,\n", - " Unnamed: 0 14\n", - " id Q471158-P279-Q100047-7955aa40-0\n", - " node1 Q471158\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 14, dtype: object,\n", - " Unnamed: 0 15\n", - " id Q100052562-P279-Q100052008-1a4fa432-0\n", - " node1 Q100052562\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.515993\n", - " classSim 0.913344\n", - " Resp_code \n", - " Name: 15, dtype: object,\n", - " Unnamed: 0 16\n", - " id Q100052791-P279-Q100052008-1d15b1ae-0\n", - " node1 Q100052791\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.478483\n", - " classSim 0.907455\n", - " Resp_code \n", - " Name: 16, dtype: object,\n", - " Unnamed: 0 17\n", - " id Q100119502-P279-Q100052008-d2c330a4-0\n", - " node1 Q100119502\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.51221\n", - " classSim 0.913229\n", - " Resp_code \n", - " Name: 17, dtype: object,\n", - " Unnamed: 0 18\n", - " id Q88594442-P279-Q100052008-badba21b-0\n", - " node1 Q88594442\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.424672\n", - " classSim 0.91916\n", - " Resp_code \n", - " Name: 18, dtype: object,\n", - " Unnamed: 0 19\n", - " id Q1133024-P279-Q1000660-6d8a1a17-0\n", - " node1 Q1133024\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.556017\n", - " classSim 0.96031\n", - " Resp_code \n", - " Name: 19, dtype: object,\n", - " Unnamed: 0 20\n", - " id Q1231309-P279-Q1000660-656bad41-0\n", - " node1 Q1231309\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.473025\n", - " classSim 0.987153\n", - " Resp_code \n", - " Name: 20, dtype: object,\n", - " Unnamed: 0 21\n", - " id Q1892554-P279-Q1000660-b60addd4-0\n", - " node1 Q1892554\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.710084\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 21, dtype: object,\n", - " Unnamed: 0 22\n", - " id Q2835946-P279-Q1000660-ff0a5cf9-0\n", - " node1 Q2835946\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.69158\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 22, dtype: object,\n", - " Unnamed: 0 23\n", - " id Q3413373-P279-Q1000660-9d565f5e-0\n", - " node1 Q3413373\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.676028\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 23, dtype: object,\n", - " Unnamed: 0 24\n", - " id Q5611316-P279-Q1000660-6b051008-0\n", - " node1 Q5611316\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.652025\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 24, dtype: object,\n", - " Unnamed: 0 25\n", - " id Q649977-P279-Q1000660-cc4475c9-0\n", - " node1 Q649977\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.548393\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 25, dtype: object,\n", - " Unnamed: 0 26\n", - " id Q7269432-P279-Q1000660-8976e0ff-0\n", - " node1 Q7269432\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.439381\n", - " classSim 0.989483\n", - " Resp_code \n", - " Name: 26, dtype: object,\n", - " Unnamed: 0 27\n", - " id Q844980-P279-Q1000660-5f020e98-0\n", - " node1 Q844980\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.678084\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 27, dtype: object,\n", - " Unnamed: 0 28\n", - " id Q1051606-P279-Q1000809-995e5221-0\n", - " node1 Q1051606\n", - " label P279\n", - " node2 Q1000809\n", - " bert2SentSim 0.740599\n", - " classSim 0.912943\n", - " Resp_code \n", - " Name: 28, dtype: object,\n", - " Unnamed: 0 29\n", - " id Q4984171-P279-Q1000809-95749f41-0\n", - " node1 Q4984171\n", - " label P279\n", - " node2 Q1000809\n", - " bert2SentSim 0.808338\n", - " classSim 0.957835\n", - " Resp_code \n", - " Name: 29, dtype: object,\n", - " Unnamed: 0 30\n", - " id Q2047562-P279-Q1001041-45feee81-0\n", - " node1 Q2047562\n", - " label P279\n", - " node2 Q1001041\n", - " bert2SentSim 0.359032\n", - " classSim 0.707243\n", - " Resp_code \n", - " Name: 30, dtype: object,\n", - " Unnamed: 0 31\n", - " id Q8069073-P279-Q1001041-3f13f5bb-0\n", - " node1 Q8069073\n", - " label P279\n", - " node2 Q1001041\n", - " bert2SentSim 0.769952\n", - " classSim 0.849692\n", - " Resp_code \n", - " Name: 31, dtype: object,\n", - " Unnamed: 0 32\n", - " id Q1070955-P279-Q1001051-5df03dac-0\n", - " node1 Q1070955\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.800508\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 32, dtype: object,\n", - " Unnamed: 0 33\n", - " id Q1153367-P279-Q1001051-34783d55-0\n", - " node1 Q1153367\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.837581\n", - " classSim 0.876525\n", - " Resp_code \n", - " Name: 33, dtype: object,\n", - " Unnamed: 0 34\n", - " id Q1958065-P279-Q1001051-d6eb5968-0\n", - " node1 Q1958065\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.848892\n", - " classSim 0.707989\n", - " Resp_code \n", - " Name: 34, dtype: object,\n", - " Unnamed: 0 35\n", - " id Q209680-P279-Q1001051-072eeb1b-0\n", - " node1 Q209680\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.656872\n", - " classSim 0.724838\n", - " Resp_code \n", - " Name: 35, dtype: object,\n", - " Unnamed: 0 36\n", - " id Q2986204-P279-Q1001051-7b21695a-0\n", - " node1 Q2986204\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.816212\n", - " classSim 0.796208\n", - " Resp_code \n", - " Name: 36, dtype: object,\n", - " Unnamed: 0 37\n", - " id Q385530-P279-Q1001051-17db3704-0\n", - " node1 Q385530\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.75061\n", - " classSim 0.780191\n", - " Resp_code \n", - " Name: 37, dtype: object,\n", - " Unnamed: 0 38\n", - " id Q41795401-P279-Q1001051-5747dcc4-0\n", - " node1 Q41795401\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.787191\n", - " classSim 0.88381\n", - " Resp_code \n", - " Name: 38, dtype: object,\n", - " Unnamed: 0 39\n", - " id Q612405-P279-Q1001051-bb6fa17c-0\n", - " node1 Q612405\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.72366\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 39, dtype: object,\n", - " Unnamed: 0 40\n", - " id Q668439-P279-Q1001051-bbba9ea3-0\n", - " node1 Q668439\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.698926\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 40, dtype: object,\n", - " Unnamed: 0 41\n", - " id Q7133779-P279-Q1001051-4fc71627-0\n", - " node1 Q7133779\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.576617\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 41, dtype: object,\n", - " Unnamed: 0 42\n", - " id Q7630946-P279-Q1001051-2e78f5b5-0\n", - " node1 Q7630946\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.632298\n", - " classSim 0.796208\n", - " Resp_code \n", - " Name: 42, dtype: object,\n", - " Unnamed: 0 43\n", - " id Q1056352-P279-Q1001059-c1976180-0\n", - " node1 Q1056352\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.717131\n", - " classSim 0.886053\n", - " Resp_code \n", - " Name: 43, dtype: object,\n", - " Unnamed: 0 44\n", - " id Q2123051-P279-Q1001059-18b4564b-0\n", - " node1 Q2123051\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.606046\n", - " classSim 0.465094\n", - " Resp_code \n", - " Name: 44, dtype: object,\n", - " Unnamed: 0 45\n", - " id Q444278-P279-Q1001059-0c74af28-0\n", - " node1 Q444278\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.481163\n", - " classSim 0.881922\n", - " Resp_code \n", - " Name: 45, dtype: object,\n", - " Unnamed: 0 46\n", - " id Q7240696-P279-Q1001059-31dfa177-0\n", - " node1 Q7240696\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.752948\n", - " classSim 0.881922\n", - " Resp_code \n", - " Name: 46, dtype: object,\n", - " Unnamed: 0 47\n", - " id Q85776190-P279-Q1001059-b7a4aad6-0\n", - " node1 Q85776190\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.747289\n", - " classSim 0.53963\n", - " Resp_code \n", - " Name: 47, dtype: object,\n", - " Unnamed: 0 48\n", - " id Q100052008-P279-Q100116222-d1597eca-0\n", - " node1 Q100052008\n", - " label P279\n", - " node2 Q100116222\n", - " bert2SentSim 0.725062\n", - " classSim 0.909364\n", - " Resp_code \n", - " Name: 48, dtype: object,\n", - " Unnamed: 0 49\n", - " id Q27303706-P279-Q100116222-526530c6-0\n", - " node1 Q27303706\n", - " label P279\n", - " node2 Q100116222\n", - " bert2SentSim 0.537653\n", - " classSim 0.917887\n", - " Resp_code \n", - " Name: 49, dtype: object,\n", - " Unnamed: 0 50\n", - " id Q99565932-P279-Q100116222-139f958c-0\n", - " node1 Q99565932\n", - " label P279\n", - " node2 Q100116222\n", - " bert2SentSim 0.691907\n", - " classSim 0.892978\n", - " Resp_code \n", - " Name: 50, dtype: object,\n", - " Unnamed: 0 51\n", - " id Q1416523-P279-Q1001329-2b6d0c1e-0\n", - " node1 Q1416523\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.160931\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 51, dtype: object,\n", - " Unnamed: 0 52\n", - " id Q2963918-P279-Q1001329-c85a352f-0\n", - " node1 Q2963918\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.469497\n", - " classSim 0.878703\n", - " Resp_code \n", - " Name: 52, dtype: object,\n", - " Unnamed: 0 53\n", - " id Q56756850-P279-Q1001329-6cb334b1-0\n", - " node1 Q56756850\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.412103\n", - " classSim 0.363595\n", - " Resp_code \n", - " Name: 53, dtype: object,\n", - " Unnamed: 0 54\n", - " id Q60782200-P279-Q1001329-0b4da903-0\n", - " node1 Q60782200\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.239958\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 54, dtype: object,\n", - " Unnamed: 0 55\n", - " id Q78841106-P279-Q1001329-d474c822-0\n", - " node1 Q78841106\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.496099\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 55, dtype: object,\n", - " Unnamed: 0 56\n", - " id Q798863-P279-Q1001329-c284c2ec-0\n", - " node1 Q798863\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.597623\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 56, dtype: object,\n", - " Unnamed: 0 57\n", - " id Q96337569-P279-Q1001329-b8b30fb9-0\n", - " node1 Q96337569\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.210435\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 57, dtype: object,\n", - " Unnamed: 0 58\n", - " id Q3403683-P279-Q100135295-fd0a0a92-0\n", - " node1 Q3403683\n", - " label P279\n", - " node2 Q100135295\n", - " bert2SentSim 0.371629\n", - " classSim 0.811291\n", - " Resp_code \n", - " Name: 58, dtype: object,\n", - " Unnamed: 0 59\n", - " id Q100095237-P279-Q100136951-a7f6f753-0\n", - " node1 Q100095237\n", - " label P279\n", - " node2 Q100136951\n", - " bert2SentSim 0.883361\n", - " classSim 0.909817\n", - " Resp_code \n", - " Name: 59, dtype: object,\n", - " Unnamed: 0 60\n", - " id Q100136066-P279-Q100136951-1e2368cd-0\n", - " node1 Q100136066\n", - " label P279\n", - " node2 Q100136951\n", - " bert2SentSim 0.883361\n", - " classSim 0.843155\n", - " Resp_code \n", - " Name: 60, dtype: object,\n", - " Unnamed: 0 61\n", - " id Q235041-P279-Q100136951-07d30679-0\n", - " node1 Q235041\n", - " label P279\n", - " node2 Q100136951\n", - " bert2SentSim 0.607752\n", - " classSim 0.719618\n", - " Resp_code \n", - " Name: 61, dtype: object,\n", - " Unnamed: 0 62\n", - " id Q22006653-P279-Q1001378-98eddb62-0\n", - " node1 Q22006653\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.366579\n", - " classSim 0.5263\n", - " Resp_code \n", - " Name: 62, dtype: object,\n", - " Unnamed: 0 63\n", - " id Q2895476-P279-Q1001378-9d15228e-0\n", - " node1 Q2895476\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.682378\n", - " classSim 0.75066\n", - " Resp_code \n", - " Name: 63, dtype: object,\n", - " Unnamed: 0 64\n", - " id Q2918907-P279-Q1001378-39c09697-0\n", - " node1 Q2918907\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.813292\n", - " classSim 0.775328\n", - " Resp_code \n", - " Name: 64, dtype: object,\n", - " Unnamed: 0 65\n", - " id Q3516833-P279-Q1001378-30384a7c-0\n", - " node1 Q3516833\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.684669\n", - " classSim 0.916831\n", - " Resp_code \n", - " Name: 65, dtype: object,\n", - " Unnamed: 0 66\n", - " id Q4129855-P279-Q1001378-3ad464f7-0\n", - " node1 Q4129855\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.740775\n", - " classSim 0.905545\n", - " Resp_code \n", - " Name: 66, dtype: object,\n", - " Unnamed: 0 67\n", - " id Q5197004-P279-Q1001378-513f9939-0\n", - " node1 Q5197004\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.642596\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 67, dtype: object,\n", - " Unnamed: 0 68\n", - " id Q7237336-P279-Q1001378-55e73e1a-0\n", - " node1 Q7237336\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.58928\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 68, dtype: object,\n", - " Unnamed: 0 69\n", - " id Q738160-P279-Q1001378-b69af0cb-0\n", - " node1 Q738160\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.813292\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 69, dtype: object,\n", - " Unnamed: 0 70\n", - " id Q8317-P279-Q1001378-a56c669f-0\n", - " node1 Q8317\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.636886\n", - " classSim 0.541961\n", - " Resp_code \n", - " Name: 70, dtype: object,\n", - " Unnamed: 0 71\n", - " id Q86908314-P279-Q1001378-7a81e91b-0\n", - " node1 Q86908314\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.421366\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 71, dtype: object,\n", - " Unnamed: 0 72\n", - " id Q86910224-P279-Q1001378-b427331c-0\n", - " node1 Q86910224\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.584772\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 72, dtype: object,\n", - " Unnamed: 0 73\n", - " id Q100148346-P279-Q100148352-003654ac-0\n", - " node1 Q100148346\n", - " label P279\n", - " node2 Q100148352\n", - " bert2SentSim 0.872339\n", - " classSim 0.951283\n", - " Resp_code \n", - " Name: 73, dtype: object,\n", - " Unnamed: 0 74\n", - " id Q27147769-P279-Q100148352-8254b7c4-0\n", - " node1 Q27147769\n", - " label P279\n", - " node2 Q100148352\n", - " bert2SentSim 0.886007\n", - " classSim 0.924902\n", - " Resp_code \n", - " Name: 74, dtype: object,\n", - " Unnamed: 0 75\n", - " id Q14747611-P279-Q100159-567e45a7-0\n", - " node1 Q14747611\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.50114\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 75, dtype: object,\n", - " Unnamed: 0 76\n", - " id Q17089549-P279-Q100159-3247e0d4-0\n", - " node1 Q17089549\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.705335\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 76, dtype: object,\n", - " Unnamed: 0 77\n", - " id Q18923049-P279-Q100159-04db261f-0\n", - " node1 Q18923049\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.861815\n", - " classSim 0.719858\n", - " Resp_code \n", - " Name: 77, dtype: object,\n", - " Unnamed: 0 78\n", - " id Q2056084-P279-Q100159-94d1b7b8-0\n", - " node1 Q2056084\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.782052\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 78, dtype: object,\n", - " Unnamed: 0 79\n", - " id Q5097845-P279-Q100159-c2bd0b24-0\n", - " node1 Q5097845\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.551256\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 79, dtype: object,\n", - " Unnamed: 0 80\n", - " id Q6061403-P279-Q100159-d5101564-0\n", - " node1 Q6061403\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.565718\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 80, dtype: object,\n", - " Unnamed: 0 81\n", - " id Q652653-P279-Q100159-bd6c5d3a-0\n", - " node1 Q652653\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.501037\n", - " classSim 0.837687\n", - " Resp_code \n", - " Name: 81, dtype: object,\n", - " Unnamed: 0 82\n", - " id Q66293226-P279-Q100159-ad4b8016-0\n", - " node1 Q66293226\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.8089\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 82, dtype: object,\n", - " Unnamed: 0 83\n", - " id Q100166380-P279-Q100166391-4684ea65-0\n", - " node1 Q100166380\n", - " label P279\n", - " node2 Q100166391\n", - " bert2SentSim 0.752609\n", - " classSim 0.799499\n", - " Resp_code \n", - " Name: 83, dtype: object,\n", - " Unnamed: 0 84\n", - " id Q244326-P279-Q100166391-35359099-0\n", - " node1 Q244326\n", - " label P279\n", - " node2 Q100166391\n", - " bert2SentSim 0.522545\n", - " classSim 0.470975\n", - " Resp_code \n", - " Name: 84, dtype: object,\n", - " Unnamed: 0 85\n", - " id Q40551-P279-Q100166391-7242baf9-0\n", - " node1 Q40551\n", - " label P279\n", - " node2 Q100166391\n", - " bert2SentSim 0.74986\n", - " classSim 0.781795\n", - " Resp_code \n", - " Name: 85, dtype: object,\n", - " Unnamed: 0 86\n", - " id Q102108504-P279-Q100171002-7ccf3934-0\n", - " node1 Q102108504\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.680867\n", - " classSim None\n", - " Resp_code \n", - " Name: 86, dtype: object,\n", - " Unnamed: 0 87\n", - " id Q1150647-P279-Q100171002-fb1cad26-0\n", - " node1 Q1150647\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.664551\n", - " classSim 0.795416\n", - " Resp_code \n", - " Name: 87, dtype: object,\n", - " Unnamed: 0 88\n", - " id Q1503443-P279-Q100171002-8282ae74-0\n", - " node1 Q1503443\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.748802\n", - " classSim 0.822611\n", - " Resp_code \n", - " Name: 88, dtype: object,\n", - " Unnamed: 0 89\n", - " id Q2616305-P279-Q100171002-49dc8346-0\n", - " node1 Q2616305\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.646817\n", - " classSim 0.887266\n", - " Resp_code \n", - " Name: 89, dtype: object,\n", - " Unnamed: 0 90\n", - " id Q24050179-P279-Q100195948-90966900-0\n", - " node1 Q24050179\n", - " label P279\n", - " node2 Q100195948\n", - " bert2SentSim 0.652214\n", - " classSim 0.698738\n", - " Resp_code \n", - " Name: 90, dtype: object,\n", - " Unnamed: 0 91\n", - " id Q29479539-P279-Q100195948-e222789a-0\n", - " node1 Q29479539\n", - " label P279\n", - " node2 Q100195948\n", - " bert2SentSim 0.689148\n", - " classSim 0.681145\n", - " Resp_code \n", - " Name: 91, dtype: object,\n", - " Unnamed: 0 92\n", - " id Q308859-P279-Q100195948-a5841742-0\n", - " node1 Q308859\n", - " label P279\n", - " node2 Q100195948\n", - " bert2SentSim 0.750328\n", - " classSim 0.279686\n", - " Resp_code \n", - " Name: 92, dtype: object,\n", - " Unnamed: 0 93\n", - " id Q100251305-P279-Q100251275-02ddd08e-0\n", - " node1 Q100251305\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.486286\n", - " classSim 0.94603\n", - " Resp_code \n", - " Name: 93, dtype: object,\n", - " Unnamed: 0 94\n", - " id Q100251705-P279-Q100251275-fa0c89c7-0\n", - " node1 Q100251705\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.370606\n", - " classSim 0.94603\n", - " Resp_code \n", - " Name: 94, dtype: object,\n", - " Unnamed: 0 95\n", - " id Q16007968-P279-Q100251275-318d5598-0\n", - " node1 Q16007968\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.478886\n", - " classSim 0.9303\n", - " Resp_code \n", - " Name: 95, dtype: object,\n", - " Unnamed: 0 96\n", - " id Q3310017-P279-Q100251275-772909ea-0\n", - " node1 Q3310017\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.57202\n", - " classSim 0.929488\n", - " Resp_code \n", - " Name: 96, dtype: object,\n", - " Unnamed: 0 97\n", - " id Q4855428-P279-Q100251275-fbf2100a-0\n", - " node1 Q4855428\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.545835\n", - " classSim 0.931676\n", - " Resp_code \n", - " Name: 97, dtype: object,\n", - " Unnamed: 0 98\n", - " id Q862086-P279-Q100251275-faf57342-0\n", - " node1 Q862086\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.630551\n", - " classSim 0.948207\n", - " Resp_code \n", - " Name: 98, dtype: object,\n", - " Unnamed: 0 99\n", - " id Q15209696-P279-Q100257358-c4b60f40-0\n", - " node1 Q15209696\n", - " label P279\n", - " node2 Q100257358\n", - " bert2SentSim 0.484455\n", - " classSim 0.610338\n", - " Resp_code \n", - " Name: 99, dtype: object]" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class_arr" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "rental-stationery", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2_class = pd.DataFrame(hierDF_transP279_filtered2_class_arr)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "flexible-packaging", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: []\n", - "Index: []" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "emerging-music", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "302108" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.classSim.isna().sum()" - ] - }, - { - "cell_type": "markdown", - "id": "nervous-balloon", - "metadata": {}, - "source": [ - "## Siblings" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "under-lloyd", - "metadata": {}, - "outputs": [], - "source": [ - "P279_3M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')\n", - "P279_10M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "diagnostic-shade", - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "from tqdm.notebook import tqdm\n", - "import json\n", - "from joblib import Parallel, delayed\n", - "\n", - "P279_3M_data_class_arr = []\n", - "\n", - "def fetchClassSim(row):\n", - " try:\n", - " resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['classSim'] = float(resp) if resp else -1\n", - " except:\n", - " print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - " row['classSim'] = None\n", - " return row\n", - "\n", - "P279_3M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_3M_data.iterrows(), total=len(P279_3M_data)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "first-canal", - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "from tqdm.notebook import tqdm\n", - "import json\n", - "from joblib import Parallel, delayed\n", - "\n", - "P279_10M_data_class_arr = []\n", - "\n", - "def fetchClassSim(row):\n", - " try:\n", - " resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['classSim'] = float(resp) if resp else -1\n", - " except:\n", - " print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - " row['classSim'] = None\n", - " return row\n", - "\n", - "P279_10M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_10M_data.iterrows(), total=len(P279_10M_data)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "removable-watershed", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "confident-detail", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "important-palace", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "charitable-jefferson", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "satisfactory-union", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "integrated-intention", - "metadata": {}, - "source": [ - "# Wiki-CS" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "functioning-scholarship", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import os\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from matplotlib import pyplot" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "unique-weekend", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF = pd.read_csv('../data/wikidata-cs-20200504.tsv',sep='\\t')\n", - "mapper1 = {'/r/DistinctFrom': 'distinctness',\n", - " '/r/Antonym': 'antonymy',\n", - " '/r/Synonym': 'synonymy',\n", - " '/r/SimilarTo': 'similarity',\n", - " '/r/DerivedFrom': 'derivation',\n", - " '/r/IsA': 'inheritance',\n", - " '/r/PartOf': 'meronymy',\n", - " '/r/MadeOf': 'material',\n", - " '/r/CreatedBy': 'attribution',\n", - " '/r/UsedFor': 'utility',\n", - " '/r/HasProperty': 'properties',\n", - " '/r/Causes': 'causation',\n", - " '/r/HasPrerequisite': 'ordering',\n", - " '/r/HasContext': 'context',\n", - " '/r/RelatedTo': 'other'}\n", - "\n", - "wikiDF['dim'] = wikiDF['relation'].apply(lambda p: mapper1[p])\n", - "wikiDF['category'] = wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' or p == 'similarity' else 'M')\n", - "wikiDF['dim'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "located-swaziland", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' else 'M').value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sharing-scientist", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF[wikiDF.apply(lambda p: p['node1'].startswith('Q') and p['node2'].startswith('Q'), axis=1)]\n", - "wikiDF1.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fewer-place", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF1.rename(columns={'node1':'word1_kg_id', 'node2':'word2_kg_id'})\n", - "wikiDF1[['word1_kg_id', 'word2_kg_id', 'category', 'node1;label', 'node2;label']].to_csv('../data/wikidata-cs_categorized.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "noted-hopkins", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "enhanced-insured", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF = pd.read_csv('../data/wikidata-cs_categorized.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "complex-character", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 100110\n", - "I 1415\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "exciting-anderson", - "metadata": {}, - "outputs": [], - "source": [ - "I_set_size = len(wikiDF[wikiDF.category == 'I'])\n", - "M_sampled_set = wikiDF[wikiDF.category == 'M'].sample(I_set_size, random_state=13)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "thrown-graham", - "metadata": {}, - "outputs": [], - "source": [ - "from itertools import combinations\n", - "\n", - "def find_relation_mapping(mainset, subset, needed_size):\n", - " nodes = set([row['word1_kg_id'] for _,row in subset.iterrows()] \n", - " + [row['word2_kg_id'] for _,row in subset.iterrows()])\n", - " node_label_mappings = {row['word1_kg_id']: row['node1;label'] for _, row in subset.iterrows()}.update(\n", - " {row['word2_kg_id']: row['node2;label'] for _, row in subset.iterrows()}\n", - " )\n", - " mainset_pairs = set([(row['word1_kg_id'], row['word2_kg_id']) for _,row in mainset.iterrows()])\n", - "\n", - " all_pairs = set([pair for pair in list(combinations(list(nodes), 2))[10*needed_size]])\n", - " \n", - " removed_pairs = set()\n", - " \n", - " first_line = True\n", - " with gzip.open('../data/wikidata-20210215-dwd/claims.tsv.gz', 'r') as claims_file:\n", - " for line in tqdm(claims_file,total=98482585):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.decode(\"utf-8\").strip().split('\\t')\n", - " curr_pair = (line[1], line[3])\n", - " if curr_pair in all_pairs:\n", - " removed_pairs.add(curr_pair)\n", - " newDF = []\n", - " for pair in all_pairs - removed_pairs - mainset_pairs:\n", - " try:\n", - " if pair[0] is None or pair[1] is None:\n", - " continue\n", - " newDF.append(pair[0], pair[1], 'U', node_label_mappings[pair[0]], node_label_mappings[pair[1]])\n", - " except:\n", - " print(pair)\n", - " return pd.DataFrame(newDF, columns=subset.columns)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "immune-jesus", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3df524d9d4fd47e6864fe57299e1f8e5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/98482585 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1idnode1_labellabelnode2_labelsentnode1_embnode2_embbert2SentSim...BERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
0Q100171002Q1503443Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+...[ 3.61319035e-01 1.03393383e-01 1.50166345e+...0.901134...NaNNaN[0.87660795, 0.4991357, -0.39552155, 0.7046891...[0.36156428, -0.015657336, -0.14483449, -0.253...[0.79082793, 0.53679967, -0.3825465, 0.6778466...[0.36156428, -0.015657336, -0.14483449, -0.253...0.8326020.823419-1.000000-1.000000
1Q1002697Q49850Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+...[-2.23196611e-01 -4.97725368e-01 2.20271492e+...0.863449...[-0.28667202591896057, -0.4099476933479309, 0....[-0.25435054302215576, -0.92085862159729, 1.68...[1.256428, 0.3254261, -0.26960722, 0.101883665...[0.92698413, 0.32396156, -0.7647308, 0.6973268...[1.256428, 0.3254261, -0.26960722, 0.101883665...[1.0344226, 0.39984593, -0.76180136, 0.8256311...0.7426380.734428-1.000000-1.000000
2Q101998Q4421Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+...[ 5.09670794e-01 -4.42380428e-01 1.53245163e+...0.507148...[0.12320789694786072, 0.2723684310913086, 0.05...[0.5991100072860718, 0.15195603668689728, 0.59...[0.8141036, 0.14491142, -0.59703183, 0.335001,...[-0.16750671, -0.17960861, -0.58211946, -0.687...[0.91628444, 0.104261845, -0.49683735, 0.21296...[-0.13534825, -0.23398273, -0.5165668, -0.7297...0.6470310.7076110.5080600.455747
3Q102165Q2294Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+...[-6.87960759e-02 -1.65659860e-01 9.53789592e-...0.798707...[0.17410606145858765, 0.6839145421981812, -0.8...[-0.04499293863773346, 0.6921464204788208, -0....[0.469377, 0.7162001, -0.36740896, 0.76742333,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...[0.4080446, 0.7498908, -0.2665757, 0.74437106,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...0.8365310.8475910.8559590.770030
4Q102205Q11435Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+...[ 1.30038410e-01 -8.53226840e-01 2.37821031e+...0.934246...[0.4393930733203888, 0.7159943580627441, 0.647...[0.5091343522071838, -0.05845202878117561, 1.0...[-0.19995248, 0.65605164, -0.14234662, 0.43931...[0.4293771, 1.1976917, 0.04422909, 0.5975481, ...[-0.45549682, 0.73478854, -0.1980287, 0.436793...[0.33631665, 1.1661042, 0.13744242, 0.6776439,...0.7655890.7803420.7526930.515319
\n", - "

5 rows × 26 columns

\n", - "" - ], - "text/plain": [ - " node2 node1 id node1_label \\\n", - "0 Q100171002 Q1503443 Q1503443-P279-Q100171002-8282ae74-0 secrecy \n", - "1 Q1002697 Q49850 Q49850-P279-Q1002697-0c52cf68-0 journal \n", - "2 Q101998 Q4421 Q4421-P279-Q101998-d0983886-0 forest \n", - "3 Q102165 Q2294 Q2294-P279-Q102165-0893a180-0 proton \n", - "4 Q102205 Q11435 Q11435-P279-Q102205-7b448d05-0 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " node1_emb \\\n", - "0 [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " node2_emb bert2SentSim ... \\\n", - "0 [ 3.61319035e-01 1.03393383e-01 1.50166345e+... 0.901134 ... \n", - "1 [-2.23196611e-01 -4.97725368e-01 2.20271492e+... 0.863449 ... \n", - "2 [ 5.09670794e-01 -4.42380428e-01 1.53245163e+... 0.507148 ... \n", - "3 [-6.87960759e-02 -1.65659860e-01 9.53789592e-... 0.798707 ... \n", - "4 [ 1.30038410e-01 -8.53226840e-01 2.37821031e+... 0.934246 ... \n", - "\n", - " BERT_abstract_emb_right \\\n", - "0 NaN \n", - "1 [-0.28667202591896057, -0.4099476933479309, 0.... \n", - "2 [0.12320789694786072, 0.2723684310913086, 0.05... \n", - "3 [0.17410606145858765, 0.6839145421981812, -0.8... \n", - "4 [0.4393930733203888, 0.7159943580627441, 0.647... \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 [-0.25435054302215576, -0.92085862159729, 1.68... \n", - "2 [0.5991100072860718, 0.15195603668689728, 0.59... \n", - "3 [-0.04499293863773346, 0.6921464204788208, -0.... \n", - "4 [0.5091343522071838, -0.05845202878117561, 1.0... \n", - "\n", - " textEmb_7props_left \\\n", - "0 [0.87660795, 0.4991357, -0.39552155, 0.7046891... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.8141036, 0.14491142, -0.59703183, 0.335001,... \n", - "3 [0.469377, 0.7162001, -0.36740896, 0.76742333,... \n", - "4 [-0.19995248, 0.65605164, -0.14234662, 0.43931... \n", - "\n", - " textEmb_7props_right \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... \n", - "1 [0.92698413, 0.32396156, -0.7647308, 0.6973268... \n", - "2 [-0.16750671, -0.17960861, -0.58211946, -0.687... \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... \n", - "4 [0.4293771, 1.1976917, 0.04422909, 0.5975481, ... \n", - "\n", - " textEmb_2props_left \\\n", - "0 [0.79082793, 0.53679967, -0.3825465, 0.6778466... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.91628444, 0.104261845, -0.49683735, 0.21296... \n", - "3 [0.4080446, 0.7498908, -0.2665757, 0.74437106,... \n", - "4 [-0.45549682, 0.73478854, -0.1980287, 0.436793... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... 0.832602 \n", - "1 [1.0344226, 0.39984593, -0.76180136, 0.8256311... 0.742638 \n", - "2 [-0.13534825, -0.23398273, -0.5165668, -0.7297... 0.647031 \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... 0.836531 \n", - "4 [0.33631665, 1.1661042, 0.13744242, 0.6776439,... 0.765589 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \n", - "0 0.823419 -1.000000 -1.000000 \n", - "1 0.734428 -1.000000 -1.000000 \n", - "2 0.707611 0.508060 0.455747 \n", - "3 0.847591 0.855959 0.770030 \n", - "4 0.780342 0.752693 0.515319 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "random-france", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.602876\n", - "std 0.146181\n", - "min 0.064503\n", - "25% 0.493110\n", - "50% 0.597949\n", - "75% 0.711631\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "incorporated-ambassador", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['node2', 'node1', 'id', 'node1_label', 'label', 'node2_label', 'sent',\n", - " 'node1_emb', 'node2_emb', 'bert2SentSim', 'abstract',\n", - " 'abstract_firstSent', 'BERT_abstract_emb',\n", - " 'BERT_abstract_firstSent_emb', 'abstract_right',\n", - " 'abstract_firstSent_right', 'BERT_abstract_emb_right',\n", - " 'BERT_abstract_firstSent_emb_right', 'textEmb_7props_left',\n", - " 'textEmb_7props_right', 'textEmb_2props_left', 'textEmb_2props_right',\n", - " 'textEmb_7props_cosSim', 'textEmb_2props_cosSim',\n", - " 'BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim'],\n", - " dtype='object')" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "original-grass", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.772184\n", - "std 0.122326\n", - "min 0.120480\n", - "25% 0.684141\n", - "50% 0.793718\n", - "75% 0.874284\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "under-rabbit", - "metadata": {}, - "source": [ - "# Embeddings Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "annoying-intake", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## Complex, Transe Embeddings Datasets generation" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "tamil-activity", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353LatestAnnot.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "immune-nashville", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "residential-cleaners", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "current-great", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_id
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id \n", - "0 Q454 \n", - "1 Q13648784 \n", - "2 Q178022 \n", - "3 Q21004260 \n", - "4 Q49112 " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "valued-progressive", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# wordSimSet = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "different-vancouver", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSimSet = set(p279WordSimSeededDF_wabs_text.node1.to_list() + p279WordSimSeededDF_wabs_text.node2.to_list() + p279Seeded_SiblingsDF3_wabs_text.node1.to_list() + p279Seeded_SiblingsDF3_wabs_text.node2.to_list() + wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quick-lewis", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "19166" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "collected-regular", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1499717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64763437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17144564\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4765290\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16000518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6423382\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2177259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q100448831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2857578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13577338\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q96158854\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7892\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29053864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7675683\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2380954\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77527200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21083881\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q211521\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66368425\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16023742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q97627995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16721350\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q32979618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4553362\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q98232491\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66194218\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5372\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42559432\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25481995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61466331\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6983403\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84105477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11002\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30107768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56753514\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91927989\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12047900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2144951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11698973\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q517386\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17097928\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5281737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27983054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19838691\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q101541623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17376918\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5193377\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23013268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66363580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55693905\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68131879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85803433\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29053744\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82785806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21406831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29957548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78710574\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6462051\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1042920\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7925\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56297152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2515879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28324850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28132458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2849391\n" - ] - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "compEmbeddings = {}\n", - "transeEmbeddings = {}\n", - "\n", - "for wordID in wordSimSet:\n", - " try:\n", - " resp = requests.get(\"http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID).json()['_source']\n", - " compEmbeddings[wordID] = resp['graph_embedding_complex']\n", - " transeEmbeddings[wordID] = resp['graph_embeddings_transe']\n", - " except:\n", - " print(\"Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "elect-gothic", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.DataFrame(compEmbeddings.items(), columns=['node', 'complex_embedding']).to_csv('../data/wordsim353_complex_embeddings.csv', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "combined-theme", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.DataFrame(transeEmbeddings.items(), columns=['node', 'transe_embedding']).to_csv('../data/wordsim353_transe_embeddings.csv', index=False)" - ] - }, - { - "cell_type": "markdown", - "id": "suffering-extraction", - "metadata": {}, - "source": [ - "# Target Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "hairy-tuition", - "metadata": {}, - "source": [ - "## Probase Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "opened-quarter", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = pd.read_csv('../data/probase/probase_WQnodes_subset_and_sim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "major-peter", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0node1_labelnode2_labelno_of_relationsnode1_qnodenode2_qnoden1_final_qnoden2_final_qnodesim
00factorage35167NaNNaNQ15061738Q1003432191.000000
15factorgender14230NaNQ48277Q15061738Q482770.913568
26factortemperature13660NaNNaNQ15061738P20760.909663
37metalcopper11142Q11426NaNQ11426Q158305000.890199
49variableage9375NaNNaNQ10954303Q1003432190.873703
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 node1_label node2_label no_of_relations node1_qnode \\\n", - "0 0 factor age 35167 NaN \n", - "1 5 factor gender 14230 NaN \n", - "2 6 factor temperature 13660 NaN \n", - "3 7 metal copper 11142 Q11426 \n", - "4 9 variable age 9375 NaN \n", - "\n", - " node2_qnode n1_final_qnode n2_final_qnode sim \n", - "0 NaN Q15061738 Q100343219 1.000000 \n", - "1 Q48277 Q15061738 Q48277 0.913568 \n", - "2 NaN Q15061738 P2076 0.909663 \n", - "3 NaN Q11426 Q15830500 0.890199 \n", - "4 NaN Q10954303 Q100343219 0.873703 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "photographic-character", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = probDF_Qnodes_DF_WQnodes1_subset.rename(columns={'n1_final_qnode': 'node1', 'n2_final_qnode': 'node2', 'sim': 'bert2SentSim'})" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "russian-proceeding", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim'] = 0.5 + 0.5 * probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim']" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "painted-selection", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 1.600841e+06\n", - "mean 5.429549e-01\n", - "std 5.363352e-02\n", - "min 5.000000e-01\n", - "25% 5.000000e-01\n", - "50% 5.331083e-01\n", - "75% 5.662167e-01\n", - "max 1.000000e+00\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim'].describe()" - ] - }, - { - "cell_type": "markdown", - "id": "removed-occupation", - "metadata": {}, - "source": [ - "# Retrofitting Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "consolidated-investigation", - "metadata": {}, - "outputs": [], - "source": [ - "def normalize(embedDict):\n", - " for key, val in embedDict.items():\n", - " temp = np.array([float(val1) for val1 in val])\n", - " temp2 = temp**2\n", - " embedDict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - " return embedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "irish-disposal", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchEmbeddings(df):\n", - " embedDict = {}\n", - " for _, row in df.iterrows():\n", - " embedDict[row.node] = row.value\n", - " return normalize(embedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "orange-person", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchNeighbours(df):\n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row.bert2SentSim))\n", - " \n", - " if row.node2 not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row.bert2SentSim))\n", - " print(max([len(neigh) for neigh in neighboursDict.values()]))\n", - " return neighboursDict" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "joined-kazakhstan", - "metadata": {}, - "outputs": [], - "source": [ - "def retrofit(embedDict, neighDict, weightCase):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - "# assert len(neighbs) == 1\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " if weightCase == 1:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sumOfEmbs) / ((len(neighbs)) + sumOfSims)\n", - " elif weightCase == 2:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " elif weightCase == 0.5:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sumOfEmbs) / ((len(neighbs))**0.5 + sumOfSims)\n", - " else:\n", - " raise\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "collected-performance", - "metadata": {}, - "outputs": [], - "source": [ - "def determineDistances(embedDict, newEmbedDict):\n", - " dist = []\n", - " for word in embedDict.keys():\n", - " dist.append(euclidean_distances([embedDict[word]], [newEmbedDict[word]])[0][0])\n", - " return dist" - ] - }, - { - "cell_type": "markdown", - "id": "later-dimension", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Attempts" - ] - }, - { - "cell_type": "markdown", - "id": "serious-milan", - "metadata": { - "heading_collapsed": true, - "hidden": true - }, - "source": [ - "## Sample attempt" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "substantial-aggregate", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text_sample = p279WordSimSeededDF_wabs_text[:1000]" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "id": "analyzed-passion", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "id": "japanese-defense", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "dying-nigeria", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "reduced-avenue", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1034" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "advised-hollywood", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "authentic-greene", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 1034.000000\n", - "mean 0.281990\n", - "std 0.054759\n", - "min 0.069792\n", - "25% 0.244698\n", - "50% 0.278019\n", - "75% 0.319656\n", - "max 0.450444\n", - "dtype: float64" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "variable-transportation", - "metadata": { - "heading_collapsed": true, - "hidden": true - }, - "source": [ - "## ChildPar dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "central-spyware", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "white-genesis", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "id": "registered-original", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "id": "experienced-conspiracy", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "18860" - ] - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "id": "every-interface", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 131, - "id": "specified-berry", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 18860.000000\n", - "mean 0.283712\n", - "std 0.056573\n", - "min 0.050719\n", - "25% 0.246137\n", - "50% 0.281897\n", - "75% 0.319687\n", - "max 0.564922\n", - "dtype: float64" - ] - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "incoming-calvin", - "metadata": {}, - "source": [ - "# Correlation Code" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "answering-exhaust", - "metadata": {}, - "outputs": [], - "source": [ - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - "LABELS = ['I','U','M']\n", - "def fetchCorrelationResults(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - " wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - " wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - "# wordSimMissingSet\n", - " print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n", - " print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - " print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - " print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " \n", - " print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " \n", - " cm_old = confusion_matrix(wordSim353AnnotDF_New2['category'], wordSim353AnnotDF_New2['textOld'].apply(labelSamples), labels=LABELS)\n", - " cm_new = confusion_matrix(wordSim353AnnotDF_New2['category'], wordSim353AnnotDF_New2['textNew'].apply(labelSamples), labels=LABELS)\n", - " \n", - " return wordSimMissingSet, cm_old, cm_new" - ] - }, - { - "cell_type": "markdown", - "id": "sacred-bacon", - "metadata": {}, - "source": [ - "# Dataset-Target Combinations" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "premier-crisis", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster = {}\n", - "newEmbedDictMaster = {}\n", - "confusionMatrixMaster = {}" - ] - }, - { - "cell_type": "markdown", - "id": "scientific-heading", - "metadata": {}, - "source": [ - "### Text Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "stretch-elizabeth", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-7-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "sapphire-bulgarian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding[-0.13148594, 0.20147827, 0.015393771, 1.12779...
1Q99898510text_embedding[0.19386396, 0.41306746, -0.32783666, 0.450188...
2Q99526025text_embedding[0.89479333, 0.27038768, 0.15989815, -0.092144...
3Q99365546text_embedding[0.10686234, 0.95048314, 0.32389534, 0.1960084...
4Q993308text_embedding[0.23211154, 0.060303785, -1.0003253, 0.637829...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "1 Q99898510 text_embedding \n", - "2 Q99526025 text_embedding \n", - "3 Q99365546 text_embedding \n", - "4 Q993308 text_embedding \n", - "\n", - " value \n", - "0 [-0.13148594, 0.20147827, 0.015393771, 1.12779... \n", - "1 [0.19386396, 0.41306746, -0.32783666, 0.450188... \n", - "2 [0.89479333, 0.27038768, 0.15989815, -0.092144... \n", - "3 [0.10686234, 0.95048314, 0.32389534, 0.1960084... \n", - "4 [0.23211154, 0.060303785, -1.0003253, 0.637829... " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "rising-lawyer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19155" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "closed-charles", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19155\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19155.000000\n", - "mean 0.271898\n", - "std 0.057984\n", - "min 0.000000\n", - "25% 0.231530\n", - "50% 0.268294\n", - "75% 0.308696\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3975352135008474, pvalue=2.274798622604064e-24)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3876948460943732, pvalue=2.944054929116869e-23)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4253385100650523, pvalue=3.397679519805734e-30)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.41910186320873755, pvalue=2.2966918648680457e-29)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.5950920245398773\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5153374233128835\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19155.000000\n", - "mean 0.193850\n", - "std 0.113418\n", - "min 0.000000\n", - "25% 0.086588\n", - "50% 0.192671\n", - "75% 0.291258\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3975352135008474, pvalue=2.274798622604064e-24)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3896871945725784, pvalue=1.7567320499364868e-23)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4253385100650523, pvalue=3.397679519805734e-30)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.429300613416863, pvalue=9.889526081071043e-31)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.5950920245398773\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5920245398773006\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19155.000000\n", - "mean 0.325848\n", - "std 0.071942\n", - "min 0.000000\n", - "25% 0.277981\n", - "50% 0.321763\n", - "75% 0.370070\n", - "max 0.648638\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3975352135008474, pvalue=2.274798622604064e-24)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.380602867202403, pvalue=1.7935601808141945e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4253385100650523, pvalue=3.397679519805734e-30)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3995893685604078, pvalue=7.608607437786723e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.5950920245398773\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.39570552147239263\n" - ] - } - ], - "source": [ - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_7props_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['text_7props_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _, confusionMatrixMaster['text_7props_19k_old_'+str(weightCase)], confusionMatrixMaster['text_7props_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "accessory-isolation", - "metadata": {}, - "source": [ - "### Text Embeddings - 2 props | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "bored-sweden", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-2-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "speaking-sharing", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding[-0.13148594, 0.20147827, 0.015393771, 1.12779...
1Q99898510text_embedding[0.19386396, 0.41306746, -0.32783666, 0.450188...
2Q99526025text_embedding[0.89479333, 0.27038768, 0.15989815, -0.092144...
3Q99365546text_embedding[0.10686234, 0.95048314, 0.32389534, 0.1960084...
4Q993308text_embedding[0.23211154, 0.060303785, -1.0003253, 0.637829...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "1 Q99898510 text_embedding \n", - "2 Q99526025 text_embedding \n", - "3 Q99365546 text_embedding \n", - "4 Q993308 text_embedding \n", - "\n", - " value \n", - "0 [-0.13148594, 0.20147827, 0.015393771, 1.12779... \n", - "1 [0.19386396, 0.41306746, -0.32783666, 0.450188... \n", - "2 [0.89479333, 0.27038768, 0.15989815, -0.092144... \n", - "3 [0.10686234, 0.95048314, 0.32389534, 0.1960084... \n", - "4 [0.23211154, 0.060303785, -1.0003253, 0.637829... " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "addressed-march", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19155" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "latter-spelling", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19155\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19155.000000\n", - "mean 0.270895\n", - "std 0.059990\n", - "min 0.000000\n", - "25% 0.228547\n", - "50% 0.266816\n", - "75% 0.309132\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3793643502923977, pvalue=2.45298661169592e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.40586371991954756, pvalue=1.2142237724855381e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.49079754601226994\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19155.000000\n", - "mean 0.194648\n", - "std 0.115900\n", - "min 0.000000\n", - "25% 0.083470\n", - "50% 0.191821\n", - "75% 0.294976\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.36958425592956784, pvalue=2.7849781516020684e-21)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.39348934596160956, pvalue=4.414924758703321e-26)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5766871165644172\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19155.000000\n", - "mean 0.323673\n", - "std 0.069955\n", - "min 0.000000\n", - "25% 0.277272\n", - "50% 0.319275\n", - "75% 0.365774\n", - "max 0.677490\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3746327832763941, pvalue=8.004468522493588e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.39398189437020814, pvalue=3.8343633718362455e-26)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.3834355828220859\n" - ] - } - ], - "source": [ - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_2props_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['text_2props_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['text_2props_19k_old_'+str(weightCase)], confusionMatrixMaster['text_2props_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "promising-estonia", - "metadata": {}, - "source": [ - "### Complex Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "flexible-creature", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "sustainable-nurse", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "amino-there", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "yellow-estate", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddings = {}\n", - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "necessary-house", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.316720\n", - "std 0.076381\n", - "min 0.000000\n", - "25% 0.261478\n", - "50% 0.313781\n", - "75% 0.370851\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3168500395328192, pvalue=7.486323665386832e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27202499209162273, pvalue=6.770258859650813e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.232133\n", - "std 0.142269\n", - "min 0.000000\n", - "25% 0.089938\n", - "50% 0.228553\n", - "75% 0.361251\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3361212489826738, pvalue=9.03613034020374e-19)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.29248433284517855, pvalue=7.890529591252537e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6618075801749271\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.375082\n", - "std 0.073982\n", - "min 0.000000\n", - "25% 0.330119\n", - "50% 0.377307\n", - "75% 0.421860\n", - "max 0.841769\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.26508277549218445, pvalue=3.0194195465523546e-12)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21338136285025483, pvalue=4.17252744630606e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5830903790087464\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['complex_19k_old_'+str(weightCase)], confusionMatrixMaster['complex_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "racial-tutorial", - "metadata": {}, - "source": [ - "### Transe Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "dominant-youth", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "complicated-indie", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "interstate-worst", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "color-newspaper", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "sealed-undergraduate", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.332525\n", - "std 0.085513\n", - "min 0.000000\n", - "25% 0.269043\n", - "50% 0.327802\n", - "75% 0.393660\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.23996930346932127, pvalue=2.6942170209534906e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21449104599327523, pvalue=3.4760310637715348e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.242979\n", - "std 0.150562\n", - "min 0.000000\n", - "25% 0.094960\n", - "50% 0.237343\n", - "75% 0.378069\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24439786532398405, pvalue=1.2600161404554345e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22590625729631375, pvalue=4.917533132159808e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.60932944606414\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.394277\n", - "std 0.086197\n", - "min 0.000000\n", - "25% 0.339162\n", - "50% 0.397921\n", - "75% 0.452267\n", - "max 0.850905\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24274131207452157, pvalue=1.6736422306859635e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.201734473314897, pvalue=2.7559659468673134e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6064139941690962\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "amber-priority", - "metadata": {}, - "source": [ - "### Complex Embeddings | Probase Target" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "coastal-beach", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "familiar-springer", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "duplicate-storm", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "unsigned-hungarian", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "mental-coaching", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17845\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 7.887688e-02\n", - "std 1.377091e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.314421e-01\n", - "max 5.041080e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31031745482774675, pvalue=3.150145092040765e-16)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.26161279947706156, pvalue=5.774092784287413e-13)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6268221574344023\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 1.910100e+04\n", - "mean 3.252887e-02\n", - "std 8.773144e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 1.094678e-03\n", - "max 5.041080e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.35020973149202944, pvalue=3.059720074110226e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3013432304449195, pvalue=1.0451590470362559e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6588921282798834\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 1.910100e+04\n", - "mean 1.251606e-01\n", - "std 2.222320e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.940167e-01\n", - "max 8.900593e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.14149430916593933, pvalue=0.00019608082976567604)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.14687524939411561, pvalue=5.22383486460822e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.1457725947521866\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_probase'] = embedDict\n", - "neighDict = fetchNeighbours(probDF_Qnodes_DF_WQnodes1_subset)\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_probase_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "sticky-light", - "metadata": {}, - "source": [ - "### Transe Embeddings | Probase Target" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "normal-house", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "reserved-sport", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "norman-graph", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "identical-amsterdam", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
.........
19096Q2963354[0.126148477, -0.760043263, 0.834101379, 0.413...
19097Q412770[-0.131047472, -0.532605469, -0.180144981, -0....
19098Q8063082[0.173550904, -0.246142939, 0.750203907, 0.030...
19099Q58308662[0.572182953, 0.186988175, -0.116030365, -0.35...
19100Q7205879[0.752269626, -0.460156113, 0.517503202, 0.019...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3...\n", - "... ... ...\n", - "19096 Q2963354 [0.126148477, -0.760043263, 0.834101379, 0.413...\n", - "19097 Q412770 [-0.131047472, -0.532605469, -0.180144981, -0....\n", - "19098 Q8063082 [0.173550904, -0.246142939, 0.750203907, 0.030...\n", - "19099 Q58308662 [0.572182953, 0.186988175, -0.116030365, -0.35...\n", - "19100 Q7205879 [0.752269626, -0.460156113, 0.517503202, 0.019...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "knowing-register", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "inside-opportunity", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17845\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 8.215694e-02\n", - "std 1.439020e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.305726e-01\n", - "max 5.315488e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.22012582471779607, pvalue=6.9001945281841384e-09)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.19941082640413085, pvalue=3.969975785916229e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6472303206997084\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 1.910100e+04\n", - "mean 3.399453e-02\n", - "std 9.216743e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 1.230265e-03\n", - "max 5.315488e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24783606125619878, pvalue=6.903890636652704e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22349921038500295, pvalue=7.473348989752392e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 1.910100e+04\n", - "mean 1.302927e-01\n", - "std 2.320257e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.960976e-01\n", - "max 9.949517e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12855892543728606, pvalue=0.0007155142288469726)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.13749877727529278, pvalue=0.00015240104075019828)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.17784256559766765\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_probase'] = embedDict\n", - "neighDict = fetchNeighbours(probDF_Qnodes_DF_WQnodes1_subset)\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_probase_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "listed-parent", - "metadata": {}, - "source": [ - "### Complex Embeddings | Probase + 19k + 19k Target" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "sustained-benchmark", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "qualified-chase", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "occupational-survival", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "intermediate-netherlands", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "piano-delta", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.302721\n", - "std 0.067184\n", - "min 0.000000\n", - "25% 0.259615\n", - "50% 0.294771\n", - "75% 0.342928\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31582754528140355, pvalue=9.373921755437325e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27369250100948833, pvalue=4.756656623381545e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6326530612244898\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.178804\n", - "std 0.139703\n", - "min 0.000000\n", - "25% 0.054379\n", - "50% 0.137749\n", - "75% 0.307442\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3464370368444909, pvalue=7.656876025494246e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3011763909407297, pvalue=1.0831987277611373e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.402505\n", - "std 0.098028\n", - "min 0.000000\n", - "25% 0.339741\n", - "50% 0.393894\n", - "75% 0.452606\n", - "max 0.889403\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12191472957942284, pvalue=0.0013338871853105486)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.14137053781971248, pvalue=9.875366583327447e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.16034985422740525\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_probase_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_probase_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "square-outreach", - "metadata": {}, - "source": [ - "### Transe Embeddings | Probase + 19k + 19k Target" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "powered-kidney", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "eligible-mercury", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "passing-france", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "catholic-flexibility", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
.........
19096Q2963354[0.126148477, -0.760043263, 0.834101379, 0.413...
19097Q412770[-0.131047472, -0.532605469, -0.180144981, -0....
19098Q8063082[0.173550904, -0.246142939, 0.750203907, 0.030...
19099Q58308662[0.572182953, 0.186988175, -0.116030365, -0.35...
19100Q7205879[0.752269626, -0.460156113, 0.517503202, 0.019...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3...\n", - "... ... ...\n", - "19096 Q2963354 [0.126148477, -0.760043263, 0.834101379, 0.413...\n", - "19097 Q412770 [-0.131047472, -0.532605469, -0.180144981, -0....\n", - "19098 Q8063082 [0.173550904, -0.246142939, 0.750203907, 0.030...\n", - "19099 Q58308662 [0.572182953, 0.186988175, -0.116030365, -0.35...\n", - "19100 Q7205879 [0.752269626, -0.460156113, 0.517503202, 0.019...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "every-transmission", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "floral-union", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.316457\n", - "std 0.074755\n", - "min 0.000000\n", - "25% 0.265029\n", - "50% 0.307908\n", - "75% 0.361417\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.22203711859153544, pvalue=5.1043215609543335e-09)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.20512238050033801, pvalue=1.6083667850582075e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6443148688046647\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.186190\n", - "std 0.146220\n", - "min 0.000000\n", - "25% 0.056864\n", - "50% 0.144985\n", - "75% 0.307240\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2479273527617227, pvalue=6.816190052635217e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2263056114290315, pvalue=4.5887579264134097e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.597667638483965\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.421187\n", - "std 0.108116\n", - "min 0.000000\n", - "25% 0.350740\n", - "50% 0.416101\n", - "75% 0.480072\n", - "max 0.972091\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12731453008255086, pvalue=0.0008059106457544173)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1476648434866464, pvalue=4.7610094969077205e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.2594752186588921\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_probase_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_probase_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "organic-earth", - "metadata": {}, - "source": [ - "### Abstract Text Embeddings | 19k+19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "royal-update", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "import re\n", - "absEmbeddings = {}\n", - "for _, row in pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]).iterrows():\n", - " if not(pd.isna(row['BERT_abstract_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in row['BERT_abstract_emb'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node1_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node1_emb'][1:-1])))])\n", - " \n", - " if not(pd.isna(row['BERT_abstract_emb_right'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in row['BERT_abstract_emb_right'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node2_emb'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node2_emb'][1:-1])))])" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "straight-continuity", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "pursuant-compact", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "australian-legend", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "advanced-pattern", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "funded-third", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "identical-aspect", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategory
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454U
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784U
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022U
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260M
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112M
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id category \n", - "0 Q454 U \n", - "1 Q13648784 U \n", - "2 Q178022 U \n", - "3 Q21004260 M \n", - "4 Q49112 M " - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "specific-namibia", - "metadata": {}, - "outputs": [], - "source": [ - "missingWordSimSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in absEmbeddings)] + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in absEmbeddings)])" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "affected-consolidation", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3.3354244232177734 s\n", - "0.11755561828613281 s\n", - "0.11744570732116699 s\n", - "0.1175832748413086 s\n", - "0.11750054359436035 s\n", - "0.11730837821960449 s\n", - "0.11754989624023438 s\n", - "0.11766695976257324 s\n", - "0.11713695526123047 s\n", - "0.11739706993103027 s\n", - "0.12069988250732422 s\n", - "0.11744093894958496 s\n", - "0.11738061904907227 s\n", - "0.11722540855407715 s\n", - "0.11743450164794922 s\n", - "0.11770343780517578 s\n", - "0.11734700202941895 s\n", - "0.11752867698669434 s\n", - "0.11753010749816895 s\n", - "0.11727476119995117 s\n", - "0.11757302284240723 s\n", - "0.11744475364685059 s\n", - "0.1178896427154541 s\n", - "0.11759018898010254 s\n", - "0.11737680435180664 s\n", - "0.11777734756469727 s\n", - "0.11771225929260254 s\n", - "0.11792659759521484 s\n", - "0.1174314022064209 s\n", - "0.1175081729888916 s\n", - "0.11757636070251465 s\n", - "0.11760926246643066 s\n", - "0.11748123168945312 s\n", - "0.11753368377685547 s\n", - "0.11712884902954102 s\n", - "0.11767840385437012 s\n", - "0.11764121055603027 s\n", - "0.11763525009155273 s\n", - "0.11754012107849121 s\n", - "0.11885714530944824 s\n" - ] - } - ], - "source": [ - "for _, row in wordSim353AnnotDF_New.iterrows():\n", - " if row.word1_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word1_kg_id] = getSentEmbeddings(row['Word 1'], 'bert-base-nli-mean-tokens')\n", - " if row.word2_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word2_kg_id] = getSentEmbeddings(row['Word 2'], 'bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "fuzzy-attack", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingWordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "hawaiian-portal", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19166\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19166.000000\n", - "mean 0.336606\n", - "std 0.081060\n", - "min 0.000000\n", - "25% 0.278247\n", - "50% 0.326289\n", - "75% 0.388139\n", - "max 0.669782\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3471431474655109, pvalue=5.660815639939061e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.35383380764979844, pvalue=1.6754686847593527e-22)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5697674418604651\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19166.000000\n", - "mean 0.244583\n", - "std 0.150115\n", - "min 0.000000\n", - "25% 0.103316\n", - "50% 0.233314\n", - "75% 0.372639\n", - "max 0.669782\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.34735894519691607, pvalue=5.347633678079643e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3462632061224712, pvalue=1.2793035570514484e-21)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.627906976744186\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19166.000000\n", - "mean 0.400089\n", - "std 0.083229\n", - "min 0.000000\n", - "25% 0.344853\n", - "50% 0.397861\n", - "75% 0.451782\n", - "max 0.835283\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.32390174521065745, pvalue=1.3650315049340146e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3325159043509967, pvalue=4.65056862032923e-20)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.47093023255813954\n" - ] - } - ], - "source": [ - "embedDict = normalize(absEmbeddings)\n", - "embedDictMaster['abstract_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['abstract_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['abstract_19k_old_'+str(weightCase)], confusionMatrixMaster['abstract_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "central-valley", - "metadata": {}, - "source": [ - "### Abstract 1st Sentence Text Embeddings | 19k+19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "occupied-emission", - "metadata": {}, - "outputs": [], - "source": [ - "import re\n", - "absEmbeddings = {}\n", - "for _, row in pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]).iterrows():\n", - " if not(pd.isna(row['BERT_abstract_firstSent_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in row['BERT_abstract_firstSent_emb'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node1_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node1_emb'][1:-1])))])\n", - " \n", - " if not(pd.isna(row['BERT_abstract_firstSent_emb_right'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in row['BERT_abstract_firstSent_emb_right'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node2_emb'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node2_emb'][1:-1])))])" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "sexual-press", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "cognitive-import", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "irish-north", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "neural-communications", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "apart-church", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "monthly-enough", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategory
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454U
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784U
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022U
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260M
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112M
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id category \n", - "0 Q454 U \n", - "1 Q13648784 U \n", - "2 Q178022 U \n", - "3 Q21004260 M \n", - "4 Q49112 M " - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "varying-plaza", - "metadata": {}, - "outputs": [], - "source": [ - "missingWordSimSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in absEmbeddings)] + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in absEmbeddings)])" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "changing-cycle", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.11401677131652832 s\n", - "0.11957383155822754 s\n", - "0.09752821922302246 s\n", - "0.128997802734375 s\n", - "0.11990189552307129 s\n", - "0.11844491958618164 s\n", - "0.11752724647521973 s\n", - "0.11877274513244629 s\n", - "0.11719059944152832 s\n", - "0.11760425567626953 s\n", - "0.11708760261535645 s\n", - "0.09807181358337402 s\n", - "0.0916135311126709 s\n", - "0.09286952018737793 s\n", - "0.0907738208770752 s\n", - "0.0915842056274414 s\n", - "0.09347748756408691 s\n", - "0.08993768692016602 s\n", - "0.10148978233337402 s\n", - "0.11854410171508789 s\n", - "0.12027955055236816 s\n", - "0.13148927688598633 s\n", - "0.11908864974975586 s\n", - "0.13748478889465332 s\n", - "0.13097643852233887 s\n", - "0.11984562873840332 s\n", - "0.12159109115600586 s\n", - "0.12565040588378906 s\n", - "0.1192171573638916 s\n", - "0.14190435409545898 s\n", - "0.128098726272583 s\n", - "0.1173861026763916 s\n", - "0.11848211288452148 s\n", - "0.11741471290588379 s\n", - "0.11730766296386719 s\n", - "0.12353205680847168 s\n", - "0.11716032028198242 s\n", - "0.11889147758483887 s\n", - "0.11724376678466797 s\n", - "0.11714792251586914 s\n" - ] - } - ], - "source": [ - "for _, row in wordSim353AnnotDF_New.iterrows():\n", - " if row.word1_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word1_kg_id] = getSentEmbeddings(row['Word 1'], 'bert-base-nli-mean-tokens')\n", - " if row.word2_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word2_kg_id] = getSentEmbeddings(row['Word 2'], 'bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "documentary-midnight", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingWordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "sixth-paradise", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19166\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19166.000000\n", - "mean 0.339064\n", - "std 0.072734\n", - "min 0.000000\n", - "25% 0.287403\n", - "50% 0.334725\n", - "75% 0.388172\n", - "max 0.660678\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3571490077264898, pvalue=4.7415066582386246e-21)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3713906787854944, pvalue=1.253257701630852e-24)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6017441860465116\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19166.000000\n", - "mean 0.244476\n", - "std 0.145834\n", - "min 0.000000\n", - "25% 0.104152\n", - "50% 0.234678\n", - "75% 0.376765\n", - "max 0.660678\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.37186923032141733, pvalue=1.0985961673989065e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.37051869405377086, pvalue=1.6123151472069758e-24)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6540697674418605\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19166.000000\n", - "mean 0.404541\n", - "std 0.081848\n", - "min 0.000000\n", - "25% 0.351736\n", - "50% 0.401690\n", - "75% 0.453416\n", - "max 0.872588\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31762341611315487, pvalue=5.624902334302071e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.33907069116618244, pvalue=8.52432972070843e-21)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.4941860465116279\n" - ] - } - ], - "source": [ - "embedDict = normalize(absEmbeddings)\n", - "embedDictMaster['abstract_firstSent_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['abstract_firstSent_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _, confusionMatrixMaster['abstract_firstSent_19k_old_'+str(weightCase)], confusionMatrixMaster['abstract_firstSent_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "assigned-cameroon", - "metadata": {}, - "source": [ - "### Combination of all old embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "smooth-playlist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['text_7props_19k', 'text_2props_19k', 'complex_19k', 'transe_19k', 'complex_probase', 'transe_probase', 'complex_probase_19k', 'transe_probase_19k', 'abstract_19k', 'abstract_firstSent_19k'])" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "embedDictMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "material-design", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['text_7props_19k_1', 'text_7props_19k_2', 'text_7props_19k_0.5', 'text_2props_19k_1', 'text_2props_19k_2', 'text_2props_19k_0.5', 'complex_19k_1', 'complex_19k_2', 'complex_19k_0.5', 'transe_19k_1', 'transe_19k_2', 'transe_19k_0.5', 'complex_probase_1', 'complex_probase_2', 'complex_probase_0.5', 'transe_probase_1', 'transe_probase_2', 'transe_probase_0.5', 'complex_probase_19k_1', 'complex_probase_19k_2', 'complex_probase_19k_0.5', 'transe_probase_19k_1', 'transe_probase_19k_2', 'transe_probase_19k_0.5', 'abstract_19k_1', 'abstract_19k_2', 'abstract_19k_0.5', 'abstract_firstSent_19k_1', 'abstract_firstSent_19k_2', 'abstract_firstSent_19k_0.5'])" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newEmbedDictMaster.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "verbal-frederick", - "metadata": {}, - "source": [ - "#### Compl + Transe + Abstract" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "removed-conditions", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictConcat = {}\n", - "for key1 in ['complex_19k', 'transe_19k', \n", - " 'abstract_firstSent_19k']:\n", - " for word in embedDictMaster[key1].keys():\n", - " if word not in embedDictConcat:\n", - " embedDictConcat[word] = []\n", - " embedDictConcat[word].append(embedDictMaster[key1][word])\n", - "for word in embedDictConcat.keys():\n", - " embedDictConcat[word] = [item for sublist in embedDictConcat[word] for item in sublist]" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "indie-washington", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Size of embedding: 968\n" - ] - } - ], - "source": [ - "print(f\"Size of embedding: {len(embedDictConcat['Q18037012'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "caring-wellington", - "metadata": {}, - "outputs": [], - "source": [ - "for word1 in list(embedDictConcat.keys()):\n", - " if len(embedDictConcat[word1]) != 968:\n", - " del embedDictConcat[word1]" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "twelve-tribute", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19101.0\n", - "mean 968.0\n", - "std 0.0\n", - "min 968.0\n", - "25% 968.0\n", - "50% 968.0\n", - "75% 968.0\n", - "max 968.0\n", - "dtype: float64" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series([len(val1) for val1 in embedDictConcat.values()]).describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "animated-weight", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.336903\n", - "std 0.071873\n", - "min 0.000000\n", - "25% 0.284286\n", - "50% 0.332284\n", - "75% 0.389200\n", - "max 0.596558\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31344285039654224, pvalue=1.587990989990702e-16)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2983652058391759, pvalue=2.0692364624319403e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6676384839650146\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.245075\n", - "std 0.146398\n", - "min 0.000000\n", - "25% 0.099960\n", - "50% 0.239725\n", - "75% 0.380577\n", - "max 0.596558\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3270255968193857, pvalue=7.482780885295614e-18)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3144288703997577, pvalue=4.696112489737555e-18)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6880466472303207\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.400303\n", - "std 0.071506\n", - "min 0.000000\n", - "25% 0.357059\n", - "50% 0.402058\n", - "75% 0.445388\n", - "max 0.813749\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2967991230842074, pvalue=5.639053240442108e-15)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2739615906247492, pvalue=4.489403776140874e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_19k_v1'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_19k_v1_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "suspected-footage", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.321205\n", - "std 0.063429\n", - "min 0.000000\n", - "25% 0.277493\n", - "50% 0.311720\n", - "75% 0.359268\n", - "max 0.596557\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2891828519936888, pvalue=2.717366700252014e-14)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27713398557337643, pvalue=2.2907553462981174e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6501457725947521\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.188928\n", - "std 0.144828\n", - "min 0.000000\n", - "25% 0.059667\n", - "50% 0.147733\n", - "75% 0.327197\n", - "max 0.596557\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.33562487778756755, pvalue=1.0136749729444057e-18)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.31665315908408964, pvalue=2.7384643013776528e-18)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.427234\n", - "std 0.094690\n", - "min 0.000000\n", - "25% 0.367149\n", - "50% 0.418971\n", - "75% 0.473102\n", - "max 0.895330\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.13050673469358315, pvalue=0.0005927381978235836)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1636905372538761, pvalue=6.524566396115546e-06)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.22157434402332363\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_probase_19k_v1'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_probase_19k__v1_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "second-norway", - "metadata": {}, - "source": [ - "#### Text_7props + Text_2props + Complex + Transe + Abstract + Abstract_FirstSent" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "guided-accounting", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictConcat = {}\n", - "for key1 in ['text_7props_19k', 'text_2props_19k', 'complex_19k', 'transe_19k', \n", - " 'abstract_19k', 'abstract_firstSent_19k']:\n", - " for word in embedDictMaster[key1].keys():\n", - " if word not in embedDictConcat:\n", - " embedDictConcat[word] = []\n", - " embedDictConcat[word].append(embedDictMaster[key1][word])\n", - "for word in embedDictConcat.keys():\n", - " embedDictConcat[word] = [item for sublist in embedDictConcat[word] for item in sublist]" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "creative-advice", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Size of embedding: 3784\n" - ] - } - ], - "source": [ - "print(f\"Size of embedding: {len(embedDictConcat['Q18037012'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "apart-storm", - "metadata": {}, - "outputs": [], - "source": [ - "for word1 in list(embedDictConcat.keys()):\n", - " if len(embedDictConcat[word1]) != 3784:\n", - " del embedDictConcat[word1]" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "foreign-merchant", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19090.0\n", - "mean 3784.0\n", - "std 0.0\n", - "min 3784.0\n", - "25% 3784.0\n", - "50% 3784.0\n", - "75% 3784.0\n", - "max 3784.0\n", - "dtype: float64" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series([len(val1) for val1 in embedDictConcat.values()]).describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "aquatic-harbor", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19090\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19090.000000\n", - "mean 0.318414\n", - "std 0.060577\n", - "min 0.000000\n", - "25% 0.273273\n", - "50% 0.313881\n", - "75% 0.362231\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.40347307747318084, pvalue=5.629213176377413e-25)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.40536224043013125, pvalue=1.6868252763103453e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6307692307692307\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19090.000000\n", - "mean 0.230697\n", - "std 0.135101\n", - "min 0.000000\n", - "25% 0.097307\n", - "50% 0.223935\n", - "75% 0.356438\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.40442451164800897, pvalue=4.371701842100601e-25)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.4101503518414275, pvalue=4.1055209935697305e-28)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19090.000000\n", - "mean 0.378997\n", - "std 0.061137\n", - "min 0.000000\n", - "25% 0.342927\n", - "50% 0.379359\n", - "75% 0.416067\n", - "max 0.760023\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3828276431671376, pvalue=1.2015280268194575e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.36987136293537864, pvalue=3.618695156207996e-23)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5415384615384615\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_19k_v2'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_19k_v2_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "behavioral-brooks", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19090\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19090.000000\n", - "mean 0.304466\n", - "std 0.054097\n", - "min 0.000000\n", - "25% 0.266260\n", - "50% 0.295631\n", - "75% 0.337646\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3563958420194592, pvalue=7.705212357023742e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.36941390801600477, pvalue=4.091096997249633e-23)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6092307692307692\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19090.000000\n", - "mean 0.178573\n", - "std 0.134771\n", - "min 0.000000\n", - "25% 0.057617\n", - "50% 0.140175\n", - "75% 0.314839\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.4167472980442226, pvalue=1.5499840293424274e-26)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.41238438242524034, pvalue=2.1128593107239733e-28)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6553846153846153\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19090.000000\n", - "mean 0.405175\n", - "std 0.085240\n", - "min 0.000000\n", - "25% 0.352177\n", - "50% 0.394099\n", - "75% 0.443428\n", - "max 0.797620\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.1299009113611685, pvalue=0.0008902251998159792)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1761010833372823, pvalue=2.3561612238907513e-06)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.16923076923076924\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_probase_19k_v2'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_probase_19k_v2_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "quality-insured", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ideal-pipeline", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "organized-student", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "alternative-cloud", - "metadata": {}, - "source": [ - "### Text Embeddings | 19k + 19k dataset unweighted" - ] - }, - { - "cell_type": "code", - "execution_count": 194, - "id": "dangerous-carrier", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-7-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "fossil-exemption", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding[-0.13148594, 0.20147827, 0.015393771, 1.12779...
1Q99898510text_embedding[0.19386396, 0.41306746, -0.32783666, 0.450188...
2Q99526025text_embedding[0.89479333, 0.27038768, 0.15989815, -0.092144...
3Q99365546text_embedding[0.10686234, 0.95048314, 0.32389534, 0.1960084...
4Q993308text_embedding[0.23211154, 0.060303785, -1.0003253, 0.637829...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "1 Q99898510 text_embedding \n", - "2 Q99526025 text_embedding \n", - "3 Q99365546 text_embedding \n", - "4 Q993308 text_embedding \n", - "\n", - " value \n", - "0 [-0.13148594, 0.20147827, 0.015393771, 1.12779... \n", - "1 [0.19386396, 0.41306746, -0.32783666, 0.450188... \n", - "2 [0.89479333, 0.27038768, 0.15989815, -0.092144... \n", - "3 [0.10686234, 0.95048314, 0.32389534, 0.1960084... \n", - "4 [0.23211154, 0.060303785, -1.0003253, 0.637829... " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "antique-purchase", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19155" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 192, - "id": "automatic-monitor", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0membedDict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfetchEmbeddings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtextEmb_7props_DF\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0membedDictMaster\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'text_7props_19k_uw'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0membedDict\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mneighDict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfetchNeighbours\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconcat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mp279WordSimSeededDF_wabs_text\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp279Seeded_SiblingsDF3_wabs_text\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"No. of keys in embedDict: {len(embedDict.keys())}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36mfetchNeighbours\u001b[0;34m(df)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfetchNeighbours\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mneighboursDict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterrows\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnode1\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mneighboursDict\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mneighboursDict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnode1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36miterrows\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1069\u001b[0m \u001b[0mklass\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_constructor_sliced\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1070\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1071\u001b[0;31m \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mklass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1072\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1073\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, index, dtype, name, copy, fastpath)\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 366\u001b[0m \u001b[0mgeneric\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mNDFrame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 367\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 368\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_set_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfastpath\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 369\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m__setattr__\u001b[0;34m(self, name, value)\u001b[0m\n\u001b[1;32m 5482\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5483\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5484\u001b[0;31m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5485\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5486\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36mname\u001b[0;34m(self, value)\u001b[0m\n\u001b[1;32m 536\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetter\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 537\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mLabel\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 538\u001b[0;31m \u001b[0mvalidate_all_hashable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror_name\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34mf\"{type(self).__name__}.name\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 539\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"_name\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 540\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/dtypes/common.py\u001b[0m in \u001b[0;36mvalidate_all_hashable\u001b[0;34m(error_name, *args)\u001b[0m\n\u001b[1;32m 1760\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1761\u001b[0m \"\"\"\n\u001b[0;32m-> 1762\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mis_hashable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1763\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0merror_name\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1764\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{error_name} must be a hashable type\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/dtypes/common.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1760\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1761\u001b[0m \"\"\"\n\u001b[0;32m-> 1762\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mis_hashable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1763\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0merror_name\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1764\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{error_name} must be a hashable type\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/dtypes/inference.py\u001b[0m in \u001b[0;36mis_hashable\u001b[0;34m(obj)\u001b[0m\n\u001b[1;32m 351\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 353\u001b[0;31m \u001b[0mhash\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 354\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 355\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_7props_19k_uw'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['text_7props_19k_uw_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _, confusionMatrixMaster['text_7props_19k_uw_old_'+str(weightCase)], confusionMatrixMaster['text_7props_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "horizontal-repair", - "metadata": {}, - "source": [ - "### Text Embeddings - 2 props | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "vital-royal", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-2-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "adopted-edwards", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding[-0.13148594, 0.20147827, 0.015393771, 1.12779...
1Q99898510text_embedding[0.19386396, 0.41306746, -0.32783666, 0.450188...
2Q99526025text_embedding[0.89479333, 0.27038768, 0.15989815, -0.092144...
3Q99365546text_embedding[0.10686234, 0.95048314, 0.32389534, 0.1960084...
4Q993308text_embedding[0.23211154, 0.060303785, -1.0003253, 0.637829...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "1 Q99898510 text_embedding \n", - "2 Q99526025 text_embedding \n", - "3 Q99365546 text_embedding \n", - "4 Q993308 text_embedding \n", - "\n", - " value \n", - "0 [-0.13148594, 0.20147827, 0.015393771, 1.12779... \n", - "1 [0.19386396, 0.41306746, -0.32783666, 0.450188... \n", - "2 [0.89479333, 0.27038768, 0.15989815, -0.092144... \n", - "3 [0.10686234, 0.95048314, 0.32389534, 0.1960084... \n", - "4 [0.23211154, 0.060303785, -1.0003253, 0.637829... " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "equipped-vaccine", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19155" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "fourth-drawing", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19155\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19155.000000\n", - "mean 0.270895\n", - "std 0.059990\n", - "min 0.000000\n", - "25% 0.228547\n", - "50% 0.266816\n", - "75% 0.309132\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3793643502923977, pvalue=2.45298661169592e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.40586371991954756, pvalue=1.2142237724855381e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.49079754601226994\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19155.000000\n", - "mean 0.194648\n", - "std 0.115900\n", - "min 0.000000\n", - "25% 0.083470\n", - "50% 0.191821\n", - "75% 0.294976\n", - "max 0.564922\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.36958425592956784, pvalue=2.7849781516020684e-21)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.39348934596160956, pvalue=4.414924758703321e-26)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5766871165644172\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19155.000000\n", - "mean 0.323673\n", - "std 0.069955\n", - "min 0.000000\n", - "25% 0.277272\n", - "50% 0.319275\n", - "75% 0.365774\n", - "max 0.677490\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 326\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37836622063614156, pvalue=3.15520072942914e-22)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3746327832763941, pvalue=8.004468522493588e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.39160232226212405, pvalue=7.580483725421636e-26)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.39398189437020814, pvalue=3.8343633718362455e-26)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.588957055214724\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.3834355828220859\n" - ] - } - ], - "source": [ - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_2props_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['text_2props_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['text_2props_19k_old_'+str(weightCase)], confusionMatrixMaster['text_2props_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "mobile-paradise", - "metadata": {}, - "source": [ - "### Complex Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "allied-newcastle", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "abstract-survey", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "wanted-parade", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "considered-azerbaijan", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddings = {}\n", - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "composite-shield", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.316720\n", - "std 0.076381\n", - "min 0.000000\n", - "25% 0.261478\n", - "50% 0.313781\n", - "75% 0.370851\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3168500395328192, pvalue=7.486323665386832e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27202499209162273, pvalue=6.770258859650813e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.232133\n", - "std 0.142269\n", - "min 0.000000\n", - "25% 0.089938\n", - "50% 0.228553\n", - "75% 0.361251\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3361212489826738, pvalue=9.03613034020374e-19)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.29248433284517855, pvalue=7.890529591252537e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6618075801749271\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.375082\n", - "std 0.073982\n", - "min 0.000000\n", - "25% 0.330119\n", - "50% 0.377307\n", - "75% 0.421860\n", - "max 0.841769\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.26508277549218445, pvalue=3.0194195465523546e-12)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21338136285025483, pvalue=4.17252744630606e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5830903790087464\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['complex_19k_old_'+str(weightCase)], confusionMatrixMaster['complex_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "crucial-translation", - "metadata": {}, - "source": [ - "### Transe Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "selected-gentleman", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "ranking-characterization", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "fewer-average", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "rational-present", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "interstate-episode", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.332525\n", - "std 0.085513\n", - "min 0.000000\n", - "25% 0.269043\n", - "50% 0.327802\n", - "75% 0.393660\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.23996930346932127, pvalue=2.6942170209534906e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21449104599327523, pvalue=3.4760310637715348e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.242979\n", - "std 0.150562\n", - "min 0.000000\n", - "25% 0.094960\n", - "50% 0.237343\n", - "75% 0.378069\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24439786532398405, pvalue=1.2600161404554345e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22590625729631375, pvalue=4.917533132159808e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.60932944606414\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.394277\n", - "std 0.086197\n", - "min 0.000000\n", - "25% 0.339162\n", - "50% 0.397921\n", - "75% 0.452267\n", - "max 0.850905\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24274131207452157, pvalue=1.6736422306859635e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.201734473314897, pvalue=2.7559659468673134e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6064139941690962\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "professional-cutting", - "metadata": {}, - "source": [ - "### Complex Embeddings | Probase Target" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "bridal-scope", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "premium-manufacturer", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "organic-above", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "removable-steps", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "rubber-principal", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17845\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 7.887688e-02\n", - "std 1.377091e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.314421e-01\n", - "max 5.041080e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31031745482774675, pvalue=3.150145092040765e-16)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.26161279947706156, pvalue=5.774092784287413e-13)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6268221574344023\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 1.910100e+04\n", - "mean 3.252887e-02\n", - "std 8.773144e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 1.094678e-03\n", - "max 5.041080e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.35020973149202944, pvalue=3.059720074110226e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3013432304449195, pvalue=1.0451590470362559e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6588921282798834\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 1.910100e+04\n", - "mean 1.251606e-01\n", - "std 2.222320e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.940167e-01\n", - "max 8.900593e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.14149430916593933, pvalue=0.00019608082976567604)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.14687524939411561, pvalue=5.22383486460822e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.1457725947521866\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_probase'] = embedDict\n", - "neighDict = fetchNeighbours(probDF_Qnodes_DF_WQnodes1_subset)\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_probase_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "congressional-teaching", - "metadata": {}, - "source": [ - "### Transe Embeddings | Probase Target" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "medieval-retail", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "artificial-dispatch", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "satellite-liquid", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "muslim-gospel", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
.........
19096Q2963354[0.126148477, -0.760043263, 0.834101379, 0.413...
19097Q412770[-0.131047472, -0.532605469, -0.180144981, -0....
19098Q8063082[0.173550904, -0.246142939, 0.750203907, 0.030...
19099Q58308662[0.572182953, 0.186988175, -0.116030365, -0.35...
19100Q7205879[0.752269626, -0.460156113, 0.517503202, 0.019...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3...\n", - "... ... ...\n", - "19096 Q2963354 [0.126148477, -0.760043263, 0.834101379, 0.413...\n", - "19097 Q412770 [-0.131047472, -0.532605469, -0.180144981, -0....\n", - "19098 Q8063082 [0.173550904, -0.246142939, 0.750203907, 0.030...\n", - "19099 Q58308662 [0.572182953, 0.186988175, -0.116030365, -0.35...\n", - "19100 Q7205879 [0.752269626, -0.460156113, 0.517503202, 0.019...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "fuzzy-seven", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "sapphire-prescription", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17845\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 8.215694e-02\n", - "std 1.439020e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.305726e-01\n", - "max 5.315488e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.22012582471779607, pvalue=6.9001945281841384e-09)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.19941082640413085, pvalue=3.969975785916229e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6472303206997084\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 1.910100e+04\n", - "mean 3.399453e-02\n", - "std 9.216743e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 1.230265e-03\n", - "max 5.315488e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24783606125619878, pvalue=6.903890636652704e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22349921038500295, pvalue=7.473348989752392e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 1.910100e+04\n", - "mean 1.302927e-01\n", - "std 2.320257e-01\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 1.490116e-08\n", - "75% 2.960976e-01\n", - "max 9.949517e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12855892543728606, pvalue=0.0007155142288469726)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.13749877727529278, pvalue=0.00015240104075019828)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.17784256559766765\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_probase'] = embedDict\n", - "neighDict = fetchNeighbours(probDF_Qnodes_DF_WQnodes1_subset)\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_probase_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "spiritual-johnson", - "metadata": {}, - "source": [ - "### Complex Embeddings | Probase + 19k + 19k Target" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "monthly-mexican", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "equipped-structure", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "natural-integer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodecomplex_embedding
0Q18037012[-0.263069391, 0.028501017, -0.034664098, 0.13...
1Q13112971[0.148671135, 0.003585682, 0.319970608, 0.2488...
2Q59336660[0.396341473, 0.148302898, 0.221964046, 0.5786...
3Q289472[-0.069007814, -0.053335845, -0.03083352, 0.56...
4Q1931010[0.366982907, -0.250219911, -0.287434697, 0.45...
.........
19096Q2963354[-0.377670556, 0.123239793, 0.159144968, 0.648...
19097Q412770[-0.082544975, 0.058447052, -0.614189446, 0.81...
19098Q8063082[0.132387042, -0.025238875, -0.262788028, 0.36...
19099Q58308662[0.459155083, -0.277395934, -0.454340786, 0.44...
19100Q7205879[0.133135661, -0.003577206, -0.233342946, 0.46...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node complex_embedding\n", - "0 Q18037012 [-0.263069391, 0.028501017, -0.034664098, 0.13...\n", - "1 Q13112971 [0.148671135, 0.003585682, 0.319970608, 0.2488...\n", - "2 Q59336660 [0.396341473, 0.148302898, 0.221964046, 0.5786...\n", - "3 Q289472 [-0.069007814, -0.053335845, -0.03083352, 0.56...\n", - "4 Q1931010 [0.366982907, -0.250219911, -0.287434697, 0.45...\n", - "... ... ...\n", - "19096 Q2963354 [-0.377670556, 0.123239793, 0.159144968, 0.648...\n", - "19097 Q412770 [-0.082544975, 0.058447052, -0.614189446, 0.81...\n", - "19098 Q8063082 [0.132387042, -0.025238875, -0.262788028, 0.36...\n", - "19099 Q58308662 [0.459155083, -0.277395934, -0.454340786, 0.44...\n", - "19100 Q7205879 [0.133135661, -0.003577206, -0.233342946, 0.46...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "joint-revision", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "rocky-announcement", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.302721\n", - "std 0.067184\n", - "min 0.000000\n", - "25% 0.259615\n", - "50% 0.294771\n", - "75% 0.342928\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31582754528140355, pvalue=9.373921755437325e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27369250100948833, pvalue=4.756656623381545e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6326530612244898\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.178804\n", - "std 0.139703\n", - "min 0.000000\n", - "25% 0.054379\n", - "50% 0.137749\n", - "75% 0.307442\n", - "max 0.600672\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3464370368444909, pvalue=7.656876025494246e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3011763909407297, pvalue=1.0831987277611373e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.402505\n", - "std 0.098028\n", - "min 0.000000\n", - "25% 0.339741\n", - "50% 0.393894\n", - "75% 0.452606\n", - "max 0.889403\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.34963457034499734, pvalue=3.525500513811503e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12191472957942284, pvalue=0.0013338871853105486)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.3027318092124757, pvalue=7.573910025067949e-17)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.14137053781971248, pvalue=9.875366583327447e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6647230320699709\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.16034985422740525\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['complex_probase_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['complex_probase_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "damaged-future", - "metadata": {}, - "source": [ - "### Transe Embeddings | Probase + 19k + 19k Target" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "stable-front", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "sublime-cleaner", - "metadata": {}, - "outputs": [], - "source": [ - "compEmbeddingsDF['transe_embedding'] = compEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "opposite-destiny", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "defined-disney", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
.........
19096Q2963354[0.126148477, -0.760043263, 0.834101379, 0.413...
19097Q412770[-0.131047472, -0.532605469, -0.180144981, -0....
19098Q8063082[0.173550904, -0.246142939, 0.750203907, 0.030...
19099Q58308662[0.572182953, 0.186988175, -0.116030365, -0.35...
19100Q7205879[0.752269626, -0.460156113, 0.517503202, 0.019...
\n", - "

19101 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3...\n", - "... ... ...\n", - "19096 Q2963354 [0.126148477, -0.760043263, 0.834101379, 0.413...\n", - "19097 Q412770 [-0.131047472, -0.532605469, -0.180144981, -0....\n", - "19098 Q8063082 [0.173550904, -0.246142939, 0.750203907, 0.030...\n", - "19099 Q58308662 [0.572182953, 0.186988175, -0.116030365, -0.35...\n", - "19100 Q7205879 [0.752269626, -0.460156113, 0.517503202, 0.019...\n", - "\n", - "[19101 rows x 2 columns]" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compEmbeddingsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "simplified-honolulu", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "suitable-theory", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.316457\n", - "std 0.074755\n", - "min 0.000000\n", - "25% 0.265029\n", - "50% 0.307908\n", - "75% 0.361417\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.22203711859153544, pvalue=5.1043215609543335e-09)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.20512238050033801, pvalue=1.6083667850582075e-08)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6443148688046647\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.186190\n", - "std 0.146220\n", - "min 0.000000\n", - "25% 0.056864\n", - "50% 0.144985\n", - "75% 0.307240\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2479273527617227, pvalue=6.816190052635217e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2263056114290315, pvalue=4.5887579264134097e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.597667638483965\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.421187\n", - "std 0.108116\n", - "min 0.000000\n", - "25% 0.350740\n", - "50% 0.416101\n", - "75% 0.480072\n", - "max 0.972091\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2509658430035214, pvalue=3.9754031639979325e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.12731453008255086, pvalue=0.0008059106457544173)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.22562477749827262, pvalue=5.15975984253164e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1476648434866464, pvalue=4.7610094969077205e-05)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.2594752186588921\n" - ] - } - ], - "source": [ - "embedDict = normalize(compEmbeddings)\n", - "embedDictMaster['transe_probase_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['transe_probase_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "chemical-ministry", - "metadata": {}, - "source": [ - "### Abstract Text Embeddings | 19k+19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "unusual-wesley", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "import re\n", - "absEmbeddings = {}\n", - "for _, row in pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]).iterrows():\n", - " if not(pd.isna(row['BERT_abstract_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in row['BERT_abstract_emb'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node1_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node1_emb'][1:-1])))])\n", - " \n", - " if not(pd.isna(row['BERT_abstract_emb_right'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in row['BERT_abstract_emb_right'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node2_emb'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node2_emb'][1:-1])))])" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "numerous-timer", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "detected-royalty", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "familiar-cabinet", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "overhead-intellectual", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "fifth-campbell", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "systematic-specialist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategory
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454U
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784U
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022U
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260M
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112M
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id category \n", - "0 Q454 U \n", - "1 Q13648784 U \n", - "2 Q178022 U \n", - "3 Q21004260 M \n", - "4 Q49112 M " - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "warming-medicare", - "metadata": {}, - "outputs": [], - "source": [ - "missingWordSimSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in absEmbeddings)] + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in absEmbeddings)])" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "convenient-honduras", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3.3354244232177734 s\n", - "0.11755561828613281 s\n", - "0.11744570732116699 s\n", - "0.1175832748413086 s\n", - "0.11750054359436035 s\n", - "0.11730837821960449 s\n", - "0.11754989624023438 s\n", - "0.11766695976257324 s\n", - "0.11713695526123047 s\n", - "0.11739706993103027 s\n", - "0.12069988250732422 s\n", - "0.11744093894958496 s\n", - "0.11738061904907227 s\n", - "0.11722540855407715 s\n", - "0.11743450164794922 s\n", - "0.11770343780517578 s\n", - "0.11734700202941895 s\n", - "0.11752867698669434 s\n", - "0.11753010749816895 s\n", - "0.11727476119995117 s\n", - "0.11757302284240723 s\n", - "0.11744475364685059 s\n", - "0.1178896427154541 s\n", - "0.11759018898010254 s\n", - "0.11737680435180664 s\n", - "0.11777734756469727 s\n", - "0.11771225929260254 s\n", - "0.11792659759521484 s\n", - "0.1174314022064209 s\n", - "0.1175081729888916 s\n", - "0.11757636070251465 s\n", - "0.11760926246643066 s\n", - "0.11748123168945312 s\n", - "0.11753368377685547 s\n", - "0.11712884902954102 s\n", - "0.11767840385437012 s\n", - "0.11764121055603027 s\n", - "0.11763525009155273 s\n", - "0.11754012107849121 s\n", - "0.11885714530944824 s\n" - ] - } - ], - "source": [ - "for _, row in wordSim353AnnotDF_New.iterrows():\n", - " if row.word1_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word1_kg_id] = getSentEmbeddings(row['Word 1'], 'bert-base-nli-mean-tokens')\n", - " if row.word2_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word2_kg_id] = getSentEmbeddings(row['Word 2'], 'bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "documentary-puppy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingWordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "rural-spyware", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19166\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19166.000000\n", - "mean 0.336606\n", - "std 0.081060\n", - "min 0.000000\n", - "25% 0.278247\n", - "50% 0.326289\n", - "75% 0.388139\n", - "max 0.669782\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3471431474655109, pvalue=5.660815639939061e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.35383380764979844, pvalue=1.6754686847593527e-22)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5697674418604651\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19166.000000\n", - "mean 0.244583\n", - "std 0.150115\n", - "min 0.000000\n", - "25% 0.103316\n", - "50% 0.233314\n", - "75% 0.372639\n", - "max 0.669782\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.34735894519691607, pvalue=5.347633678079643e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3462632061224712, pvalue=1.2793035570514484e-21)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.627906976744186\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19166.000000\n", - "mean 0.400089\n", - "std 0.083229\n", - "min 0.000000\n", - "25% 0.344853\n", - "50% 0.397861\n", - "75% 0.451782\n", - "max 0.835283\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.3498489915976348, pvalue=2.913399131760102e-20)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.32390174521065745, pvalue=1.3650315049340146e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.34236242720323, pvalue=3.60507767671425e-21)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3325159043509967, pvalue=4.65056862032923e-20)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.627906976744186\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.47093023255813954\n" - ] - } - ], - "source": [ - "embedDict = normalize(absEmbeddings)\n", - "embedDictMaster['abstract_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['abstract_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['abstract_19k_old_'+str(weightCase)], confusionMatrixMaster['abstract_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "angry-ladder", - "metadata": {}, - "source": [ - "### Abstract 1st Sentence Text Embeddings | 19k+19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "missing-velvet", - "metadata": {}, - "outputs": [], - "source": [ - "import re\n", - "absEmbeddings = {}\n", - "for _, row in pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]).iterrows():\n", - " if not(pd.isna(row['BERT_abstract_firstSent_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in row['BERT_abstract_firstSent_emb'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node1_emb'])):\n", - " absEmbeddings[row['node1']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node1_emb'][1:-1])))])\n", - " \n", - " if not(pd.isna(row['BERT_abstract_firstSent_emb_right'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in row['BERT_abstract_firstSent_emb_right'][1:-1].split(',')])\n", - " elif not(pd.isna(row['node2_emb'])):\n", - " absEmbeddings[row['node2']] = np.array([float(val1) for val1 in list(filter(lambda p: p, re.split(\"[\\n\\s]\", row['node2_emb'][1:-1])))])" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "increasing-ability", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "quarterly-collector", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "collaborative-yield", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "associate-seminar", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "falling-dublin", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "north-interpretation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategory
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454U
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784U
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022U
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260M
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112M
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id category \n", - "0 Q454 U \n", - "1 Q13648784 U \n", - "2 Q178022 U \n", - "3 Q21004260 M \n", - "4 Q49112 M " - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "willing-hanging", - "metadata": {}, - "outputs": [], - "source": [ - "missingWordSimSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in absEmbeddings)] + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in absEmbeddings)])" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "functional-mattress", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.11401677131652832 s\n", - "0.11957383155822754 s\n", - "0.09752821922302246 s\n", - "0.128997802734375 s\n", - "0.11990189552307129 s\n", - "0.11844491958618164 s\n", - "0.11752724647521973 s\n", - "0.11877274513244629 s\n", - "0.11719059944152832 s\n", - "0.11760425567626953 s\n", - "0.11708760261535645 s\n", - "0.09807181358337402 s\n", - "0.0916135311126709 s\n", - "0.09286952018737793 s\n", - "0.0907738208770752 s\n", - "0.0915842056274414 s\n", - "0.09347748756408691 s\n", - "0.08993768692016602 s\n", - "0.10148978233337402 s\n", - "0.11854410171508789 s\n", - "0.12027955055236816 s\n", - "0.13148927688598633 s\n", - "0.11908864974975586 s\n", - "0.13748478889465332 s\n", - "0.13097643852233887 s\n", - "0.11984562873840332 s\n", - "0.12159109115600586 s\n", - "0.12565040588378906 s\n", - "0.1192171573638916 s\n", - "0.14190435409545898 s\n", - "0.128098726272583 s\n", - "0.1173861026763916 s\n", - "0.11848211288452148 s\n", - "0.11741471290588379 s\n", - "0.11730766296386719 s\n", - "0.12353205680847168 s\n", - "0.11716032028198242 s\n", - "0.11889147758483887 s\n", - "0.11724376678466797 s\n", - "0.11714792251586914 s\n" - ] - } - ], - "source": [ - "for _, row in wordSim353AnnotDF_New.iterrows():\n", - " if row.word1_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word1_kg_id] = getSentEmbeddings(row['Word 1'], 'bert-base-nli-mean-tokens')\n", - " if row.word2_kg_id not in absEmbeddings:\n", - " absEmbeddings[row.word2_kg_id] = getSentEmbeddings(row['Word 2'], 'bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "macro-headline", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingWordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "provincial-matter", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19166\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19166.000000\n", - "mean 0.339064\n", - "std 0.072734\n", - "min 0.000000\n", - "25% 0.287403\n", - "50% 0.334725\n", - "75% 0.388172\n", - "max 0.660678\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3571490077264898, pvalue=4.7415066582386246e-21)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3713906787854944, pvalue=1.253257701630852e-24)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6017441860465116\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19166.000000\n", - "mean 0.244476\n", - "std 0.145834\n", - "min 0.000000\n", - "25% 0.104152\n", - "50% 0.234678\n", - "75% 0.376765\n", - "max 0.660678\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.37186923032141733, pvalue=1.0985961673989065e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.37051869405377086, pvalue=1.6123151472069758e-24)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6540697674418605\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19166.000000\n", - "mean 0.404541\n", - "std 0.081848\n", - "min 0.000000\n", - "25% 0.351736\n", - "50% 0.401690\n", - "75% 0.453416\n", - "max 0.872588\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 344\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.37808291427810886, pvalue=2.1412324981626763e-23)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31762341611315487, pvalue=5.624902334302071e-17)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.36636798649447055, pvalue=5.2187863707845704e-24)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.33907069116618244, pvalue=8.52432972070843e-21)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6511627906976745\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.4941860465116279\n" - ] - } - ], - "source": [ - "embedDict = normalize(absEmbeddings)\n", - "embedDictMaster['abstract_firstSent_19k'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['abstract_firstSent_19k_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _, confusionMatrixMaster['abstract_firstSent_19k_old_'+str(weightCase)], confusionMatrixMaster['abstract_firstSent_19k_new_'+str(weightCase)] = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "commercial-uzbekistan", - "metadata": {}, - "source": [ - "### Combination of all old embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "selected-grain", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['text_7props_19k', 'text_2props_19k', 'complex_19k', 'transe_19k', 'complex_probase', 'transe_probase', 'complex_probase_19k', 'transe_probase_19k', 'abstract_19k', 'abstract_firstSent_19k'])" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "embedDictMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "remarkable-river", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['text_7props_19k_1', 'text_7props_19k_2', 'text_7props_19k_0.5', 'text_2props_19k_1', 'text_2props_19k_2', 'text_2props_19k_0.5', 'complex_19k_1', 'complex_19k_2', 'complex_19k_0.5', 'transe_19k_1', 'transe_19k_2', 'transe_19k_0.5', 'complex_probase_1', 'complex_probase_2', 'complex_probase_0.5', 'transe_probase_1', 'transe_probase_2', 'transe_probase_0.5', 'complex_probase_19k_1', 'complex_probase_19k_2', 'complex_probase_19k_0.5', 'transe_probase_19k_1', 'transe_probase_19k_2', 'transe_probase_19k_0.5', 'abstract_19k_1', 'abstract_19k_2', 'abstract_19k_0.5', 'abstract_firstSent_19k_1', 'abstract_firstSent_19k_2', 'abstract_firstSent_19k_0.5'])" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newEmbedDictMaster.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "after-wallace", - "metadata": {}, - "source": [ - "#### Compl + Transe + Abstract" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "manual-twist", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictConcat = {}\n", - "for key1 in ['complex_19k', 'transe_19k', \n", - " 'abstract_firstSent_19k']:\n", - " for word in embedDictMaster[key1].keys():\n", - " if word not in embedDictConcat:\n", - " embedDictConcat[word] = []\n", - " embedDictConcat[word].append(embedDictMaster[key1][word])\n", - "for word in embedDictConcat.keys():\n", - " embedDictConcat[word] = [item for sublist in embedDictConcat[word] for item in sublist]" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "according-identity", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Size of embedding: 968\n" - ] - } - ], - "source": [ - "print(f\"Size of embedding: {len(embedDictConcat['Q18037012'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "noble-fisher", - "metadata": {}, - "outputs": [], - "source": [ - "for word1 in list(embedDictConcat.keys()):\n", - " if len(embedDictConcat[word1]) != 968:\n", - " del embedDictConcat[word1]" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "liquid-spray", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19101.0\n", - "mean 968.0\n", - "std 0.0\n", - "min 968.0\n", - "25% 968.0\n", - "50% 968.0\n", - "75% 968.0\n", - "max 968.0\n", - "dtype: float64" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series([len(val1) for val1 in embedDictConcat.values()]).describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "designed-killing", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.336903\n", - "std 0.071873\n", - "min 0.000000\n", - "25% 0.284286\n", - "50% 0.332284\n", - "75% 0.389200\n", - "max 0.596558\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.31344285039654224, pvalue=1.587990989990702e-16)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2983652058391759, pvalue=2.0692364624319403e-16)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6676384839650146\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.245075\n", - "std 0.146398\n", - "min 0.000000\n", - "25% 0.099960\n", - "50% 0.239725\n", - "75% 0.380577\n", - "max 0.596558\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3270255968193857, pvalue=7.482780885295614e-18)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.3144288703997577, pvalue=4.696112489737555e-18)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6880466472303207\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.400303\n", - "std 0.071506\n", - "min 0.000000\n", - "25% 0.357059\n", - "50% 0.402058\n", - "75% 0.445388\n", - "max 0.813749\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33855152383136056, pvalue=5.074789109206347e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2967991230842074, pvalue=5.639053240442108e-15)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31870634863885755, pvalue=1.6590685394196158e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2739615906247492, pvalue=4.489403776140874e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_19k_v1'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_19k_v1_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "suburban-legislature", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.321205\n", - "std 0.063429\n", - "min 0.000000\n", - "25% 0.277493\n", - "50% 0.311720\n", - "75% 0.359268\n", - "max 0.596557\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2891828519936888, pvalue=2.717366700252014e-14)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.27713398557337643, pvalue=2.2907553462981174e-14)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6501457725947521\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19101.000000\n", - "mean 0.188928\n", - "std 0.144828\n", - "min 0.000000\n", - "25% 0.059667\n", - "50% 0.147733\n", - "75% 0.327197\n", - "max 0.596557\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.33562487778756755, pvalue=1.0136749729444057e-18)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.31665315908408964, pvalue=2.7384643013776528e-18)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19101.000000\n", - "mean 0.427234\n", - "std 0.094690\n", - "min 0.000000\n", - "25% 0.367149\n", - "50% 0.418971\n", - "75% 0.473102\n", - "max 0.895330\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.33868087126132435, pvalue=4.924627127334063e-19)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.13050673469358315, pvalue=0.0005927381978235836)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.31852085513832423, pvalue=1.7372739400060115e-18)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1636905372538761, pvalue=6.524566396115546e-06)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6822157434402333\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.22157434402332363\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_probase_19k_v1'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_probase_19k__v1_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "interstate-tribute", - "metadata": {}, - "source": [ - "#### Text_7props + Text_2props + Complex + Transe + Abstract + Abstract_FirstSent" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "crucial-italian", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictConcat = {}\n", - "for key1 in ['text_7props_19k', 'text_2props_19k', 'complex_19k', 'transe_19k', \n", - " 'abstract_19k', 'abstract_firstSent_19k']:\n", - " for word in embedDictMaster[key1].keys():\n", - " if word not in embedDictConcat:\n", - " embedDictConcat[word] = []\n", - " embedDictConcat[word].append(embedDictMaster[key1][word])\n", - "for word in embedDictConcat.keys():\n", - " embedDictConcat[word] = [item for sublist in embedDictConcat[word] for item in sublist]" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "fatal-robert", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Size of embedding: 3784\n" - ] - } - ], - "source": [ - "print(f\"Size of embedding: {len(embedDictConcat['Q18037012'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "inside-offset", - "metadata": {}, - "outputs": [], - "source": [ - "for word1 in list(embedDictConcat.keys()):\n", - " if len(embedDictConcat[word1]) != 3784:\n", - " del embedDictConcat[word1]" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "colored-cattle", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19090.0\n", - "mean 3784.0\n", - "std 0.0\n", - "min 3784.0\n", - "25% 3784.0\n", - "50% 3784.0\n", - "75% 3784.0\n", - "max 3784.0\n", - "dtype: float64" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series([len(val1) for val1 in embedDictConcat.values()]).describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "promising-marijuana", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19090\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19090.000000\n", - "mean 0.318414\n", - "std 0.060577\n", - "min 0.000000\n", - "25% 0.273273\n", - "50% 0.313881\n", - "75% 0.362231\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.40347307747318084, pvalue=5.629213176377413e-25)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.40536224043013125, pvalue=1.6868252763103453e-27)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6307692307692307\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19090.000000\n", - "mean 0.230697\n", - "std 0.135101\n", - "min 0.000000\n", - "25% 0.097307\n", - "50% 0.223935\n", - "75% 0.356438\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.40442451164800897, pvalue=4.371701842100601e-25)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.4101503518414275, pvalue=4.1055209935697305e-28)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19090.000000\n", - "mean 0.378997\n", - "std 0.061137\n", - "min 0.000000\n", - "25% 0.342927\n", - "50% 0.379359\n", - "75% 0.416067\n", - "max 0.760023\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.41886430173530353, pvalue=8.645413536273471e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3828276431671376, pvalue=1.2015280268194575e-22)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.4124606263600543, pvalue=2.0652878227656027e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.36987136293537864, pvalue=3.618695156207996e-23)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.5415384615384615\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_19k_v2'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_19k_v2_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "piano-mortality", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "17849\n", - "No. of keys in embedDict: 19090\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19090.000000\n", - "mean 0.304466\n", - "std 0.054097\n", - "min 0.000000\n", - "25% 0.266260\n", - "50% 0.295631\n", - "75% 0.337646\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.3563958420194592, pvalue=7.705212357023742e-20)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.36941390801600477, pvalue=4.091096997249633e-23)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6092307692307692\n", - "\n", - "\n", - "Weight Case: 2\n", - "count 19090.000000\n", - "mean 0.178573\n", - "std 0.134771\n", - "min 0.000000\n", - "25% 0.057617\n", - "50% 0.140175\n", - "75% 0.314839\n", - "max 0.546240\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.4167472980442226, pvalue=1.5499840293424274e-26)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.41238438242524034, pvalue=2.1128593107239733e-28)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6553846153846153\n", - "\n", - "\n", - "Weight Case: 0.5\n", - "count 19090.000000\n", - "mean 0.405175\n", - "std 0.085240\n", - "min 0.000000\n", - "25% 0.352177\n", - "50% 0.394099\n", - "75% 0.443428\n", - "max 0.797620\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 325\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.418699029532589, pvalue=9.039782435991911e-27)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.1299009113611685, pvalue=0.0008902251998159792)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.41247576976710154, pvalue=2.053616736808825e-28)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.1761010833372823, pvalue=2.3561612238907513e-06)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6523076923076923\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.16923076923076924\n" - ] - } - ], - "source": [ - "embedDict = normalize(embedDictConcat)\n", - "embedDictMaster['concat_probase_19k_v2'] = embedDict\n", - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, probDF_Qnodes_DF_WQnodes1_subset]))\n", - "print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - "for weightCase in [1,2,0.5]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['concat_probase_19k_v2_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _ = fetchCorrelationResults(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "markdown", - "id": "extensive-forty", - "metadata": {}, - "source": [ - "### Confusion Matrices" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "maritime-director", - "metadata": {}, - "outputs": [], - "source": [ - "confusionMatrixMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "qualified-empty", - "metadata": {}, - "outputs": [], - "source": [ - "embedDict = embedDictMaster['text_7props_19k']\n", - "newEmbedDict = newEmbedDictMaster['text_7props_19k_2']\n", - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - "assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - "assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - "wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - "wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - "wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - "# wordSimMissingSet\n", - "print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n", - "print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "\n", - "print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - "print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "id": "distinct-timothy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 210\n", - "U 101\n", - "I 20\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 154, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New2['category'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "antique-infrastructure", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.subplots(figsize=(20,20))\n", - "for num, key1 in enumerate(['text_7props_19k_old_2', 'text_7props_19k_new_2', 'text_2props_19k_old_2', 'text_2props_19k_new_2', \n", - " 'transe_19k_old_1', 'transe_19k_new_1', 'complex_19k_old_1', 'complex_19k_new_1']):\n", - " plt.subplot(4, 2, num+1)\n", - " sns.heatmap(pd.DataFrame(confusionMatrixMaster[key1], LABELS, LABELS), annot=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ahead-letters", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "micro-phrase", - "metadata": {}, - "source": [ - "# Save all embeddings and similarity scores" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "boring-campus", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDictMaster['concat_probase_19k_v1_2'] = newEmbedDictMaster['concat_probase_19k__v1_2']" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "automatic-update", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Length of wordsim dataset: 344\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d97162bbb58542999eb317ede34a3300", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.0067204430541292475, 0.008331487632641807, ...[-0.004515859562266559, -0.011723668837741234,...3.4683703.384407[0.006720440253943506, 0.00833148416118722, 0....[-0.0050116109222357935, -0.013383541509188317...[0.006720440253943506, 0.00833148416118722, 0....[-0.004971298302113362, -0.013254267455943004,...3.4683703.463734
1Arafatterror93D4NaN3U4...[0.0067204430541292475, 0.008331487632641807, ...[-0.004862257036458548, 0.014077170447753274, ...3.0355342.991152[0.006720440253943506, 0.00833148416118722, 0....[-0.005805280378137928, 0.015115419540555773, ...[0.006720440253943506, 0.00833148416118722, 0....[-0.004862255010517295, 0.01407716458226321, 0...3.0355342.991152
2FBIfingerprint1093D4NaN4NaN3...[0.006466897046995817, 0.014694837513784692, -...[0.01523113313292473, 0.005271417432183582, -0...2.9023562.850218[0.0064668943524542844, 0.014694831390933237, ...[0.013922101038066187, 0.0023911841962956006, ...[0.0064668943524542844, 0.014694831390933237, ...[0.01381456413075283, 0.0024352598782685863, -...2.9023562.895993
3FBIinvestigation1103U3U3U3...[0.006466897046995817, 0.014694837513784692, -...[0.013016090555331788, 0.01114268765690899, -0...2.9952062.962306[0.0064668943524542844, 0.014694831390933237, ...[0.013274960537868754, 0.010965634834463656, -...[0.0064668943524542844, 0.014694831390933237, ...[0.013242882478240212, 0.010953106140234146, -...2.9952062.993596
4HarvardYale1372S3S2S2...[0.01322626153814759, 0.005047111609608307, -0...[0.010410829355084429, 0.014776997941327313, -...1.6893151.689315[0.013226256027203037, 0.00504710950664428, -0...[0.010410825017237097, 0.01477699178424233, -0...[0.013226256027203037, 0.00504710950664428, -0...[0.010410825017237097, 0.01477699178424233, -0...1.6893151.689315
\n", - "

5 rows × 104 columns

\n", - "" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.0067204430541292475, 0.008331487632641807, ... \n", - "1 ... [0.0067204430541292475, 0.008331487632641807, ... \n", - "2 ... [0.006466897046995817, 0.014694837513784692, -... \n", - "3 ... [0.006466897046995817, 0.014694837513784692, -... \n", - "4 ... [0.01322626153814759, 0.005047111609608307, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859562266559, -0.011723668837741234,... 3.468370 \n", - "1 [-0.004862257036458548, 0.014077170447753274, ... 3.035534 \n", - "2 [0.01523113313292473, 0.005271417432183582, -0... 2.902356 \n", - "3 [0.013016090555331788, 0.01114268765690899, -0... 2.995206 \n", - "4 [0.010410829355084429, 0.014776997941327313, -... 1.689315 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.384407 \n", - "1 2.991152 \n", - "2 2.850218 \n", - "3 2.962306 \n", - "4 1.689315 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "1 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "2 [0.0064668943524542844, 0.014694831390933237, ... \n", - "3 [0.0064668943524542844, 0.014694831390933237, ... \n", - "4 [0.013226256027203037, 0.00504710950664428, -0... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.0050116109222357935, -0.013383541509188317... \n", - "1 [-0.005805280378137928, 0.015115419540555773, ... \n", - "2 [0.013922101038066187, 0.0023911841962956006, ... \n", - "3 [0.013274960537868754, 0.010965634834463656, -... \n", - "4 [0.010410825017237097, 0.01477699178424233, -0... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "1 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "2 [0.0064668943524542844, 0.014694831390933237, ... \n", - "3 [0.0064668943524542844, 0.014694831390933237, ... \n", - "4 [0.013226256027203037, 0.00504710950664428, -0... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.004971298302113362, -0.013254267455943004,... \n", - "1 [-0.004862255010517295, 0.01407716458226321, 0... \n", - "2 [0.01381456413075283, 0.0024352598782685863, -... \n", - "3 [0.013242882478240212, 0.010953106140234146, -... \n", - "4 [0.010410825017237097, 0.01477699178424233, -0... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.468370 3.463734 \n", - "1 3.035534 2.991152 \n", - "2 2.902356 2.895993 \n", - "3 2.995206 2.993596 \n", - "4 1.689315 1.689315 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 212, - "id": "connected-limit", - "metadata": {}, - "outputs": [], - "source": [ - "cons_ann_3 = pd.read_csv('../data/consolidated_annotation_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 213, - "id": "trying-authorization", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2H_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversed
0toolimplement1NaN3U1NaN2i1NaN1.60.8945.3134.688
1arrangementaccommodation1NaN4NaN2I1NaN1NaN1.81.3045.1254.875
2woodforest3H1NaN1NaN1NaN3l1.81.0957.9382.063
3benchmarkindex2I2I2I4NaN4NaN2.81.0955.5004.500
4practiceinstitution2I3L,I3I3i3i2.80.4473.5636.438
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 tool implement 1 NaN 3 U 1 NaN 2 \n", - "1 arrangement accommodation 1 NaN 4 NaN 2 I 1 \n", - "2 wood forest 3 H 1 NaN 1 NaN 1 \n", - "3 benchmark index 2 I 2 I 2 I 4 \n", - "4 practice institution 2 I 3 L,I 3 I 3 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed \n", - "0 i 1 NaN 1.6 0.894 5.313 4.688 \n", - "1 NaN 1 NaN 1.8 1.304 5.125 4.875 \n", - "2 NaN 3 l 1.8 1.095 7.938 2.063 \n", - "3 NaN 4 NaN 2.8 1.095 5.500 4.500 \n", - "4 i 3 i 2.8 0.447 3.563 6.438 " - ] - }, - "execution_count": 213, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cons_ann_3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "id": "political-laptop", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "15" - ] - }, - "execution_count": 222, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(cons_ann_3)" - ] - }, - { - "cell_type": "code", - "execution_count": 300, - "id": "improved-relaxation", - "metadata": {}, - "outputs": [], - "source": [ - "ca_cols = cons_ann_3.columns\n", - "for _,row in cons_ann_3.iterrows():\n", - "# if ((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])).sum() == 2:\n", - "# print(row['Word 1'], row['Word 2'])\n", - "# print(wordSim353AnnotDF_New_Merged_DF[((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2']))])\n", - "# print (((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])).sum())\n", - " for col in ca_cols:\n", - " if col in ['Word 1', 'Word 2']:\n", - " continue\n", - " \n", - " wordSim353AnnotDF_New_Merged_DF.at[wordSim353AnnotDF_New_Merged_DF.index[(wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])], col] = row[col]\n", - "# print(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])][col])\n", - "# " - ] - }, - { - "cell_type": "code", - "execution_count": 301, - "id": "relevant-dodge", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[~wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2']].duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outside-letters", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "pretty-scholar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv', index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "gorgeous-syndrome", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'ID',\n", - " 'H_Sim',\n", - " 'H_Dim',\n", - " 'F_Sim',\n", - " 'F_Dim',\n", - " 'N_Sim',\n", - " 'N_Dim',\n", - " 'D_Sim',\n", - " 'D_Dim',\n", - " 'P_Sim',\n", - " 'P_Dim',\n", - " 'Avg',\n", - " 'Stdev',\n", - " 'H_orig',\n", - " 'H_reversed',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].to_csv('../data/wordsim353_all_embeddings_with_retrofits_scores_only_new.csv', index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "alpha-department", - "metadata": {}, - "source": [ - "# Determine Differences" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ahead-syndication", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "suspended-beach", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "racial-behalf", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "another-mississippi", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "metallic-smith", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.580594\n", - "std 0.457960\n", - "min 0.000000\n", - "25% 0.222619\n", - "50% 0.495179\n", - "75% 0.852326\n", - "max 5.000000\n", - "Name: transe_19k_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['transe_19k_old_cosSim_Diff'],ascending=False)['transe_19k_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "designed-vacuum", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.645644\n", - "std 0.526932\n", - "min 0.000000\n", - "25% 0.250461\n", - "50% 0.562808\n", - "75% 0.927608\n", - "max 5.000000\n", - "Name: transe_19k_1_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['transe_19k_1_new_cosSim_Diff'],ascending=False)['transe_19k_1_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "facial-second", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.495179:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 0.562808:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "lightweight-average", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'transe_19k_old_cosSim', 'transe_19k_1_new_cosSim', 'transe_19k_old_cosSim_Diff', 'transe_19k_1_new_cosSim_Diff', 'transe_19k_old_cosSim_Diff_Cat', 'transe_19k_1_new_cosSim_Diff_Cat']]" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "american-egypt", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgtranse_19k_old_cosSimtranse_19k_1_new_cosSimtranse_19k_old_cosSim_Difftranse_19k_1_new_cosSim_Difftranse_19k_old_cosSim_Diff_Cattranse_19k_1_new_cosSim_Diff_Cat
0Arafatpeace3.603.0763033.4776650.5236970.12233510
1Arafatterror3.603.1036682.9521810.4963320.64781911
2FBIfingerprint3.602.9113343.1262090.6886660.47379110
3FBIinvestigation3.002.8817632.9437500.1182370.05625000
4HarvardYale2.202.1350422.0800220.0649580.11997800
..............................
339wartroops3.002.8075393.1619370.1924610.16193700
340weaponsecret3.803.3102612.7938320.4897391.00616801
341weatherforecast3.002.4496022.7392800.5503980.26072010
342woodforest1.802.9316103.5417541.1316101.74175411
343wordsimilarity3.752.6484272.7581561.1015730.99184411
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg transe_19k_old_cosSim \\\n", - "0 Arafat peace 3.60 3.076303 \n", - "1 Arafat terror 3.60 3.103668 \n", - "2 FBI fingerprint 3.60 2.911334 \n", - "3 FBI investigation 3.00 2.881763 \n", - "4 Harvard Yale 2.20 2.135042 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.807539 \n", - "340 weapon secret 3.80 3.310261 \n", - "341 weather forecast 3.00 2.449602 \n", - "342 wood forest 1.80 2.931610 \n", - "343 word similarity 3.75 2.648427 \n", - "\n", - " transe_19k_1_new_cosSim transe_19k_old_cosSim_Diff \\\n", - "0 3.477665 0.523697 \n", - "1 2.952181 0.496332 \n", - "2 3.126209 0.688666 \n", - "3 2.943750 0.118237 \n", - "4 2.080022 0.064958 \n", - ".. ... ... \n", - "339 3.161937 0.192461 \n", - "340 2.793832 0.489739 \n", - "341 2.739280 0.550398 \n", - "342 3.541754 1.131610 \n", - "343 2.758156 1.101573 \n", - "\n", - " transe_19k_1_new_cosSim_Diff transe_19k_old_cosSim_Diff_Cat \\\n", - "0 0.122335 1 \n", - "1 0.647819 1 \n", - "2 0.473791 1 \n", - "3 0.056250 0 \n", - "4 0.119978 0 \n", - ".. ... ... \n", - "339 0.161937 0 \n", - "340 1.006168 0 \n", - "341 0.260720 1 \n", - "342 1.741754 1 \n", - "343 0.991844 1 \n", - "\n", - " transe_19k_1_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 1 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 0 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "automotive-trouble", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "123" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "compressed-emergency", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['old_cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "alert-holmes", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['new_cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "psychological-walter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['cat'] = wordSim353AnnotDF_New_Merged_DF['Avg'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "arabic-binding", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['old_cat'] != wordSim353AnnotDF_New_Merged_DF['cat']].to_csv('../data/transEmb/badBefore.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "acoustic-holocaust", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['new_cat'] != wordSim353AnnotDF_New_Merged_DF['cat']].to_csv('../data/transEmb/badAfter.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "accompanied-spyware", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/transEmb/entireSet.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "reverse-cincinnati", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "consistent-difference", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "breathing-footage", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "chief-chance", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "shaped-letter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "adolescent-monte", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "swiss-bridal", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "current-mirror", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "placed-identity", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "stopped-daisy", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "deadly-forwarding", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "southeast-canal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.567297\n", - "std 0.435379\n", - "min 0.000000\n", - "25% 0.250130\n", - "50% 0.508725\n", - "75% 0.835197\n", - "max 5.000000\n", - "Name: concat_19k_v1_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_old_cosSim_Diff'],ascending=False)['concat_19k_v1_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "adequate-terminology", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 3.440000e+02\n", - "mean 5.938081e-01\n", - "std 4.503200e-01\n", - "min 4.440892e-16\n", - "25% 2.665817e-01\n", - "50% 5.349785e-01\n", - "75% 8.528840e-01\n", - "max 5.000000e+00\n", - "Name: concat_19k_v1_2_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_2_new_cosSim_Diff'],ascending=False)['concat_19k_v1_2_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "wired-shoot", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.508725:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 5.349785e-01:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "operating-senegal", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'concat_19k_v1_old_cosSim', 'concat_19k_v1_2_new_cosSim', 'concat_19k_v1_old_cosSim_Diff', 'concat_19k_v1_2_new_cosSim_Diff', 'concat_19k_v1_old_cosSim_Diff_Cat', 'concat_19k_v1_2_new_cosSim_Diff_Cat']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quantitative-money", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_19k_v1_old_cosSim_Diffconcat_19k_v1_2_new_cosSim_Diffconcat_19k_v1_old_cosSim_Diff_Catconcat_19k_v1_2_new_cosSim_Diff_Cat
0Arafatpeace3.603.2511983.1932710.3488020.40672900
1Arafatterror3.603.2314093.1572290.3685910.44277100
2FBIfingerprint3.602.9484872.8530480.6515130.74695211
3FBIinvestigation3.002.9303652.8956040.0696350.10439600
4HarvardYale2.201.9910541.9910540.2089460.20894600
..............................
339wartroops3.002.9139312.7872130.0860690.21278700
340weaponsecret3.803.1525133.1190650.6474870.68093511
341weatherforecast3.002.4927652.4623890.5072350.53761101
342woodforest1.802.6126812.6069410.8126810.80694111
343wordsimilarity3.752.6782762.6528291.0717241.09717111
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg concat_19k_v1_old_cosSim \\\n", - "0 Arafat peace 3.60 3.251198 \n", - "1 Arafat terror 3.60 3.231409 \n", - "2 FBI fingerprint 3.60 2.948487 \n", - "3 FBI investigation 3.00 2.930365 \n", - "4 Harvard Yale 2.20 1.991054 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.913931 \n", - "340 weapon secret 3.80 3.152513 \n", - "341 weather forecast 3.00 2.492765 \n", - "342 wood forest 1.80 2.612681 \n", - "343 word similarity 3.75 2.678276 \n", - "\n", - " concat_19k_v1_2_new_cosSim concat_19k_v1_old_cosSim_Diff \\\n", - "0 3.193271 0.348802 \n", - "1 3.157229 0.368591 \n", - "2 2.853048 0.651513 \n", - "3 2.895604 0.069635 \n", - "4 1.991054 0.208946 \n", - ".. ... ... \n", - "339 2.787213 0.086069 \n", - "340 3.119065 0.647487 \n", - "341 2.462389 0.507235 \n", - "342 2.606941 0.812681 \n", - "343 2.652829 1.071724 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff concat_19k_v1_old_cosSim_Diff_Cat \\\n", - "0 0.406729 0 \n", - "1 0.442771 0 \n", - "2 0.746952 1 \n", - "3 0.104396 0 \n", - "4 0.208946 0 \n", - ".. ... ... \n", - "339 0.212787 0 \n", - "340 0.680935 1 \n", - "341 0.537611 0 \n", - "342 0.806941 1 \n", - "343 1.097171 1 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 0 \n", - "2 1 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 1 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "attractive-annex", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "164" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "proof-registrar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "elder-harmony", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "magnetic-marina", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "satisfied-increase", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "surprising-milan", - "metadata": {}, - "source": [ - "# SVM Models" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "unknown-techno", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting datacompy\n", - " Downloading datacompy-0.7.2-py3-none-any.whl (27 kB)\n", - "Requirement already satisfied: numpy>=1.11.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.20.1)\n", - "Requirement already satisfied: pandas>=0.25.0 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.2.2)\n", - "Requirement already satisfied: pytz>=2017.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2021.1)\n", - "Requirement already satisfied: python-dateutil>=2.7.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2.8.1)\n", - "Requirement already satisfied: six>=1.5 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas>=0.25.0->datacompy) (1.15.0)\n", - "Installing collected packages: datacompy\n", - "Successfully installed datacompy-0.7.2\n" - ] - } - ], - "source": [ - "!pip install datacompy" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "overhead-board", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "false-status", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "varying-bones", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004515859576248157, -0.01172366887295375, ...3.2445393.175157[0.006720440291834372, 0.008331484208161396, 0...[-0.005011610937734838, -0.013383541550578623,...[0.006720440291834372, 0.008331484208161396, 0...[-0.00497129831746384, -0.01325426749683971, -...3.2445393.240270
1Arafatterror93D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004862257088069111, 0.014077170590128979, ...3.0850833.013958[0.006720440291834372, 0.008331484208161396, 0...[-0.005805280438126139, 0.015115419696749257, ...[0.006720440291834372, 0.008331484208161396, 0...[-0.004862255062129871, 0.014077164724644747, ...3.0850833.013958
2FBIfingerprint1093D4NaN4NaN3...[0.006466897059812569, 0.014694837542908411, -...[0.01523113309590259, 0.005271417380511587, -0...2.8230932.745230[0.006466894365273728, 0.014694831420063071, -...[0.013922101136130544, 0.0023911842131386003, ...[0.006466894365273728, 0.014694831420063071, -...[0.013814564227839972, 0.0024352598952305004, ...2.8230932.816176
3FBIinvestigation1103U3U3U3...[0.006466897059812569, 0.014694837542908411, -...[0.013016090623183913, 0.01114268771757639, -0...2.9209862.886161[0.006466894365273728, 0.014694831420063071, -...[0.01327496060589727, 0.010965634890657862, -0...[0.006466894365273728, 0.014694831420063071, -...[0.013242882546106787, 0.010953106196386554, -...2.9209862.919120
4HarvardYale1372S3S2S2...[0.01322626159341165, 0.005047111630696947, -0...[0.010410829393995813, 0.014776997996557633, -...1.7076551.707655[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...1.7076551.707655
\n", - "

5 rows × 104 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "1 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "2 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "3 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "4 ... [0.01322626159341165, 0.005047111630696947, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859576248157, -0.01172366887295375, ... 3.244539 \n", - "1 [-0.004862257088069111, 0.014077170590128979, ... 3.085083 \n", - "2 [0.01523113309590259, 0.005271417380511587, -0... 2.823093 \n", - "3 [0.013016090623183913, 0.01114268771757639, -0... 2.920986 \n", - "4 [0.010410829393995813, 0.014776997996557633, -... 1.707655 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.175157 \n", - "1 3.013958 \n", - "2 2.745230 \n", - "3 2.886161 \n", - "4 1.707655 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.005011610937734838, -0.013383541550578623,... \n", - "1 [-0.005805280438126139, 0.015115419696749257, ... \n", - "2 [0.013922101136130544, 0.0023911842131386003, ... \n", - "3 [0.01327496060589727, 0.010965634890657862, -0... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.00497129831746384, -0.01325426749683971, -... \n", - "1 [-0.004862255062129871, 0.014077164724644747, ... \n", - "2 [0.013814564227839972, 0.0024352598952305004, ... \n", - "3 [0.013242882546106787, 0.010953106196386554, -... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.244539 3.240270 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.816176 \n", - "3 2.920986 2.919120 \n", - "4 1.707655 1.707655 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "id": "employed-clearing", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
text_7props_19k_old_cosSimtext_7props_19k_2_new_cosSimtext_2props_19k_old_cosSimtext_2props_19k_2_new_cosSimcomplex_19k_old_cosSimcomplex_19k_2_new_cosSimtranse_19k_old_cosSimtranse_19k_1_new_cosSimabstract_19k_old_cosSimabstract_19k_2_new_cosSim...transe_probase_19k_old_cosSimtranse_probase_19k_1_new_cosSimconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_probase_19k_v1_old_cosSimconcat_probase_19k_v1_2_new_cosSimconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
count344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000...344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000
mean2.5110332.4648762.4822542.4351612.9833022.6848182.9833022.6800022.6528662.593916...2.9833022.5658862.8753812.8264932.8753812.8651012.8680662.8166852.8680662.856603
std1.1488211.1529111.1510601.1554270.6459110.5390920.6459110.6192390.6805250.653512...0.6459110.5967500.5739020.5755850.5739020.5744101.0971211.1063621.0971211.099179
min1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000...1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
25%2.0050971.9632291.9934241.9498692.5885912.4554312.5885912.3118182.1809122.137568...2.5885912.1836862.5779382.5510332.5779382.5838112.3843372.3506452.3843372.377672
50%2.3282762.2736742.2746682.2321563.0390872.7085693.0390872.7222782.6168102.591640...3.0390872.6080412.9505782.9120982.9505782.9339842.7164712.6570782.7164712.704941
75%2.6369072.5761552.5804822.5275543.3592432.9592593.3592433.0905633.2089193.060782...3.3592432.9352263.2087353.1644263.2087353.1962702.9922652.8996262.9922652.977770
max7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000004.3400894.327902...7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.000000
\n", - "

8 rows × 28 columns

\n", - "
" - ], - "text/plain": [ - " text_7props_19k_old_cosSim text_7props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.511033 2.464876 \n", - "std 1.148821 1.152911 \n", - "min 1.000000 1.000000 \n", - "25% 2.005097 1.963229 \n", - "50% 2.328276 2.273674 \n", - "75% 2.636907 2.576155 \n", - "max 7.000000 7.000000 \n", - "\n", - " text_2props_19k_old_cosSim text_2props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.482254 2.435161 \n", - "std 1.151060 1.155427 \n", - "min 1.000000 1.000000 \n", - "25% 1.993424 1.949869 \n", - "50% 2.274668 2.232156 \n", - "75% 2.580482 2.527554 \n", - "max 7.000000 7.000000 \n", - "\n", - " complex_19k_old_cosSim complex_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.684818 \n", - "std 0.645911 0.539092 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.455431 \n", - "50% 3.039087 2.708569 \n", - "75% 3.359243 2.959259 \n", - "max 7.000000 7.000000 \n", - "\n", - " transe_19k_old_cosSim transe_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.680002 \n", - "std 0.645911 0.619239 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.311818 \n", - "50% 3.039087 2.722278 \n", - "75% 3.359243 3.090563 \n", - "max 7.000000 7.000000 \n", - "\n", - " abstract_19k_old_cosSim abstract_19k_2_new_cosSim ... \\\n", - "count 344.000000 344.000000 ... \n", - "mean 2.652866 2.593916 ... \n", - "std 0.680525 0.653512 ... \n", - "min 1.000000 1.000000 ... \n", - "25% 2.180912 2.137568 ... \n", - "50% 2.616810 2.591640 ... \n", - "75% 3.208919 3.060782 ... \n", - "max 4.340089 4.327902 ... \n", - "\n", - " transe_probase_19k_old_cosSim transe_probase_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.565886 \n", - "std 0.645911 0.596750 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.183686 \n", - "50% 3.039087 2.608041 \n", - "75% 3.359243 2.935226 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v1_old_cosSim concat_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.826493 \n", - "std 0.573902 0.575585 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.551033 \n", - "50% 2.950578 2.912098 \n", - "75% 3.208735 3.164426 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v1_old_cosSim concat_probase_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.865101 \n", - "std 0.573902 0.574410 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.583811 \n", - "50% 2.950578 2.933984 \n", - "75% 3.208735 3.196270 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v2_old_cosSim concat_19k_v2_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.816685 \n", - "std 1.097121 1.106362 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.350645 \n", - "50% 2.716471 2.657078 \n", - "75% 2.992265 2.899626 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.856603 \n", - "std 1.097121 1.099179 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.377672 \n", - "50% 2.716471 2.704941 \n", - "75% 2.992265 2.977770 \n", - "max 7.000000 7.000000 \n", - "\n", - "[8 rows x 28 columns]" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "id": "creative-interview", - "metadata": {}, - "outputs": [], - "source": [ - "import datacompy\n", - "compare = datacompy.Compare(\n", - " wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))],\n", - " wordSim353AnnotDF_New_Merged_DF_old[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF_old.columns.to_list()))],\n", - " join_columns = ['Word 1', 'Word 2'])" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "id": "noticed-andrew", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DataComPy Comparison\n", - "--------------------\n", - "\n", - "DataFrame Summary\n", - "-----------------\n", - "\n", - " DataFrame Columns Rows\n", - "0 df1 34 344\n", - "1 df2 34 344\n", - "\n", - "Column Summary\n", - "--------------\n", - "\n", - "Number of columns in common: 32\n", - "Number of columns in df1 but not in df2: 2\n", - "Number of columns in df2 but not in df1: 2\n", - "\n", - "Row Summary\n", - "-----------\n", - "\n", - "Matched on: word 1, word 2\n", - "Any duplicates on match values: No\n", - "Absolute Tolerance: 0\n", - "Relative Tolerance: 0\n", - "Number of rows in common: 344\n", - "Number of rows in df1 but not in df2: 0\n", - "Number of rows in df2 but not in df1: 0\n", - "\n", - "Number of rows with some compared columns unequal: 343\n", - "Number of rows with all compared columns equal: 1\n", - "\n", - "Column Comparison\n", - "-----------------\n", - "\n", - "Number of columns compared with some values unequal: 27\n", - "Number of columns compared with all values equal: 5\n", - "Total number of values which compare unequal: 5,136\n", - "\n", - "Columns with Unequal Values or Types\n", - "------------------------------------\n", - "\n", - " Column df1 dtype df2 dtype # Unequal Max Diff # Null Diff\n", - "25 abstract_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "17 abstract_19k_old_cossim float64 float64 9 4.440892e-16 0\n", - "8 abstract_firstsent_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "19 abstract_firstsent_19k_old_cossim float64 float64 8 4.440892e-16 0\n", - "6 category object object 4 0.000000e+00 0\n", - "12 complex_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "21 complex_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "11 complex_probase_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "18 complex_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "1 concat_19k_v1_2_new_cossim float64 float64 343 9.656675e-01 0\n", - "22 concat_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "2 concat_19k_v2_2_new_cossim float64 float64 325 4.810998e-01 0\n", - "3 concat_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "10 concat_probase_19k_v1_2_new_cossim float64 float64 341 9.673423e-01 0\n", - "7 concat_probase_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "26 concat_probase_19k_v2_2_new_cossim float64 float64 324 4.828636e-01 0\n", - "9 concat_probase_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "15 text_2props_19k_2_new_cossim float64 float64 7 4.440892e-16 0\n", - "0 text_2props_19k_old_cossim float64 float64 5 4.440892e-16 0\n", - "14 text_7props_19k_2_new_cossim float64 float64 11 4.440892e-16 0\n", - "24 text_7props_19k_old_cossim float64 float64 7 4.440892e-16 0\n", - "5 transe_19k_1_new_cossim float64 float64 5 4.440892e-16 0\n", - "4 transe_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "16 transe_probase_19k_1_new_cossim float64 float64 340 1.192889e-08 0\n", - "20 transe_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "23 transe_probase_1_new_cossim float64 float64 9 4.440892e-16 0\n", - "13 transe_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "\n", - "Sample Rows with Unequal Values\n", - "-------------------------------\n", - "\n", - " word 1 word 2 text_2props_19k_old_cossim (df1) text_2props_19k_old_cossim (df2)\n", - "33 bishop rabbi 2.333195 2.333195\n", - "69 credit card 1.834364 1.834364\n", - "107 drink ear 2.515900 2.515900\n", - "271 registration arrangement 1.826611 1.826611\n", - "169 line insurance 2.670612 2.670612\n", - "\n", - " word 1 word 2 concat_19k_v1_2_new_cossim (df1) concat_19k_v1_2_new_cossim (df2)\n", - "107 drink ear 3.116502 2.813165\n", - "112 energy crisis 3.024137 3.099512\n", - "14 admission ticket 2.647422 2.819317\n", - "63 computer software 2.167120 2.273544\n", - "241 precedent example 2.091422 2.138805\n", - "44 car flight 3.064250 2.948899\n", - "229 planet constellation 2.240850 2.286295\n", - "159 king queen 2.169999 2.241265\n", - "161 lad brother 2.755663 2.733430\n", - "297 stock egg 2.943623 2.952019\n", - "\n", - " word 1 word 2 concat_19k_v2_2_new_cossim (df1) concat_19k_v2_2_new_cossim (df2)\n", - "61 computer laboratory 2.670662 2.635687\n", - "239 precedent cognition 2.643438 2.676361\n", - "286 situation isolation 2.313211 2.399693\n", - "225 physics chemistry 1.755500 1.873616\n", - "262 psychology doctor 2.861167 2.665892\n", - "271 registration arrangement 1.935898 2.144032\n", - "111 drug abuse 2.653034 2.716209\n", - "150 impartiality interest 2.395906 2.496811\n", - "130 forest graveyard 2.963496 2.743907\n", - "80 cup substance 2.738585 2.703536\n", - "\n", - " word 1 word 2 concat_19k_v2_old_cossim (df1) concat_19k_v2_old_cossim (df2)\n", - "247 president medal 2.809529 3.039440\n", - "70 credit information 2.557827 2.567752\n", - "58 competition price 2.699197 2.854295\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "47 century nation 3.025727 3.021246\n", - "280 seven series 2.801360 2.821742\n", - "193 money dollar 2.376377 2.437513\n", - "5 Japanese American 2.564544 2.535274\n", - "340 weapon secret 2.889109 2.897323\n", - "189 money bank 2.261778 2.170577\n", - "\n", - " word 1 word 2 transe_19k_old_cossim (df1) transe_19k_old_cossim (df2)\n", - "36 book paper 3.078243 2.635533\n", - "5 Japanese American 2.496058 2.408249\n", - "26 baby mother 2.292784 2.155920\n", - "248 problem airport 3.826307 3.170909\n", - "55 coast hill 3.722873 2.798622\n", - "112 energy crisis 3.106233 3.230795\n", - "340 weapon secret 3.285620 3.310261\n", - "219 opera industry 3.296724 3.553488\n", - "169 line insurance 3.089979 2.829222\n", - "332 type kind 1.000000 1.000000\n", - "\n", - " word 1 word 2 transe_19k_1_new_cossim (df1) transe_19k_1_new_cossim (df2)\n", - "192 money deposit 2.837495 2.837495\n", - "232 planet people 3.716617 3.716617\n", - "114 energy secretary 2.865451 2.865451\n", - "304 street block 2.904156 2.904156\n", - "271 registration arrangement 1.933719 1.933719\n", - "\n", - " word 1 word 2 category (df1) category (df2)\n", - "296 stock CD U M\n", - "45 cell phone I M\n", - "328 tool implement I M\n", - "237 practice institution M U\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_old_cossim (df1) concat_probase_19k_v1_old_cossim (df2)\n", - "312 television film 3.266487 2.813985\n", - "191 money currency 2.401111 2.298975\n", - "243 precedent information 3.131530 3.019516\n", - "53 closet clothes 2.947983 2.705879\n", - "142 government crisis 3.181431 2.683486\n", - "183 media trading 3.103774 2.822458\n", - "89 delay racism 3.037041 2.943246\n", - "32 bird crane 2.323600 2.007661\n", - "126 food rooster 3.641608 3.323421\n", - "43 car automobile 1.000000 1.000000\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_2_new_cossim (df1) abstract_firstsent_19k_2_new_cossim (df2)\n", - "67 country citizen 2.307399 2.307399\n", - "218 oil stock 2.875288 2.875288\n", - "337 vodka gin 1.848263 1.848263\n", - "152 investor earning 1.998387 1.998387\n", - "90 deployment departure 1.826386 1.826386\n", - "208 movie theater 2.390347 2.390347\n", - "263 psychology fear 2.679016 2.679016\n", - "96 discovery space 2.952799 2.952799\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_old_cossim (df1) concat_probase_19k_v2_old_cossim (df2)\n", - "21 architecture century 3.188363 3.081890\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "60 computer keyboard 2.131908 2.212525\n", - "120 fertility egg 2.202871 2.244311\n", - "311 telephone communication 2.677514 2.463340\n", - "238 precedent antecedent 1.935676 2.019795\n", - "33 bishop rabbi 2.277504 2.458967\n", - "203 morality importance 2.272562 2.446757\n", - "228 planet astronomer 2.470710 2.152302\n", - "144 governor office 2.720705 2.742336\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_2_new_cossim (df1) concat_probase_19k_v1_2_new_cossim (df2)\n", - "166 life death 2.384376 2.467146\n", - "249 problem challenge 2.573163 2.851951\n", - "216 noon string 2.831571 3.404519\n", - "214 network hardware 2.797734 2.468385\n", - "324 tiger mammal 2.608830 2.218881\n", - "269 reason hypertension 3.043544 2.554564\n", - "35 book library 3.335751 2.560611\n", - "169 line insurance 3.121240 2.947265\n", - "319 tiger carnivore 3.332882 3.004569\n", - "161 lad brother 2.885448 2.868957\n", - "\n", - " word 1 word 2 complex_probase_2_new_cossim (df1) complex_probase_2_new_cossim (df2)\n", - "39 bread butter 1.926594 1.926594\n", - "102 dollar buck 2.733086 2.733086\n", - "193 money dollar 2.733086 2.733086\n", - "150 impartiality interest 2.323327 2.323327\n", - "1 Arafat terror 3.103668 3.103668\n", - "266 psychology psychiatry 1.826092 1.826092\n", - "10 Mexico Brazil 1.921104 1.921104\n", - "5 Japanese American 2.408249 2.408249\n", - "\n", - " word 1 word 2 complex_19k_old_cossim (df1) complex_19k_old_cossim (df2)\n", - "115 environment ecology 2.920428 2.903515\n", - "256 psychology Freud 3.234018 2.992413\n", - "169 line insurance 3.089979 2.829222\n", - "33 bishop rabbi 2.300842 2.845229\n", - "220 opera performance 3.163513 3.062105\n", - "267 psychology science 2.231959 2.334221\n", - "265 psychology mind 2.886509 2.426014\n", - "45 cell phone 3.622510 2.693966\n", - "26 baby mother 2.292784 2.155920\n", - "161 lad brother 3.110214 3.092837\n", - "\n", - " word 1 word 2 transe_probase_old_cossim (df1) transe_probase_old_cossim (df2)\n", - "209 murder manslaughter 2.249251 2.257188\n", - "141 glass metal 3.225510 2.093335\n", - "296 stock CD 3.395233 3.514011\n", - "325 tiger organism 3.290722 2.591059\n", - "35 book library 3.701910 2.539030\n", - "2 FBI fingerprint 3.149125 2.911334\n", - "254 profit loss 1.653272 1.573516\n", - "334 video archive 3.219152 2.407191\n", - "166 life death 2.565452 2.692000\n", - "9 Mars scientist 3.504530 3.187455\n", - "\n", - " word 1 word 2 text_7props_19k_2_new_cossim (df1) text_7props_19k_2_new_cossim (df2)\n", - "176 luxury car 2.942098 2.942098\n", - "293 space world 2.109041 2.109041\n", - "309 summer drought 2.687325 2.687325\n", - "67 country citizen 1.942392 1.942392\n", - "169 line insurance 2.691916 2.691916\n", - "302 stock phone 2.963663 2.963663\n", - "5 Japanese American 2.145108 2.145108\n", - "238 precedent antecedent 1.844509 1.844509\n", - "143 governor interview 2.651640 2.651640\n", - "152 investor earning 1.902240 1.902240\n", - "\n", - " word 1 word 2 text_2props_19k_2_new_cossim (df1) text_2props_19k_2_new_cossim (df2)\n", - "329 train car 1.998965 1.998965\n", - "10 Mexico Brazil 1.950233 1.950233\n", - "19 announcement production 1.866451 1.866451\n", - "121 fighting defeating 1.940122 1.940122\n", - "293 space world 1.993016 1.993016\n", - "8 Maradona football 2.351065 2.351065\n", - "114 energy secretary 2.803514 2.803514\n", - "\n", - " word 1 word 2 transe_probase_19k_1_new_cossim (df1) transe_probase_19k_1_new_cossim (df2)\n", - "155 journal association 2.736767 2.736767\n", - "123 focus life 2.337493 2.337493\n", - "159 king queen 1.570639 1.570639\n", - "169 line insurance 2.557647 2.557647\n", - "305 street children 3.186623 3.186623\n", - "336 vodka brandy 1.527815 1.527815\n", - "232 planet people 3.593423 3.593423\n", - "130 forest graveyard 3.142560 3.142560\n", - "69 credit card 2.076337 2.076337\n", - "40 brother monk 2.683273 2.683273\n", - "\n", - " word 1 word 2 abstract_19k_old_cossim (df1) abstract_19k_old_cossim (df2)\n", - "285 situation conclusion 1.808156 1.808156\n", - "303 street avenue 2.281843 2.281843\n", - "94 disability death 2.746255 2.746255\n", - "5 Japanese American 3.292768 3.292768\n", - "183 media trading 3.108796 3.108796\n", - "11 OPEC country 3.042327 3.042327\n", - "162 lad wizard 3.334772 3.334772\n", - "129 football tennis 2.518421 2.518421\n", - "231 planet moon 1.920149 1.920149\n", - "\n", - " word 1 word 2 complex_probase_old_cossim (df1) complex_probase_old_cossim (df2)\n", - "63 computer software 2.565704 2.726328\n", - "21 architecture century 3.418617 3.099197\n", - "179 man woman 2.351588 1.471079\n", - "149 image surface 3.137178 3.256807\n", - "81 cup tableware 2.124012 1.954043\n", - "36 book paper 3.078243 2.635533\n", - "194 money laundering 2.759570 2.800958\n", - "236 possibility girl 3.361988 2.920025\n", - "209 murder manslaughter 2.249251 2.257188\n", - "218 oil stock 2.577913 2.625197\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_old_cossim (df1) abstract_firstsent_19k_old_cossim (df2)\n", - "246 preservation world 3.234863 3.234863\n", - "5 Japanese American 2.728319 2.728319\n", - "285 situation conclusion 1.808156 1.808156\n", - "244 precedent law 1.878214 1.878214\n", - "94 disability death 3.016865 3.016865\n", - "175 lover quarrel 3.157233 3.157233\n", - "109 drink mother 3.128050 3.128050\n", - "177 magician wizard 1.909871 1.909871\n", - "\n", - " word 1 word 2 transe_probase_19k_old_cossim (df1) transe_probase_19k_old_cossim (df2)\n", - "79 cup object 2.627446 2.362561\n", - "234 planet star 2.586230 2.320493\n", - "176 luxury car 3.150901 2.977136\n", - "156 journey car 2.971068 2.457446\n", - "324 tiger mammal 2.909669 2.322927\n", - "120 fertility egg 2.547399 2.671721\n", - "248 problem airport 3.826307 3.170909\n", - "16 aluminum metal 2.712132 1.916614\n", - "36 book paper 3.078243 2.635533\n", - "211 music project 3.141641 3.304875\n", - "\n", - " word 1 word 2 complex_probase_19k_old_cossim (df1) complex_probase_19k_old_cossim (df2)\n", - "277 seafood lobster 2.240601 2.113436\n", - "27 bank money 3.066413 2.792811\n", - "337 vodka gin 1.857971 2.369972\n", - "211 music project 3.141641 3.304875\n", - "271 registration arrangement 2.319711 2.954145\n", - "143 governor interview 4.023383 3.076389\n", - "149 image surface 3.137178 3.256807\n", - "94 disability death 2.565398 2.939547\n", - "166 life death 2.565452 2.692000\n", - "226 physics proton 3.802075 2.800635\n", - "\n", - " word 1 word 2 concat_19k_v1_old_cossim (df1) concat_19k_v1_old_cossim (df2)\n", - "270 record number 2.977163 2.589607\n", - "282 shower flood 3.398140 2.908007\n", - "97 dividend calculation 2.507181 2.708939\n", - "239 precedent cognition 2.724066 2.793355\n", - "125 food preparation 2.932974 2.836360\n", - "342 wood forest 3.144257 2.612681\n", - "304 street block 2.690410 2.201689\n", - "250 production crew 2.552550 2.783363\n", - "6 Jerusalem Israel 2.978292 2.383538\n", - "210 museum theater 3.208882 2.943593\n", - "\n", - " word 1 word 2 transe_probase_1_new_cossim (df1) transe_probase_1_new_cossim (df2)\n", - "108 drink eat 2.334188 2.334188\n", - "25 attempt peace 2.624155 2.624155\n", - "232 planet people 3.392578 3.392578\n", - "204 morality marriage 2.173908 2.173908\n", - "267 psychology science 1.840069 1.840069\n", - "20 announcement warning 1.930855 1.930855\n", - "37 boxing round 3.527058 3.527058\n", - "77 cup food 2.657233 2.657233\n", - "73 cup artifact 2.065621 2.065621\n", - "\n", - " word 1 word 2 text_7props_19k_old_cossim (df1) text_7props_19k_old_cossim (df2)\n", - "311 telephone communication 2.269291 2.269291\n", - "205 movie critic 2.872865 2.872865\n", - "69 credit card 1.834364 1.834364\n", - "334 video archive 1.948662 1.948662\n", - "51 change attitude 1.894075 1.894075\n", - "260 psychology depression 1.948810 1.948810\n", - "63 computer software 1.918968 1.918968\n", - "\n", - " word 1 word 2 abstract_19k_2_new_cossim (df1) abstract_19k_2_new_cossim (df2)\n", - "90 deployment departure 1.826386 1.826386\n", - "14 admission ticket 2.890691 2.890691\n", - "84 day summer 1.820569 1.820569\n", - "217 observation architecture 2.541219 2.541219\n", - "243 precedent information 2.768309 2.768309\n", - "253 professor doctor 2.462181 2.462181\n", - "60 computer keyboard 1.977226 1.977226\n", - "95 disaster area 3.350219 3.350219\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_2_new_cossim (df1) concat_probase_19k_v2_2_new_cossim (df2)\n", - "208 movie theater 2.614114 2.456455\n", - "177 magician wizard 2.146197 2.011585\n", - "86 death row 2.990100 2.809539\n", - "293 space world 2.481352 2.412213\n", - "123 focus life 2.908816 2.990622\n", - "316 territory surface 2.778507 2.489232\n", - "289 smart student 2.754242 2.578396\n", - "333 victim emergency 2.380390 2.445431\n", - "55 coast hill 2.826077 2.516979\n", - "78 cup liquid 2.365327 2.264276\n", - "\n", - "\n" - ] - } - ], - "source": [ - "print(compare.report())" - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "id": "common-vietnam", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idword 1word 2idh_simh_dimf_simf_dimn_sim...concat_19k_v2_word2_newconcat_19k_v2_old_cossimconcat_19k_v2_2_new_cossimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cossimconcat_probase_19k_v2_2_new_cossimavg_old
0Q106106Q11460closetclothes423H3H3...[0.0014151543049584102, 0.003161483781535701, ...2.6970222.652559[0.013902607489678993, 0.013241494756981564, -...[0.0014224480432097992, 0.0031547764732941653,...[0.01371531560905985, 0.013126875633706597, -0...[0.0014206775968733409, 0.0031581452887393872,...2.6970222.6833183.0
1Q107Q16502spaceworld2933L3S3...[-0.0031782974877087693, 0.003973805776938075,...2.4858592.347308[0.00027019944749503126, 0.005353652289998999,...[-0.0032792710227188605, 0.0036472880832864947...[0.00027492382990721006, 0.0053545622809597, -...[-0.0032450374860671267, 0.0036673577053825254...2.4858592.4813523.2
2Q107Q2329spacechemistry2924NaN4NaN4...[0.015268952851071075, -0.0024137893437008715,...2.7987882.782963[0.00027019944749503126, 0.005353652289998999,...[0.015322423107720673, -0.0024500099720118624,...[0.00027492382990721006, 0.0053545622809597, -...[0.015281665873653082, -0.002421165402091456, ...2.7987882.7950474.0
3Q1074Q7364skineye2883H3H3...[0.002992664951436964, 0.013922942027531155, -...2.3558132.314417[-0.0026976204618851985, 0.001541600665881322,...[0.0033640181667058486, 0.014044398230441645, ...[-0.002678224125439186, 0.0015598357892553907,...[0.0033484286344994184, 0.014002864550517797, ...2.3558132.3506033.0
4Q1079023Q500834championshiptournament381NaN1NaN2...[0.00920825730356781, 0.011965374832474578, 0....1.8686991.865663[-0.0008601077391385219, 0.005201185839222482,...[0.00923153244996602, 0.011960544533439752, 0....[-0.0008458279784483333, 0.005209858282773185,...[0.009207264410626997, 0.011951895965764294, 0...1.8686991.8667851.2
\n", - "

5 rows × 105 columns

\n", - "
" - ], - "text/plain": [ - " word1_kg_id word2_kg_id word 1 word 2 id h_sim h_dim f_sim \\\n", - "0 Q106106 Q11460 closet clothes 42 3 H 3 \n", - "1 Q107 Q16502 space world 293 3 L 3 \n", - "2 Q107 Q2329 space chemistry 292 4 NaN 4 \n", - "3 Q1074 Q7364 skin eye 288 3 H 3 \n", - "4 Q1079023 Q500834 championship tournament 38 1 NaN 1 \n", - "\n", - " f_dim n_sim ... concat_19k_v2_word2_new \\\n", - "0 H 3 ... [0.0014151543049584102, 0.003161483781535701, ... \n", - "1 S 3 ... [-0.0031782974877087693, 0.003973805776938075,... \n", - "2 NaN 4 ... [0.015268952851071075, -0.0024137893437008715,... \n", - "3 H 3 ... [0.002992664951436964, 0.013922942027531155, -... \n", - "4 NaN 2 ... [0.00920825730356781, 0.011965374832474578, 0.... \n", - "\n", - " concat_19k_v2_old_cossim concat_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.652559 \n", - "1 2.485859 2.347308 \n", - "2 2.798788 2.782963 \n", - "3 2.355813 2.314417 \n", - "4 1.868699 1.865663 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.013902607489678993, 0.013241494756981564, -... \n", - "1 [0.00027019944749503126, 0.005353652289998999,... \n", - "2 [0.00027019944749503126, 0.005353652289998999,... \n", - "3 [-0.0026976204618851985, 0.001541600665881322,... \n", - "4 [-0.0008601077391385219, 0.005201185839222482,... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [0.0014224480432097992, 0.0031547764732941653,... \n", - "1 [-0.0032792710227188605, 0.0036472880832864947... \n", - "2 [0.015322423107720673, -0.0024500099720118624,... \n", - "3 [0.0033640181667058486, 0.014044398230441645, ... \n", - "4 [0.00923153244996602, 0.011960544533439752, 0.... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.01371531560905985, 0.013126875633706597, -0... \n", - "1 [0.00027492382990721006, 0.0053545622809597, -... \n", - "2 [0.00027492382990721006, 0.0053545622809597, -... \n", - "3 [-0.002678224125439186, 0.0015598357892553907,... \n", - "4 [-0.0008458279784483333, 0.005209858282773185,... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [0.0014206775968733409, 0.0031581452887393872,... \n", - "1 [-0.0032450374860671267, 0.0036673577053825254... \n", - "2 [0.015281665873653082, -0.002421165402091456, ... \n", - "3 [0.0033484286344994184, 0.014002864550517797, ... \n", - "4 [0.009207264410626997, 0.011951895965764294, 0... \n", - "\n", - " concat_probase_19k_v2_old_cossim concat_probase_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.683318 \n", - "1 2.485859 2.481352 \n", - "2 2.798788 2.795047 \n", - "3 2.355813 2.350603 \n", - "4 1.868699 1.866785 \n", - "\n", - " avg_old \n", - "0 3.0 \n", - "1 3.2 \n", - "2 4.0 \n", - "3 3.0 \n", - "4 1.2 \n", - "\n", - "[5 rows x 105 columns]" - ] - }, - "execution_count": 157, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "rising-platform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.20519776]])" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cosine_similarity(np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word1_new'][1:-1].split(\",\")]).reshape(1,-1), np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word2_new'][1:-1].split(\",\")]).reshape(1,-1))" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "governing-offer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Word 1', 'Word 2', 'ID', 'H_Sim', 'H_Dim', 'F_Sim', 'F_Dim', 'N_Sim',\n", - " 'N_Dim', 'D_Sim',\n", - " ...\n", - " 'concat_19k_v2_word1_new', 'concat_19k_v2_word2_new',\n", - " 'concat_19k_v2_old_cosSim', 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_word1_old', 'concat_probase_19k_v2_word2_old',\n", - " 'concat_probase_19k_v2_word1_new', 'concat_probase_19k_v2_word2_new',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim'],\n", - " dtype='object', length=104)" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "rough-february", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_7props_19k_2_new_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'text_2props_19k_2_new_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'complex_19k_2_new_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'transe_19k_1_new_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_19k_2_new_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_2_new_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'complex_probase_2_new_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'transe_probase_1_new_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'complex_probase_19k_2_new_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_1_new_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_19k_v1_2_new_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_2_new_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim']" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "hired-center", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "\n", - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "extraordinary-value", - "metadata": {}, - "outputs": [], - "source": [ - "emb_pairs = [('text_7props_19k', 'text_7props_19k_2'),\n", - " ('text_2props_19k', 'text_2props_19k_2'),\n", - " ('complex_19k', 'complex_19k_2'),\n", - " ('transe_19k', 'transe_19k_1'),\n", - " ('abstract_19k', 'abstract_19k_2'),\n", - " ('abstract_firstSent_19k', 'abstract_firstSent_19k_2'),\n", - " ('complex_probase', 'complex_probase_2'),\n", - " ('transe_probase', 'transe_probase_1'),\n", - " ('complex_probase_19k', 'complex_probase_19k_2'),\n", - " ('transe_probase_19k', 'transe_probase_19k_1'),\n", - " ('concat_19k_v1', 'concat_19k_v1_2'),\n", - " ('concat_probase_19k_v1', 'concat_probase_19k_v1_2'),\n", - " ('concat_19k_v2', 'concat_19k_v2_2'),\n", - " ('concat_probase_19k_v2', 'concat_probase_19k_v2_2')]\n", - "colMappers = {p[0]+'_old_cosSim': p[1]+'_new_cosSim' for p in emb_pairs}" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "political-battle", - "metadata": {}, - "outputs": [], - "source": [ - "oldColList = list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "flexible-booking", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 123, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "radio-outline", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "recent-portal", - "metadata": {}, - "outputs": [], - "source": [ - "# oldColList, [colMappers[col] for col in oldColList]\n", - "t1234 = []\n", - "t4567 = []\n", - "for col in oldColList:\n", - " t1234.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(labelSamples), wordSim353AnnotDF_New_Merged_DF[col].apply(labelSamples)))\n", - " t4567.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(labelSamples), wordSim353AnnotDF_New_Merged_DF[colMappers[col]].apply(labelSamples)))\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "id": "opening-inside", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = list(zip(indNames,t1234, t4567))" - ] - }, - { - "cell_type": "code", - "execution_count": 187, - "id": "settled-overhead", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = pd.DataFrame(t1234, columns=['Type', 'Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category'])" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "id": "young-heath", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TypeAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated category
10Complex-Transe-AbsFirstSent - 19k0.6802330.686047
11Complex-Transe-AbsFirstSent - Probase-19k0.6802330.680233
8Complex - Probase-19k0.5988370.662791
2Complex - 19k0.5988370.659884
6Complex - Probase0.5988370.656977
3Transe - 19k0.5988370.654070
5Abstract First Sentence - 19k0.6511630.654070
7Transe - Probase0.5988370.645349
9Transe - Probase-19k0.5988370.642442
4Abstract - 19k0.6279070.627907
136 embeddings - Probase-19k0.6250000.627907
126 embeddings - 19k0.6250000.625000
0Text 7 props - 19k0.5726740.569767
1Text 2 props - 19k0.5668600.555233
\n", - "
" - ], - "text/plain": [ - " Type \\\n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "8 Complex - Probase-19k \n", - "2 Complex - 19k \n", - "6 Complex - Probase \n", - "3 Transe - 19k \n", - "5 Abstract First Sentence - 19k \n", - "7 Transe - Probase \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "10 0.680233 \n", - "11 0.680233 \n", - "8 0.598837 \n", - "2 0.598837 \n", - "6 0.598837 \n", - "3 0.598837 \n", - "5 0.651163 \n", - "7 0.598837 \n", - "9 0.598837 \n", - "4 0.627907 \n", - "13 0.625000 \n", - "12 0.625000 \n", - "0 0.572674 \n", - "1 0.566860 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \n", - "10 0.686047 \n", - "11 0.680233 \n", - "8 0.662791 \n", - "2 0.659884 \n", - "6 0.656977 \n", - "3 0.654070 \n", - "5 0.654070 \n", - "7 0.645349 \n", - "9 0.642442 \n", - "4 0.627907 \n", - "13 0.627907 \n", - "12 0.625000 \n", - "0 0.569767 \n", - "1 0.555233 " - ] - }, - "execution_count": 188, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t1234.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "id": "beneficial-continuity", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " tempVals.append(acc/N_SPLITS)\n", - "\n", - " for col in colList:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " tempVals.append(acc/N_SPLITS)\n", - " return tempVals\n", - "\n", - "def compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, newColList, indNames):\n", - " tempVals1 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, oldColList)\n", - " tempVals2 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, newColList)\n", - " summ = (pd.DataFrame(list(zip(tempVals1, tempVals2)), index = ['Combined'] + indNames, columns = ['Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category']) * 100)\n", - " summ['Increase'] = summ['Accuracy (in %) of new embeddings compared to annotated category'] - summ['Accuracy (in %) of old embeddings compared to annotated category']\n", - " return summ.sort_values(by=['Increase'], ascending=False)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "intensive-platform", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "id": "significant-season", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracyRF(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = RandomForestClassifier(max_depth=max(2 * len(colList) // 3,3), random_state=100)\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "id": "fitting-jurisdiction", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Text 2 props - 19k66.00000067.1596641.159664
Complex - 19k66.86554667.1596640.294118
Combined68.89916069.1680670.268908
Transe - 19k66.86554666.571429-0.294118
Abstract - 19k66.54621865.983193-0.563025
Text 7 props - 19k67.74789967.159664-0.588235
Abstract First Sentence - 19k73.21848771.504202-1.714286
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Text 2 props - 19k 66.000000 \n", - "Complex - 19k 66.865546 \n", - "Combined 68.899160 \n", - "Transe - 19k 66.865546 \n", - "Abstract - 19k 66.546218 \n", - "Text 7 props - 19k 67.747899 \n", - "Abstract First Sentence - 19k 73.218487 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Text 2 props - 19k 67.159664 \n", - "Complex - 19k 67.159664 \n", - "Combined 69.168067 \n", - "Transe - 19k 66.571429 \n", - "Abstract - 19k 65.983193 \n", - "Text 7 props - 19k 67.159664 \n", - "Abstract First Sentence - 19k 71.504202 \n", - "\n", - " Increase \n", - "Text 2 props - 19k 1.159664 \n", - "Complex - 19k 0.294118 \n", - "Combined 0.268908 \n", - "Transe - 19k -0.294118 \n", - "Abstract - 19k -0.563025 \n", - "Text 7 props - 19k -0.588235 \n", - "Abstract First Sentence - 19k -1.714286 " - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - "'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', \n", - " 'Transe - 19k', 'Abstract - 19k', 'Abstract First Sentence - 19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "loose-cuisine", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Complex + Transe + Abstract FirstSent 19k66.17647166.4621850.285714
Combined68.75630369.0336130.277311
Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent69.63025269.327731-0.302521
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.176471 \n", - "Combined 68.756303 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.630252 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.462185 \n", - "Combined 69.033613 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.327731 \n", - "\n", - " Increase \n", - "Complex + Transe + Abstract FirstSent 19k 0.285714 \n", - "Combined 0.277311 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... -0.302521 " - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['concat_19k_v1_old_cosSim',\n", - "'concat_19k_v2_old_cosSim']\n", - "indNames = ['Complex + Transe + Abstract FirstSent 19k', 'Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "second-lightning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 271, - "id": "institutional-gamma", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "KeyboardInterrupt\n", - "\n" - ] - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "seven-edinburgh", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "individual-store", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "processed-reynolds", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "oldColPairs = list(zip(oldColList, indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "forced-dining", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Text 7 props - 19k\n", - "Text 2 props - 19k\n", - "Complex - 19k\n", - "Transe - 19k\n", - "Abstract - 19k\n", - "Abstract First Sentence - 19k\n", - "Complex - Probase\n", - "Transe - Probase\n", - "Complex - Probase-19k\n", - "Transe - Probase-19k\n", - "Complex-Transe-AbsFirstSent - 19k\n", - "Complex-Transe-AbsFirstSent - Probase-19k\n", - "6 embeddings - 19k\n", - "6 embeddings - Probase-19k\n" - ] - } - ], - "source": [ - "print(\"\\n\".join(indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "permanent-comfort", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2002" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comb(len(oldColPairs), 9)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "quantitative-japanese", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "16384" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "2**(len(oldColPairs))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "flexible-preparation", - "metadata": {}, - "outputs": [], - "source": [ - "# accs = []\n", - "# for r in tqdm(range(1,len(oldColPairs)+1)):\n", - "# for comb in tqdm(combinations(oldColPairs, r)):\n", - "# print(len(comb))\n", - "# # oldAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [col[0] for col in comb])\n", - "# # newAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [colMappers[col[0]] for col in comb])\n", - "# print(\" & \".join([col[1] for col in comb]).count(\"&\"))\n", - "# # accs.append((indName, oldAcc, newAcc))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 316, - "id": "fatal-publicity", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "77739ea8b6bf4cfb933f406e6e9699a5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.42857165.126050-0.3025211
1Text 2 props - 19k64.55462263.680672-0.8739501
2Complex - 19k64.57983265.4453780.8655461
3Transe - 19k64.57983266.8907562.3109241
4Abstract - 19k67.73949668.0504200.3109241
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.428571 \n", - "1 64.554622 \n", - "2 64.579832 \n", - "3 64.579832 \n", - "4 67.739496 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 65.126050 -0.302521 \n", - "1 63.680672 -0.873950 \n", - "2 65.445378 0.865546 \n", - "3 66.890756 2.310924 \n", - "4 68.050420 0.310924 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 325, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 326, - "id": "congressional-genre", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 327, - "id": "single-duration", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 328, - "id": "sharp-tunisia", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
30Text 2 props - 19k & Abstract First Sentence - 19k71.84033670.966387-0.8739502
204Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k71.84033670.378151-1.4621853
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
60Abstract - 19k & Abstract First Sentence - 19k71.54621871.243697-0.3025212
12350Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.504202-1.4705888
12329Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.075630-0.8991608
12154Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.084034-0.8907568
11944Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.781513-1.1932778
12349Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.210084-1.7647068
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "30 Text 2 props - 19k & Abstract First Sentence - 19k \n", - "204 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "12350 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12329 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12154 Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "11944 Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12349 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "30 71.840336 \n", - "204 71.840336 \n", - "18 71.840336 \n", - "60 71.546218 \n", - "12350 70.974790 \n", - "12329 70.974790 \n", - "12154 70.974790 \n", - "11944 70.974790 \n", - "12349 70.974790 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "30 70.966387 \n", - "204 70.378151 \n", - "18 71.848739 \n", - "60 71.243697 \n", - "12350 69.504202 \n", - "12329 70.075630 \n", - "12154 70.084034 \n", - "11944 69.781513 \n", - "12349 69.210084 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "30 -0.873950 2 \n", - "204 -1.462185 3 \n", - "18 0.008403 2 \n", - "60 -0.302521 2 \n", - "12350 -1.470588 8 \n", - "12329 -0.899160 8 \n", - "12154 -0.890756 8 \n", - "11944 -1.193277 8 \n", - "12349 -1.764706 8 " - ] - }, - "execution_count": 328, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 329, - "id": "federal-timing", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
5318Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.39495871.5462181.1512616
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
108Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k69.21008471.2521012.0420173
694Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k70.08403471.2521011.1680674
8035Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.09243771.2521011.1596647
7049Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.38655571.2521010.8655467
1916Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k69.79831971.2521011.4537825
11327Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.10084071.2521011.1512618
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "5318 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "108 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k \n", - "694 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "8035 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7049 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "1916 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "11327 Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "18 71.840336 \n", - "5318 70.394958 \n", - "5 72.705882 \n", - "51 68.630252 \n", - "108 69.210084 \n", - "694 70.084034 \n", - "8035 70.092437 \n", - "7049 70.386555 \n", - "1916 69.798319 \n", - "11327 70.100840 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "18 71.848739 \n", - "5318 71.546218 \n", - "5 71.537815 \n", - "51 71.521008 \n", - "108 71.252101 \n", - "694 71.252101 \n", - "8035 71.252101 \n", - "7049 71.252101 \n", - "1916 71.252101 \n", - "11327 71.252101 \n", - "\n", - " Increase count \n", - "18 0.008403 2 \n", - "5318 1.151261 6 \n", - "5 -1.168067 1 \n", - "51 2.890756 2 \n", - "108 2.042017 3 \n", - "694 1.168067 4 \n", - "8035 1.159664 7 \n", - "7049 0.865546 7 \n", - "1916 1.453782 5 \n", - "11327 1.151261 8 " - ] - }, - "execution_count": 329, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 330, - "id": "known-basement", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
1041Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k66.28571469.1932772.9075634
2828Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k65.71428668.6134452.8991605
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
9440Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k66.56302569.1848742.6218497
2701Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k65.71428668.3277312.6134455
1035Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k66.28571468.8991602.6134454
1030Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k66.28571468.8991602.6134454
2689Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k65.71428668.3193282.6050425
2834Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k65.71428668.3193282.6050425
1026Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k68.64705971.2268912.5798324
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "1041 Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "2828 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "9440 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "2701 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "1035 Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k \n", - "1030 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k \n", - "2689 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k \n", - "2834 Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k \n", - "1026 Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "1041 66.285714 \n", - "2828 65.714286 \n", - "51 68.630252 \n", - "9440 66.563025 \n", - "2701 65.714286 \n", - "1035 66.285714 \n", - "1030 66.285714 \n", - "2689 65.714286 \n", - "2834 65.714286 \n", - "1026 68.647059 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "1041 69.193277 \n", - "2828 68.613445 \n", - "51 71.521008 \n", - "9440 69.184874 \n", - "2701 68.327731 \n", - "1035 68.899160 \n", - "1030 68.899160 \n", - "2689 68.319328 \n", - "2834 68.319328 \n", - "1026 71.226891 \n", - "\n", - " Increase count \n", - "1041 2.907563 4 \n", - "2828 2.899160 5 \n", - "51 2.890756 2 \n", - "9440 2.621849 7 \n", - "2701 2.613445 5 \n", - "1035 2.613445 4 \n", - "1030 2.613445 4 \n", - "2689 2.605042 5 \n", - "2834 2.605042 5 \n", - "1026 2.579832 4 " - ] - }, - "execution_count": 330, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "id": "private-conditions", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
126 embeddings - 19k70.09243771.2521011.1596641
136 embeddings - Probase-19k70.09243770.6722690.5798321
4Abstract - 19k67.73949668.0504200.3109241
11Complex-Transe-AbsFirstSent - Probase-19k67.47058867.176471-0.2941181
10Complex-Transe-AbsFirstSent - 19k67.47058866.899160-0.5714291
3Transe - 19k64.57983266.8907562.3109241
9Transe - Probase-19k64.57983266.8907562.3109241
7Transe - Probase64.57983266.5966392.0168071
8Complex - Probase-19k64.57983265.4453780.8655461
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "12 6 embeddings - 19k \n", - "13 6 embeddings - Probase-19k \n", - "4 Abstract - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "7 Transe - Probase \n", - "8 Complex - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "12 70.092437 \n", - "13 70.092437 \n", - "4 67.739496 \n", - "11 67.470588 \n", - "10 67.470588 \n", - "3 64.579832 \n", - "9 64.579832 \n", - "7 64.579832 \n", - "8 64.579832 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "12 71.252101 \n", - "13 70.672269 \n", - "4 68.050420 \n", - "11 67.176471 \n", - "10 66.899160 \n", - "3 66.890756 \n", - "9 66.890756 \n", - "7 66.596639 \n", - "8 65.445378 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "12 1.159664 1 \n", - "13 0.579832 1 \n", - "4 0.310924 1 \n", - "11 -0.294118 1 \n", - "10 -0.571429 1 \n", - "3 2.310924 1 \n", - "9 2.310924 1 \n", - "7 2.016807 1 \n", - "8 0.865546 1 " - ] - }, - "execution_count": 331, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs[allCombs['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "markdown", - "id": "heard-think", - "metadata": {}, - "source": [ - "## RF" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "id": "trying-liabilities", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "123c20d4e60b4e3e8b09c0e0e46efc1e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.12605063.672269-1.4537821
1Text 2 props - 19k61.89916063.3445381.4453781
2Complex - 19k66.61344564.277311-2.3361341
3Transe - 19k66.61344566.310924-0.3025211
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.126050 \n", - "1 61.899160 \n", - "2 66.613445 \n", - "3 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 63.672269 -1.453782 \n", - "1 63.344538 1.445378 \n", - "2 64.277311 -2.336134 \n", - "3 66.310924 -0.302521 \n", - "4 66.008403 -2.890756 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "id": "increased-indonesian", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs1)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "id": "english-brother", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "id": "fantastic-narrow", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
60Abstract - 19k & Abstract First Sentence - 19k72.11764768.327731-3.7899162
138Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k72.10084070.361345-1.7394963
151Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.83193370.378151-1.4537823
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
2114Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k71.81512669.789916-2.0252105
2001Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k71.81512669.798319-2.0168075
2000Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k71.81512670.378151-1.4369755
1999Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k71.81512669.495798-2.3193285
1998Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k71.81512669.487395-2.3277315
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "138 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "151 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "2114 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "2001 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "2000 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "1999 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k \n", - "1998 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 73.285714 \n", - "60 72.117647 \n", - "138 72.100840 \n", - "151 71.831933 \n", - "152 71.831933 \n", - "2114 71.815126 \n", - "2001 71.815126 \n", - "2000 71.815126 \n", - "1999 71.815126 \n", - "1998 71.815126 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 70.075630 \n", - "60 68.327731 \n", - "138 70.361345 \n", - "151 70.378151 \n", - "152 71.252101 \n", - "2114 69.789916 \n", - "2001 69.798319 \n", - "2000 70.378151 \n", - "1999 69.495798 \n", - "1998 69.487395 \n", - "\n", - " Increase count \n", - "5 -3.210084 1 \n", - "60 -3.789916 2 \n", - "138 -1.739496 3 \n", - "151 -1.453782 3 \n", - "152 -0.579832 3 \n", - "2114 -2.025210 5 \n", - "2001 -2.016807 5 \n", - "2000 -1.436975 5 \n", - "1999 -2.319328 5 \n", - "1998 -2.327731 5 " - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 259, - "id": "brown-punishment", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
681Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k70.66386671.2605040.5966394
218Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.22689171.2521010.0252103
1575Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.23529471.2521010.0168075
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
3884Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k68.31092471.2352942.9243706
129Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k69.76470671.2352941.4705883
217Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.22689170.974790-0.2521013
604Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.52941270.966387-0.5630254
7207Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k68.60504270.9663872.3613457
690Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k70.66386670.9663870.3025214
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "681 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k \n", - "218 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "1575 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "3884 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "129 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k \n", - "217 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "604 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "7207 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "690 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "681 70.663866 \n", - "218 71.226891 \n", - "1575 71.235294 \n", - "152 71.831933 \n", - "3884 68.310924 \n", - "129 69.764706 \n", - "217 71.226891 \n", - "604 71.529412 \n", - "7207 68.605042 \n", - "690 70.663866 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "681 71.260504 \n", - "218 71.252101 \n", - "1575 71.252101 \n", - "152 71.252101 \n", - "3884 71.235294 \n", - "129 71.235294 \n", - "217 70.974790 \n", - "604 70.966387 \n", - "7207 70.966387 \n", - "690 70.966387 \n", - "\n", - " Increase count \n", - "681 0.596639 4 \n", - "218 0.025210 3 \n", - "1575 0.016807 5 \n", - "152 -0.579832 3 \n", - "3884 2.924370 6 \n", - "129 1.470588 3 \n", - "217 -0.252101 3 \n", - "604 -0.563025 4 \n", - "7207 2.361345 7 \n", - "690 0.302521 4 " - ] - }, - "execution_count": 259, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 260, - "id": "considerable-syndication", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
13048Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210170.3529416.1008409
13084Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210169.2100844.9579839
14022Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.52941269.1764714.6470599
13861Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.24369768.8907564.6470599
7551Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k63.09243767.7226894.6302527
13058Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210168.6050424.3529419
6500Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k63.68907668.0336134.3445387
7537Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k63.09243767.4369754.3445387
7570Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k63.09243767.4285714.3361347
6499Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k63.68907668.0252104.3361347
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "13048 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "13084 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "14022 Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "13861 Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7551 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "13058 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "6500 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7537 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7570 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k \n", - "6499 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "13048 64.252101 \n", - "13084 64.252101 \n", - "14022 64.529412 \n", - "13861 64.243697 \n", - "7551 63.092437 \n", - "13058 64.252101 \n", - "6500 63.689076 \n", - "7537 63.092437 \n", - "7570 63.092437 \n", - "6499 63.689076 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "13048 70.352941 \n", - "13084 69.210084 \n", - "14022 69.176471 \n", - "13861 68.890756 \n", - "7551 67.722689 \n", - "13058 68.605042 \n", - "6500 68.033613 \n", - "7537 67.436975 \n", - "7570 67.428571 \n", - "6499 68.025210 \n", - "\n", - " Increase count \n", - "13048 6.100840 9 \n", - "13084 4.957983 9 \n", - "14022 4.647059 9 \n", - "13861 4.647059 9 \n", - "7551 4.630252 7 \n", - "13058 4.352941 9 \n", - "6500 4.344538 7 \n", - "7537 4.344538 7 \n", - "7570 4.336134 7 \n", - "6499 4.336134 7 " - ] - }, - "execution_count": 260, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 261, - "id": "binary-committee", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
11Complex-Transe-AbsFirstSent - Probase-19k70.04201770.6302520.5882351
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
10Complex-Transe-AbsFirstSent - 19k70.04201768.302521-1.7394961
136 embeddings - Probase-19k68.90756368.042017-0.8655461
126 embeddings - 19k68.90756366.857143-2.0504201
6Complex - Probase66.61344566.596639-0.0168071
7Transe - Probase66.61344566.596639-0.0168071
3Transe - 19k66.61344566.310924-0.3025211
9Transe - Probase-19k66.61344566.008403-0.6050421
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "6 Complex - Probase \n", - "7 Transe - Probase \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "11 70.042017 \n", - "5 73.285714 \n", - "10 70.042017 \n", - "13 68.907563 \n", - "12 68.907563 \n", - "6 66.613445 \n", - "7 66.613445 \n", - "3 66.613445 \n", - "9 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "11 70.630252 \n", - "5 70.075630 \n", - "10 68.302521 \n", - "13 68.042017 \n", - "12 66.857143 \n", - "6 66.596639 \n", - "7 66.596639 \n", - "3 66.310924 \n", - "9 66.008403 \n", - "4 66.008403 \n", - "\n", - " Increase count \n", - "11 0.588235 1 \n", - "5 -3.210084 1 \n", - "10 -1.739496 1 \n", - "13 -0.865546 1 \n", - "12 -2.050420 1 \n", - "6 -0.016807 1 \n", - "7 -0.016807 1 \n", - "3 -0.302521 1 \n", - "9 -0.605042 1 \n", - "4 -2.890756 1 " - ] - }, - "execution_count": 261, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1[allCombs1['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "approximate-event", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "successful-spider", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "moral-thought", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "western-easter", - "metadata": {}, - "source": [ - "# Generate Embeddings Files" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "nervous-physiology", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = pd.concat([wordSim353AnnotDF_New2[['word1_kg_id', 'Word 1']], wordSim353AnnotDF_New2[['word2_kg_id', 'Word 2']].rename(columns={'Word 2': 'Word 1', 'word2_kg_id': 'word1_kg_id'})])" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "neither-hammer", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = wordList[~wordList.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "welsh-indiana", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in embedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "processed-wonder", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in newEmbedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings_new_attempt1.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "psychological-template", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['Word 1'].to_csv('../data/wordsim353_embeddings_words.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prime-munich", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assigned-appliance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "severe-textbook", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prompt-orlando", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "otherwise-qatar", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "inclusive-brick", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "micro-kernel", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "optical-atlas", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assured-means", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-fever", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opened-baker", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "supposed-charm", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "384px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Archived/Retrofitting using 19k + 19k dataset-Copy1.ipynb b/Archived/Retrofitting using 19k + 19k dataset-Copy1.ipynb deleted file mode 100644 index c1a6272..0000000 --- a/Archived/Retrofitting using 19k + 19k dataset-Copy1.ipynb +++ /dev/null @@ -1,714 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "dynamic-generator", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn.metrics.pairwise import euclidean_distances\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "objective-saturday", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmbAndCosSim.csv\")\n", - "p279Seeded_SiblingsDF3_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmbAndCosSim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "joint-magnet", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1idnode1_labellabelnode2_labelsentnode1_embnode2_embbert2SentSim...BERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
0Q100171002Q1503443Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+...[ 3.61319035e-01 1.03393383e-01 1.50166345e+...0.901134...NaNNaN[0.87660795, 0.4991357, -0.39552155, 0.7046891...[0.36156428, -0.015657336, -0.14483449, -0.253...[0.79082793, 0.53679967, -0.3825465, 0.6778466...[0.36156428, -0.015657336, -0.14483449, -0.253...0.8326020.823419-1.000000-1.000000
1Q1002697Q49850Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+...[-2.23196611e-01 -4.97725368e-01 2.20271492e+...0.863449...[-0.28667202591896057, -0.4099476933479309, 0....[-0.25435054302215576, -0.92085862159729, 1.68...[1.256428, 0.3254261, -0.26960722, 0.101883665...[0.92698413, 0.32396156, -0.7647308, 0.6973268...[1.256428, 0.3254261, -0.26960722, 0.101883665...[1.0344226, 0.39984593, -0.76180136, 0.8256311...0.7426380.734428-1.000000-1.000000
2Q101998Q4421Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+...[ 5.09670794e-01 -4.42380428e-01 1.53245163e+...0.507148...[0.12320789694786072, 0.2723684310913086, 0.05...[0.5991100072860718, 0.15195603668689728, 0.59...[0.8141036, 0.14491142, -0.59703183, 0.335001,...[-0.16750671, -0.17960861, -0.58211946, -0.687...[0.91628444, 0.104261845, -0.49683735, 0.21296...[-0.13534825, -0.23398273, -0.5165668, -0.7297...0.6470310.7076110.5080600.455747
3Q102165Q2294Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+...[-6.87960759e-02 -1.65659860e-01 9.53789592e-...0.798707...[0.17410606145858765, 0.6839145421981812, -0.8...[-0.04499293863773346, 0.6921464204788208, -0....[0.469377, 0.7162001, -0.36740896, 0.76742333,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...[0.4080446, 0.7498908, -0.2665757, 0.74437106,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...0.8365310.8475910.8559590.770030
4Q102205Q11435Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+...[ 1.30038410e-01 -8.53226840e-01 2.37821031e+...0.934246...[0.4393930733203888, 0.7159943580627441, 0.647...[0.5091343522071838, -0.05845202878117561, 1.0...[-0.19995248, 0.65605164, -0.14234662, 0.43931...[0.4293771, 1.1976917, 0.04422909, 0.5975481, ...[-0.45549682, 0.73478854, -0.1980287, 0.436793...[0.33631665, 1.1661042, 0.13744242, 0.6776439,...0.7655890.7803420.7526930.515319
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 id node1_label \\\n", - "0 Q100171002 Q1503443 Q1503443-P279-Q100171002-8282ae74-0 secrecy \n", - "1 Q1002697 Q49850 Q49850-P279-Q1002697-0c52cf68-0 journal \n", - "2 Q101998 Q4421 Q4421-P279-Q101998-d0983886-0 forest \n", - "3 Q102165 Q2294 Q2294-P279-Q102165-0893a180-0 proton \n", - "4 Q102205 Q11435 Q11435-P279-Q102205-7b448d05-0 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " node1_emb \\\n", - "0 [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " node2_emb bert2SentSim ... \\\n", - "0 [ 3.61319035e-01 1.03393383e-01 1.50166345e+... 0.901134 ... \n", - "1 [-2.23196611e-01 -4.97725368e-01 2.20271492e+... 0.863449 ... \n", - "2 [ 5.09670794e-01 -4.42380428e-01 1.53245163e+... 0.507148 ... \n", - "3 [-6.87960759e-02 -1.65659860e-01 9.53789592e-... 0.798707 ... \n", - "4 [ 1.30038410e-01 -8.53226840e-01 2.37821031e+... 0.934246 ... \n", - "\n", - " BERT_abstract_emb_right \\\n", - "0 NaN \n", - "1 [-0.28667202591896057, -0.4099476933479309, 0.... \n", - "2 [0.12320789694786072, 0.2723684310913086, 0.05... \n", - "3 [0.17410606145858765, 0.6839145421981812, -0.8... \n", - "4 [0.4393930733203888, 0.7159943580627441, 0.647... \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 [-0.25435054302215576, -0.92085862159729, 1.68... \n", - "2 [0.5991100072860718, 0.15195603668689728, 0.59... \n", - "3 [-0.04499293863773346, 0.6921464204788208, -0.... \n", - "4 [0.5091343522071838, -0.05845202878117561, 1.0... \n", - "\n", - " textEmb_7props_left \\\n", - "0 [0.87660795, 0.4991357, -0.39552155, 0.7046891... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.8141036, 0.14491142, -0.59703183, 0.335001,... \n", - "3 [0.469377, 0.7162001, -0.36740896, 0.76742333,... \n", - "4 [-0.19995248, 0.65605164, -0.14234662, 0.43931... \n", - "\n", - " textEmb_7props_right \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... \n", - "1 [0.92698413, 0.32396156, -0.7647308, 0.6973268... \n", - "2 [-0.16750671, -0.17960861, -0.58211946, -0.687... \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... \n", - "4 [0.4293771, 1.1976917, 0.04422909, 0.5975481, ... \n", - "\n", - " textEmb_2props_left \\\n", - "0 [0.79082793, 0.53679967, -0.3825465, 0.6778466... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.91628444, 0.104261845, -0.49683735, 0.21296... \n", - "3 [0.4080446, 0.7498908, -0.2665757, 0.74437106,... \n", - "4 [-0.45549682, 0.73478854, -0.1980287, 0.436793... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... 0.832602 \n", - "1 [1.0344226, 0.39984593, -0.76180136, 0.8256311... 0.742638 \n", - "2 [-0.13534825, -0.23398273, -0.5165668, -0.7297... 0.647031 \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... 0.836531 \n", - "4 [0.33631665, 1.1661042, 0.13744242, 0.6776439,... 0.765589 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \n", - "0 0.823419 -1.000000 -1.000000 \n", - "1 0.734428 -1.000000 -1.000000 \n", - "2 0.707611 0.508060 0.455747 \n", - "3 0.847591 0.855959 0.770030 \n", - "4 0.780342 0.752693 0.515319 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "original-grass", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.602876\n", - "std 0.146181\n", - "min 0.064503\n", - "25% 0.493110\n", - "50% 0.597949\n", - "75% 0.711631\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "removed-occupation", - "metadata": {}, - "source": [ - "# Retrofitting Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "consolidated-investigation", - "metadata": {}, - "outputs": [], - "source": [ - "def normalize(embedDict):\n", - " for key, val in embedDict.items():\n", - " temp = np.array([float(val1) for val1 in val])\n", - " temp2 = temp**2\n", - " embedDict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - " return embedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "irish-disposal", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchEmbeddings(df):\n", - " embedDict = {}\n", - " for _, row in df.iterrows():\n", - " embedDict[row.node] = row.value\n", - " return normalize(embedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "orange-person", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchNeighbours(df):\n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1_label not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row.bert2SentSim))\n", - " \n", - " if row.node2_label not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row.bert2SentSim))\n", - " return neighboursDict" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "joined-kazakhstan", - "metadata": {}, - "outputs": [], - "source": [ - "def retrofit(embedDict, neighDict):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " # newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])) / ((len(neighbs)) + sum([neighb[1] for neighb in neighbs]))\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " # newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])) / ((len(neighbs))**0.5 + sum([neighb[1] for neighb in neighbs]))\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "collected-performance", - "metadata": {}, - "outputs": [], - "source": [ - "def determineDistances(embedDict, newEmbedDict):\n", - " dist = []\n", - " for word in embedDict.keys():\n", - " dist.append(euclidean_distances([embedDict[word]], [newEmbedDict[word]])[0][0])\n", - " return dist" - ] - }, - { - "cell_type": "markdown", - "id": "later-dimension", - "metadata": {}, - "source": [ - "# Attempts" - ] - }, - { - "cell_type": "markdown", - "id": "divine-chair", - "metadata": {}, - "source": [ - "## Concatenated ChildPar + Siblings Dataset" - ] - }, - { - "cell_type": "markdown", - "id": "scientific-heading", - "metadata": {}, - "source": [ - "### Text Embeddings | 19k + 19k dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 171, - "id": "stretch-elizabeth", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-7-props-all.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "id": "young-prototype", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 174, - "id": "sapphire-bulgarian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding[-0.13148594, 0.20147827, 0.015393771, 1.12779...
1Q99898510text_embedding[0.19386396, 0.41306746, -0.32783666, 0.450188...
2Q99526025text_embedding[0.89479333, 0.27038768, 0.15989815, -0.092144...
3Q99365546text_embedding[0.10686234, 0.95048314, 0.32389534, 0.1960084...
4Q993308text_embedding[0.23211154, 0.060303785, -1.0003253, 0.637829...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "1 Q99898510 text_embedding \n", - "2 Q99526025 text_embedding \n", - "3 Q99365546 text_embedding \n", - "4 Q993308 text_embedding \n", - "\n", - " value \n", - "0 [-0.13148594, 0.20147827, 0.015393771, 1.12779... \n", - "1 [0.19386396, 0.41306746, -0.32783666, 0.450188... \n", - "2 [0.89479333, 0.27038768, 0.15989815, -0.092144... \n", - "3 [0.10686234, 0.95048314, 0.32389534, 0.1960084... \n", - "4 [0.23211154, 0.060303785, -1.0003253, 0.637829... " - ] - }, - "execution_count": 174, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 176, - "id": "closed-charles", - "metadata": {}, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "hungry-cream", - "metadata": {}, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "id": "leading-invasion", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "id": "protecting-devon", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19155" - ] - }, - "execution_count": 179, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 180, - "id": "prescribed-right", - "metadata": {}, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "boring-williams", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19155.000000\n", - "mean 0.310037\n", - "std 0.062412\n", - "min 0.000000\n", - "25% 0.269865\n", - "50% 0.310933\n", - "75% 0.351558\n", - "max 0.564922\n", - "dtype: float64" - ] - }, - "execution_count": 181, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "384px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Archived/Retrofitting using Master datasets.ipynb b/Archived/Retrofitting using Master datasets.ipynb deleted file mode 100644 index 7f05d50..0000000 --- a/Archived/Retrofitting using Master datasets.ipynb +++ /dev/null @@ -1,13982 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "dynamic-generator", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import scipy.stats as stats\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from tqdm.notebook import tqdm\n", - "from itertools import combinations\n", - "from math import comb\n", - "from time import time\n", - "from datetime import date\n", - "import warnings\n", - "from joblib import Parallel, delayed\n", - "import json\n", - "\n", - "from sklearn.model_selection import StratifiedKFold, KFold\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC, SVR\n", - "from sklearn.metrics import accuracy_score, mean_squared_error, classification_report, plot_confusion_matrix, confusion_matrix\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "\n", - "warnings.filterwarnings('ignore')\n", - "# pd.set_option('mode.chained_assignment', None)" - ] - }, - { - "cell_type": "markdown", - "id": "balanced-conspiracy", - "metadata": {}, - "source": [ - "# Retrofitting Pre-Req Class Definitions" - ] - }, - { - "cell_type": "markdown", - "id": "theoretical-perception", - "metadata": {}, - "source": [ - "## Utils" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "arbitrary-palace", - "metadata": {}, - "outputs": [], - "source": [ - "class Utils:\n", - " \"\"\"\n", - " This contains all the utility functions needed by any part of retrofitting\n", - " \"\"\"\n", - " _today = date.today()\n", - " today_date = _today.strftime(\"%b_%d_%Y\")\n", - " LABELS = ['I','M','U']\n", - " \n", - " @classmethod\n", - " def normalize(cls, embed_dict):\n", - " for key, val in embed_dict.items():\n", - " temp = np.array([float(val1) for val1 in val])\n", - " temp2 = temp**2\n", - " embed_dict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - " return embed_dict\n", - " \n", - " @classmethod\n", - " def fetch_embeddings(cls, df):\n", - " embed_dict = {}\n", - " for _, row in df.iterrows():\n", - " embed_dict[row.node] = row.value\n", - " return normalize(embed_dict)\n", - " \n", - " @classmethod\n", - " def fill_coverage(cls, embed_dict, embed_name):\n", - " wordsim_df = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " wiki_cs_df = pd.read_csv('../data/wikidata-cs_categorized.csv')\n", - " concept_net_df = pd.read_csv('../data/kgtk_conceptnet_evaluation.csv')\n", - " \n", - " compulsory_coverage_set = set(\n", - " wordsim_df['word1_kg_id'].to_list() \n", - " + wordsim_df['word2_kg_id'].to_list()\n", - " + wiki_cs_df['word1_kg_id'].to_list() \n", - " + wiki_cs_df['word2_kg_id'].to_list()\n", - " + concept_net_df['word1_kg_id'].to_list()\n", - " + concept_net_df['word2_kg_id'].to_list())\n", - " \n", - " embed_size = len(embed_dict[next(iter(embed_dict))])\n", - " count = 0\n", - " for word in compulsory_coverage_set:\n", - " if word not in embed_dict:\n", - " embed_dict[word] = np.zeros((embed_size))\n", - " count += 1\n", - " print(f\"Added {count} corrections to {embed_name}\")\n", - " return embed_dict\n", - " \n", - " @classmethod\n", - " def check_coverage(cls, embed_dict):\n", - " wordsim_df = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " \n", - " compulsory_coverage_set = set(wordsim_df['word1_kg_id'].to_list() + wordsim_df['word2_kg_id'].to_list())\n", - " embed_size = len(embed_dict[next(iter(embed_dict))])\n", - " count = 0\n", - " for word in compulsory_coverage_set:\n", - " if word not in embed_dict:\n", - " count += 1\n", - " return (len(wordSim353AnnotDF_New) - count)\n", - " \n", - " @classmethod\n", - " def determine_distances(cls, embed_dict, new_embed_dict):\n", - " dist = []\n", - " for word in embed_dict.keys():\n", - " dist.append(euclidean_distances([embed_dict[word]], [new_embed_dict[word]])[0][0])\n", - " return dist\n", - " \n", - " @classmethod\n", - " def serialize_embedding_dict(cls, embed_dict):\n", - " for key2 in embed_dict.keys():\n", - " embed_dict[key2] = embed_dict[key2].tolist() if type(embed_dict[key2]) != list else embed_dict[key2]\n", - " return embed_dict\n", - " \n", - " @classmethod\n", - " def deserialize_embedding_dict(cls, embed_dict):\n", - " for key2 in embed_dict.keys():\n", - " embed_dict[key2] = np.array(embed_dict[key2])\n", - " return embed_dict\n", - " \n", - " @classmethod\n", - " def label_samples(cls, score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - " \n", - " @classmethod\n", - " def determine_cos_sim(cls, emb1, emb2):\n", - " return cosine_similarity(\n", - " np.array(emb1).reshape(1,-1), \n", - " np.array(emb2).reshape(1,-1)\n", - " )[0][0]\n", - " \n", - " @classmethod\n", - " def plot_confusion_matrix(cls, conf_matrix, title):\n", - " plt.close()\n", - " sns.heatmap(conf_matrix, xticklabels=Utils.LABELS, yticklabels=Utils.LABELS, annot=True)\n", - " plt.xlabel('Predicted')\n", - " plt.ylabel('Actual')\n", - " plt.title(title+' Confusion Matrix')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "urban-pennsylvania", - "metadata": {}, - "outputs": [], - "source": [ - "# import sys\n", - "# def sizeof_fmt(num, suffix='B'):\n", - "# ''' by Fred Cirera, https://stackoverflow.com/a/1094933/1870254, modified'''\n", - "# for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']:\n", - "# if abs(num) < 1024.0:\n", - "# return \"%3.1f %s%s\" % (num, unit, suffix)\n", - "# num /= 1024.0\n", - "# return \"%.1f %s%s\" % (num, 'Yi', suffix)\n", - "\n", - "# for name, size in sorted(((name, sys.getsizeof(value)) for name, value in locals().items()),\n", - "# key= lambda x: -x[1])[:10]:\n", - "# print(\"{:>30}: {:>8}\".format(name, sizeof_fmt(size)))" - ] - }, - { - "cell_type": "markdown", - "id": "equal-papua", - "metadata": {}, - "source": [ - "## InputEmbeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "excess-mambo", - "metadata": {}, - "outputs": [], - "source": [ - "class InputEmbeddings:\n", - " \"\"\"\n", - " Instance variables:\n", - " - embed_dict_master - holds all qnode to embedding mappings as a dictionary\n", - " - embedding_list - list of all keys of the above dictionary\n", - " \"\"\"\n", - " def __init__(self, has_embeddings_include: bool = True):\n", - " self.embed_dict_master = {}\n", - " self.emb_list = ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent']\n", - " if has_embeddings_include: # TODO\n", - " self.emb_list += ['has_h', 'has_a', 'has_s']\n", - " self.embedding_lengths = {}\n", - " \n", - " for emb_key in tqdm(self.emb_list, desc='Input Embeddings', leave=False):\n", - " self.embed_dict_master[emb_key] = self.fetch_embedding(emb_key)\n", - " \n", - " self.fetch_embedding_stats()\n", - " print(\"Fetched all input embeddings\")\n", - "\n", - " def fetch_embedding(self, emb_key):\n", - " return Utils.fill_coverage(\n", - " Utils.deserialize_embedding_dict(\n", - " json.load(open('../data/Master_P279_dataset/embeddings/'+emb_key+'_orig_embedding_dict.json'))\n", - " ), emb_key\n", - " )\n", - "\n", - " def fetch_embedding_stats(self):\n", - " for emb_name in self.embed_dict_master.keys():\n", - " self.embedding_lengths[emb_name] = len(next(iter(self.embed_dict_master[emb_name].values())))\n", - " print(f\"Embedding: {emb_name}, Size: {len(self.embed_dict_master[emb_name].keys())}, Length: {self.embedding_lengths[emb_name]}\")" - ] - }, - { - "cell_type": "markdown", - "id": "ceramic-secretary", - "metadata": {}, - "source": [ - "## NeighborDatasets" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "detected-division", - "metadata": {}, - "outputs": [], - "source": [ - "class NeighborDatasets:\n", - " \"\"\"\n", - " Instance variables:\n", - " - neighbors_dict_master - holds all qnode to neighbor qnode mappings as a dictionary\n", - " - basis_list - list of all keys of the above dictionary\n", - " \"\"\"\n", - " \n", - " def __init__(self, class_datasets_fetch: bool = True, probase_datasets_fetch: bool = False):\n", - " self.neighbors_dict_master = {}\n", - " \n", - " pbar = tqdm(desc='Neighbor Datasets', leave=False, total = \n", - " 6 \n", - " + (3 if class_datasets_fetch else 0) \n", - " + (2 if probase_datasets_fetch else 0) \n", - " )\n", - " \n", - " bert_P279_child_par_df = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered.csv')\n", - " bert_P279_child_par_df_cross_enc = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered_cross_enc.csv')\n", - " bert_P279_siblings_df = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')\n", - " bert_P279_siblings_df_cross_enc = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed_cross_enc.csv')\n", - " \n", - " self.neighbors_dict_master['bert_child_par'] = self.fetch_neighbours(bert_P279_child_par_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['bert_siblings'] = self.fetch_neighbours(bert_P279_siblings_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['bert_all'] = self.fetch_neighbours(pd.concat([\n", - " bert_P279_child_par_df, bert_P279_siblings_df\n", - " ]))\n", - " pbar.update(1)\n", - " \n", - " self.neighbors_dict_master['cross_enc_child_par'] = self.fetch_neighbours(bert_P279_child_par_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['cross_enc_siblings'] = self.fetch_neighbours(bert_P279_siblings_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['cross_enc_all'] = self.fetch_neighbours(pd.concat([\n", - " bert_P279_child_par_df, bert_P279_siblings_df\n", - " ]))\n", - " pbar.update(1)\n", - " \n", - " if class_datasets_fetch:\n", - " class_P279_child_par_df = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_w_classSim.csv')\n", - " class_P279_child_par_df['similarity_value'] = class_P279_child_par_df['classSim']\n", - " \n", - " class_P279_siblings_df = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_w_classSim.csv')\n", - " class_P279_siblings_df['similarity_value'] = class_P279_siblings_df['classSim']\n", - " \n", - " self.neighbors_dict_master['class_child_par'] = self.fetch_neighbours(class_P279_child_par_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['class_siblings'] = self.fetch_neighbours(class_P279_siblings_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['class_all'] = self.fetch_neighbours(pd.concat([\n", - " class_P279_child_par_df, class_P279_siblings_df\n", - " ]))\n", - " pbar.update(1)\n", - "\n", - " if probase_datasets_fetch:\n", - " probase_df = self.fetch_probase('../data/probase/probase_WQnodes_subset_and_sim.csv')\n", - " \n", - " self.neighbors_dict_master['probase'] = self.fetch_neighbours(probase_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['probase+bert_all'] = self.fetch_neighbours(pd.concat([\n", - " bert_P279_child_par_df, bert_P279_siblings_df, probase_df\n", - " ]))\n", - " pbar.update(1)\n", - " \n", - " self.basis_list = list(self.neighbors_dict_master.keys())\n", - " \n", - " pbar.close()\n", - "\n", - " print(f\"Fetched neighbour datasets: {self.basis_list}\")\n", - " \n", - " def process_probase(self, probase_file_path):\n", - " probase_df = pd.read_csv(probase_file_path)\n", - " probase_df = probase_df.rename(columns={'n1_final_qnode': 'node1', 'n2_final_qnode': 'node2', 'sim': 'similarity_value'})\n", - " probase_df['similarity_value'] = 0.5 + 0.5 * probase_df['similarity_value']\n", - " \n", - " return probase_df\n", - " \n", - " def fetch_neighbours(self, df):\n", - " neighbours_dict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighbours_dict:\n", - " neighbours_dict[row.node1] = []\n", - " neighbours_dict[row.node1].append((row.node2, row.similarity_value))\n", - "\n", - " if row.node2 not in neighbours_dict:\n", - " neighbours_dict[row.node2] = []\n", - " neighbours_dict[row.node2].append((row.node1, row.similarity_value))\n", - "# print(max([len(neigh) for neigh in neighbours_dict.values()]))\n", - " \n", - " return neighbours_dict" - ] - }, - { - "cell_type": "markdown", - "id": "architectural-service", - "metadata": {}, - "source": [ - "## EvaluationDatasets" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "through-address", - "metadata": {}, - "outputs": [], - "source": [ - "class EvaluationDatasets:\n", - " def __init__(self):\n", - " self.wordsim_df = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " self.fetch_distribution_stats(\"Wordsim-353\", self.wordsim_df)\n", - " \n", - " self.wiki_cs_df = pd.read_csv('../data/wikidata-cs_categorized.csv')\n", - " self.fetch_distribution_stats(\"Wikidata CS\", self.wiki_cs_df)\n", - " \n", - " self.concept_net_df = pd.read_csv('../data/kgtk_conceptnet_evaluation.csv')\n", - " self.fetch_distribution_stats(\"Concept Net\", self.concept_net_df)\n", - " \n", - " self.get_coverage_nodes()\n", - " \n", - " def fetch_distribution_stats(self, name, dataset):\n", - " print(f\"Dataset: {name}\")\n", - " print(dataset.category.value_counts())\n", - " \n", - " def get_coverage_nodes(self):\n", - " self.coverage = set(\n", - " self.wordsim_df['word1_kg_id'].to_list() \n", - " + self.wordsim_df['word2_kg_id'].to_list()\n", - " + self.wiki_cs_df['word1_kg_id'].to_list() \n", - " + self.wiki_cs_df['word2_kg_id'].to_list()\n", - " + self.concept_net_df['word1_kg_id'].to_list()\n", - " + self.concept_net_df['word2_kg_id'].to_list())" - ] - }, - { - "cell_type": "markdown", - "id": "refined-growth", - "metadata": {}, - "source": [ - "## ResultMetrics" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "necessary-naples", - "metadata": {}, - "outputs": [], - "source": [ - "class ResultMetrics:\n", - " \n", - " @classmethod\n", - " def compute_classification_results(cls,\n", - " embed_dict, \n", - " eval_dataset,\n", - " get_output_values: bool = False,\n", - " old_accuracy = None\n", - " ):\n", - " \"\"\"\n", - " Inputs:\n", - " - embed_dict - dictionary of qnodes with node embeddings as its values\n", - " - eval_dataset - evaluation dataset as pandas dataframe that must have the \n", - " following columns for this function to work correctly:\n", - " * word1_kg_id - Qnode of node1 in the evaluation pair\n", - " * word2_kg_id - Qnode of node2 in the evaluation pair\n", - " * category - Category of the evaluation pair. One of the labels: I/U/M\n", - " Outputs:\n", - " - response_dict - Returns a dictionary with the following keys:\n", - " * covered_pairs - Indicates the number of pairs of the evaluation dataset that the \n", - " embedding dictionary can cover\n", - " \n", - " \"\"\"\n", - " response_dict = {}\n", - " \n", - " eval_dataset = eval_dataset.copy()\n", - "\n", - " missing_words_set = set(\n", - " eval_dataset[eval_dataset.word1_kg_id.apply(lambda p: p not in embed_dict)].word1_kg_id.to_list() \n", - " + eval_dataset[eval_dataset.word2_kg_id.apply(lambda p: p not in embed_dict)].word2_kg_id.to_list()\n", - " )\n", - " \n", - " response_dict['covered_pairs'] = len(eval_dataset)\n", - "\n", - " eval_dataset['embedding_cos_sim'] = eval_dataset.apply(lambda p: Utils.determine_cos_sim(embed_dict[p['word1_kg_id']], embed_dict[p['word2_kg_id']]) \n", - " if p['word1_kg_id'] in embed_dict and p['word2_kg_id'] in embed_dict \n", - " else None, axis=1)\n", - " \n", - " eval_dataset['embedding_cos_sim'].fillna(eval_dataset['embedding_cos_sim'].mean(skipna=True), inplace=True)\n", - " \n", - " # Scale abs value of cosine similarities to 1,4 strictly\n", - " eval_dataset['embedding_cos_sim'] = eval_dataset['embedding_cos_sim'].apply(lambda p: 4 - 3 * abs(p))\n", - "\n", - " response_dict['accuracy'] = 100 * accuracy_score(\n", - " eval_dataset['category'],\n", - " eval_dataset['embedding_cos_sim'].apply(Utils.label_samples)\n", - " )\n", - " \n", - " response_dict['classification_report'] = classification_report(\n", - " eval_dataset['category'], \n", - " eval_dataset['embedding_cos_sim'].apply(Utils.label_samples), \n", - " output_dict=True\n", - " )\n", - "\n", - " response_dict['conf_matrix'] = confusion_matrix(\n", - " eval_dataset['category'], \n", - " eval_dataset['embedding_cos_sim'].apply(Utils.label_samples), \n", - " labels=Utils.LABELS\n", - " )\n", - " \n", - " if old_accuracy is not None:\n", - " response_dict['increase_acc'] = response_dict['accuracy'] - old_accuracy\n", - " else:\n", - " response_dict['increase_acc'] = None\n", - " \n", - " if get_output_values:\n", - " response_dict['preds'] = eval_dataset['embedding_cos_sim'].apply(Utils.label_samples)\n", - "\n", - " return response_dict, \\\n", - " (response_dict['covered_pairs'], \\\n", - " response_dict['accuracy'], \\\n", - " response_dict['increase_acc'], \\\n", - " \n", - " response_dict['classification_report']['I']['precision'], \\\n", - " response_dict['classification_report']['I']['recall'], \\\n", - " response_dict['classification_report']['I']['f1-score'], \\\n", - " \n", - " response_dict['classification_report']['M']['precision'], \\\n", - " response_dict['classification_report']['M']['recall'], \\\n", - " response_dict['classification_report']['M']['f1-score'], \\\n", - " \n", - " response_dict['classification_report']['U']['precision'], \\\n", - " response_dict['classification_report']['U']['recall'], \\\n", - " response_dict['classification_report']['U']['f1-score'])\n", - " \n", - " @classmethod\n", - " def fetch_best_result_for_emb(cls, results_df, emb_col, target_col, iter_col, highest: bool = True):\n", - " opt_value = {}\n", - " for _, row in results_df.iterrows():\n", - " if row[emb_col] not in opt_value:\n", - " opt_value[row[emb_col]] = {'opt_metric': float('-inf') if highest else float('inf'),\n", - " 'opt_row': [], 'old_row': []}\n", - " if row[iter_col] == 0:\n", - " opt_value[row[emb_col]]['old_row'] = row\n", - " else:\n", - " if (highest and row[target_col] > opt_value[row[emb_col]]['opt_metric']) \\\n", - " or (not(highest) and row[target_col] < opt_value[row[emb_col]]['opt_metric']):\n", - " opt_value[row[emb_col]]['opt_metric'] = row[target_col]\n", - " opt_value[row[emb_col]]['opt_row'] = row\n", - " best_results = []\n", - " for emb_key in opt_value:\n", - " best_results.append(opt_value[emb_key]['old_row'])\n", - " best_results.append(opt_value[emb_key]['opt_row'])\n", - " return pd.DataFrame(best_results, columns = results_df.columns)" - ] - }, - { - "cell_type": "markdown", - "id": "arranged-cosmetic", - "metadata": {}, - "source": [ - "## RetrofittingProcedures" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "prescription-mainstream", - "metadata": {}, - "outputs": [], - "source": [ - "class RetrofittingProcedures:\n", - " \n", - " np_label_samples = np.vectorize(Utils.label_samples)\n", - " \n", - " @classmethod\n", - " def retrofit(cls,embed_dict, neighbors_dict, weight_case, weight_assignment=False):\n", - " new_embed_dict = {}\n", - " for word in embed_dict.keys():\n", - " if word in neighbors_dict:\n", - " neighbs = neighbors_dict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embed_dict, neighbs))\n", - " if len(neighbs) == 0:\n", - " new_embed_dict[word] = embed_dict[word]\n", - " continue\n", - " if weight_assignment:\n", - " sum_of_sims = sum([neighb[1] for neighb in neighbs])\n", - " sum_of_embs = sum([embed_dict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " else:\n", - " sum_of_sims = sum([1 for neighb in neighbs])\n", - " sum_of_embs = sum([embed_dict[neighb[0]] for neighb in neighbs])\n", - "\n", - " if weight_case == 1:\n", - " new_embed_dict[word] = (embed_dict[word] * (len(neighbs)) + sum_of_embs) / ((len(neighbs)) + sum_of_sims)\n", - " elif weight_case == 2:\n", - " new_embed_dict[word] = (embed_dict[word] * (len(neighbs))**2 + sum_of_embs) / ((len(neighbs))**2 + sum_of_sims)\n", - " elif weight_case == 0.5:\n", - " new_embed_dict[word] = (embed_dict[word] * (len(neighbs))**0.5 + sum_of_embs) / ((len(neighbs))**0.5 + sum_of_sims)\n", - " else:\n", - " raise\n", - " else:\n", - " new_embed_dict[word] = embed_dict[word]\n", - " return new_embed_dict\n", - " \n", - " @classmethod\n", - " def execute_all_unsupervised_scenarios(cls,\n", - " emb_list, basis_list, \n", - " embed_dict_master, neigh_dict_master,\n", - " eval_dataset,\n", - " scenario_name: str,\n", - " num_of_iterations: int = 3, \n", - " weightedness_list: list = [True],\n", - " weight_cases_list: list = [1,2],\n", - " get_output_values: bool = False\n", - " ):\n", - " \n", - " new_embed_dict_master = {}\n", - " responses_dict_master = {}\n", - " results = []\n", - " \n", - " for basis in tqdm(basis_list, desc='Basis', leave=False):\n", - " for emb in tqdm(emb_list, desc='Embedding', leave=False):\n", - " for weightedness in weightedness_list:\n", - " for weight_case in tqdm(weight_cases_list, desc='Weight Case', leave=False):\n", - " # Base Reference Initializations and Calculations\n", - " embed_dict = embed_dict_master[emb]\n", - " responses_dict, result_values = ResultMetrics.compute_classification_results(\n", - " embed_dict, eval_dataset, get_output_values=get_output_values, old_accuracy=None)\n", - " results.append([emb, basis, weight_case, weightedness, 0, 'base', *result_values])\n", - " old_accuracy = responses_dict['accuracy']\n", - " \n", - " for iter_num in tqdm(range(1,num_of_iterations+1), desc='Iteration', leave=False):\n", - " start_time = time()\n", - " \n", - " case_name = emb + '_' + basis + '_' + str(weight_case) + ('_weighted' if weightedness else '_unweighted')\n", - " \n", - " new_embed_dict = cls.retrofit(embed_dict, neigh_dict_master[basis], weight_case, weightedness)\n", - " \n", - " responses_dict, result_values = ResultMetrics.compute_classification_results(\n", - " new_embed_dict, eval_dataset, get_output_values=get_output_values, old_accuracy=old_accuracy)\n", - " \n", - " results.append([emb, basis, weight_case, weightedness, iter_num, case_name, \\\n", - " *result_values, \\\n", - " time() - start_time\n", - " ])\n", - " \n", - " new_embed_dict_master[case_name] = embed_dict = new_embed_dict\n", - " responses_dict_master[case_name] = responses_dict\n", - "\n", - " # if iter_num == num_of_iterations and highestOne:\n", - " # case_name = gR[0] + '_' + gR[1] + '_' + str(gR[2]) + '_weighted'\n", - " # new_embed_dict_master[case_name] = serializeEmbeddingDict(new_embed_dict_master[case_name])\n", - " # highestOne = False\n", - " # json.dump(new_embed_dict_master[case_name],open('../data/Master_P279_dataset/embeddings/new_embedding_dict_'+case_name+'.json','w'))\n", - " # new_embed_dict_master[case_name] = deserializeEmbeddingDict(new_embed_dict_master[case_name])\n", - " resultsDF = pd.DataFrame(results, columns=['Embedding', 'Basis', 'Weight Case', 'Weightedness', \n", - " 'Iteration Num', 'Case Name', \\\n", - " 'No. of Pairs Covered', 'Accuracy', 'Increase in Accuracy', \\\n", - " 'I Precision', 'I Recall', 'I F1-Score', \\\n", - " 'M Precision', 'M Recall', 'M F1-Score', \\\n", - " 'U Precision', 'U Recall', 'U F1-Score', \\\n", - " 'Time to Retrofit'])\n", - " resultsDF.to_csv('../data/retrofitting/retro_unsup_results.' + scenario_name + '.'+ Utils.today_date +'.csv', index=False)\n", - " best_results_df = ResultMetrics.fetch_best_result_for_emb(resultsDF, 'Embedding', 'Accuracy', 'Iteration Num', highest=True)\n", - " best_results_df.to_csv('../data/retrofitting/retro_unsup_results.' + scenario_name + '.'+ Utils.today_date +'.best.csv', index=False)\n", - " \n", - " cls.save_needed_embeddings(new_embed_dict_master)\n", - " \n", - " return new_embed_dict_master, responses_dict_master\n", - " \n", - " @classmethod\n", - " def save_needed_embeddings(cls, new_embed_dict_master):\n", - " for case_name in new_embed_dict_master:\n", - " temp = {key: new_embed_dict_master[case_name][key] for key in new_embed_dict_master[case_name] if key in evalD.coverage}\n", - " new_embed_dict_master[case_name] = temp" - ] - }, - { - "cell_type": "markdown", - "id": "attempted-implementation", - "metadata": {}, - "source": [ - "## SVMProcedures" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "missing-facial", - "metadata": {}, - "outputs": [], - "source": [ - "class SVMProcedures:\n", - " @classmethod\n", - " def execute_supervised_scenario(cls,\n", - " eval_dataset, case, embed_dict_master, new_embed_dict_master, \n", - " num_of_splits = 10, \n", - " comb_mode: bool = False, SVC_or_SVR: str = 'SVC'\n", - " ):\n", - " \n", - " X = [] \n", - " \n", - " ################\n", - " # 2 Approaches based on argument: `comb_mode`\n", - " ################\n", - " \n", - " if comb_mode: ########## COMBINATION MODE CODE ####################\n", - " case_name = \" & \".join(case['emb']) + '_' + case['basis'] + '_' + str(case['weight_case']) + ('_weighted' if case['weightedness'] else '_unweighted')\n", - " \n", - " for _, row in eval_dataset.iterrows():\n", - " if case['svm_input'] == 'emb':\n", - " tempX = []\n", - " for individual_emb in case['emb']:\n", - " ind_case_name = individual_emb + '_' + case['basis'] + '_' + str(case['weight_case']) + ('_weighted' if case['weightedness'] else '_unweighted')\n", - " if case['iter_num'] != 0 and ind_case_name not in new_embed_dict_master:\n", - " return case_name, case, None\n", - " if case['iter_num'] == 0:\n", - " tempX += embed_dict_master[individual_emb][row['word1_kg_id']].tolist() + embedDictMaster[individual_emb][row['word2_kg_id']].tolist()\n", - " else:\n", - " tempX += new_embed_dict_master[ind_case_name][row['word1_kg_id']].tolist() + newEmbedDictMaster[ind_case_name][row['word2_kg_id']].tolist()\n", - " X.append(tempX)\n", - " else:\n", - " tempX = []\n", - " for individual_emb in case['emb']:\n", - " ind_case_name = individual_emb + '_' + case['basis'] + '_' + str(case['weight_case']) + ('_weighted' if case['weightedness'] else '_unweighted')\n", - " if case['iter_num'] != 0 and ind_case_name not in new_embed_dict_master:\n", - " return case_name, case, None\n", - " if case['iter_num'] == 0:\n", - " tempX.append(abs(Utils.determine_cos_sim(\n", - " embed_dict_master[individual_emb][row['word1_kg_id']], \n", - " embed_dict_master[individual_emb][row['word2_kg_id']]\n", - " )))\n", - " else:\n", - " tempX.append(abs(Utils.determine_cos_sim(\n", - " new_embed_dict_master[ind_case_name][row['word1_kg_id']],\n", - " new_embed_dict_master[ind_case_name][row['word2_kg_id']]\n", - " )))\n", - " X.append(tempX)\n", - "\n", - " else: ########## NON-COMBINATION MODE CODE ####################\n", - " case_name = case['emb'] + '_' + case['basis'] + '_' + str(case['weight_case']) + ('_weighted' if case['weightedness'] else '_unweighted')\n", - " if case['iter_num'] != 0 and case_name not in new_embed_dict_master:\n", - " return case_name, case, None\n", - " for _, row in eval_dataset.iterrows():\n", - " if case['svm_input'] == 'emb':\n", - " if case['iter_num'] == 0:\n", - " X.append(embed_dict_master[case['emb']][row['word1_kg_id']].tolist() + embed_dict_master[case['emb']][row['word2_kg_id']].tolist())\n", - " else:\n", - " X.append(new_embed_dict_master[case_name][row['word1_kg_id']].tolist() + new_embed_dict_master[case_name][row['word2_kg_id']].tolist())\n", - " else:\n", - " if case['iter_num'] == 0:\n", - " X.append(abs(Utils.determine_cos_sim(\n", - " embed_dict_master[case['emb']][row['word1_kg_id']], \n", - " embed_dict_master[case['emb']][row['word2_kg_id']]\n", - " )))\n", - " else:\n", - " X.append(abs(Utils.determine_cos_sim(\n", - " new_embed_dict_master[case_name][row['word1_kg_id']],\n", - " new_embed_dict_master[case_name][row['word2_kg_id']]\n", - " )))\n", - " \n", - " X = pd.DataFrame(X)\n", - " \n", - " ################\n", - " # 2 Approaches based on argument: `SVC_or_SVR`\n", - " ################\n", - " \n", - " # Target split depending on SVC or SVM\n", - " if SVC_or_SVR == 'SVC':\n", - " Y = eval_dataset['category']\n", - " elif SVC_or_SVR == 'SVR':\n", - " if 'Avg' not in eval_dataset.columns:\n", - " raise ValueError(\"Avg column not present in the provided eval_dataset\")\n", - " Y = (eval_dataset['Avg'] - 1) / 3\n", - " else:\n", - " raise ValueError(\"Invalid SVC_or_SVR provided\")\n", - " \n", - " if SVC_or_SVR == 'SVC':\n", - " skf = StratifiedKFold(n_splits=num_of_splits, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - " elif SVC_or_SVR == 'SVR':\n", - " skf = KFold(n_splits=num_of_splits, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " \n", - " # Classifier/Regressor training depending on SVC or SVM\n", - " if SVC_or_SVR == 'SVC':\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100, max_iter=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - " \n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return case_name, *list(case.values()), acc/num_of_splits\n", - " \n", - " elif SVC_or_SVR == 'SVR':\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVR(gamma='auto', max_iter=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - " \n", - " acc = 0\n", - " ktCorr = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += mean_squared_error(pred * 3 + 1, Y_test1 * 3 + 1)\n", - " ktCorr += stats.kendalltau(Y_test1 * 3 + 1, pred * 3 + 1).correlation\n", - " \n", - " return case_name, *list(case.values()), acc/num_of_splits, ktCorr/num_of_splits\n", - " \n", - " @classmethod\n", - " def execute_all_supervised_scenarios(cls,\n", - " emb_list, basis_list, embed_dict_master, new_embed_dict_master, \n", - " eval_dataset, \n", - " scenario_name: str,\n", - " num_of_splits = 10,\n", - " comb_mode: bool = False, SVC_or_SVR: str = 'SVC', \n", - " num_of_iterations = 3,\n", - " num_of_jobs = 1\n", - " ):\n", - " \n", - " if not(comb_mode):\n", - " svm_cases_list = []\n", - " for basis in basis_list:\n", - " for emb in emb_list:\n", - " for weightedness in [True]:\n", - " for iter_num in range(0,num_of_iterations+1):\n", - " for weight_case in [1,2]:\n", - " for svm_input in ['emb','score']:\n", - " temp_dict = {'basis': basis, 'emb': emb, 'weightedness': weightedness, \n", - " 'iter_num': iter_num, 'weight_case': weight_case, 'svm_input': svm_input}\n", - " svm_cases_list.append(temp_dict) \n", - " else:\n", - " svm_cases_list = []\n", - " for basis in basis_list:\n", - " for emb in emb_list:\n", - " for weightedness in [True]:\n", - " for iter_num in range(0,num_of_iterations+1):\n", - " for weight_case in [1,2]:\n", - " for svm_input in ['score']:\n", - " for i in range(1,len(emb_list)+1):\n", - " for emb_comb in combinations(emb_list, i):\n", - " temp_dict = {'basis': basis, 'emb': emb_comb, 'weightedness': weightedness, \n", - " 'iter_num': iter_num, 'weight_case': weight_case, 'svm_input': svm_input}\n", - " svm_cases_list.append(temp_dict) \n", - "\n", - " results = Parallel(n_jobs=num_of_jobs)(delayed(cls.execute_supervised_scenario)(\n", - " eval_dataset, caseDict, embed_dict_master, \n", - " new_embed_dict_master,num_of_splits,\n", - " comb_mode, SVC_or_SVR\n", - " ) for caseDict in tqdm(svm_cases_list))\n", - " \n", - " if SVC_or_SVR == 'SVC':\n", - " results_df = pd.DataFrame(results, columns=['Case Name','Basis','Embedding','Weightedness', 'Iteration Num', 'Weight Case', 'Technique','Accuracy'])\n", - " best_results_df = ResultMetrics.fetch_best_result_for_emb(results_df, 'Embedding', 'Accuracy', 'Iteration Num', highest=True)\n", - " best_results_df.to_csv('../data/retrofitting/retro_SVM_results.' + scenario_name + '.'+ Utils.today_date +'.best.csv', index=False)\n", - " else:\n", - " results_df = pd.DataFrame(results, columns=['Case Name','Basis','Embedding','Weightedness', 'Iteration Num', 'Weight Case', 'Technique','MSE', 'KT Correlation'])\n", - " best_results_df = ResultMetrics.fetch_best_result_for_emb(results_df, 'Embedding', 'MSE', 'Iteration Num', highest=False)\n", - " best_results_df.to_csv('../data/retrofitting/retro_SVM_results.' + scenario_name + '.'+ Utils.today_date +'.best.csv', index=False)\n", - " \n", - " results_df.to_csv('../data/retrofitting/retro_SVM_results.' + scenario_name + '.'+ Utils.today_date +'.csv', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "informed-voluntary", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "retained-frederick", - "metadata": {}, - "source": [ - "# The Master Controller" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "neither-ambassador", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Neighbor Datasets: 0%| | 0/9 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36mexecute_all_unsupervised_scenarios\u001b[0;34m(cls, emb_list, basis_list, embed_dict_master, neigh_dict_master, eval_dataset, scenario_name, num_of_iterations, weightedness_list, weight_cases_list, get_output_values)\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0mcase_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0memb\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'_'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mbasis\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'_'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mweight_case\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'_weighted'\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mweightedness\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m'_unweighted'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0mnew_embed_dict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrofit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0membed_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mneigh_dict_master\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbasis\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweight_case\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweightedness\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m responses_dict, result_values = ResultMetrics.compute_classification_results(\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36mretrofit\u001b[0;34m(cls, embed_dict, neighbors_dict, weight_case, weight_assignment)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mweight_assignment\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0msum_of_sims\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mneighb\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mneighb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mneighbs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0msum_of_embs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0membed_dict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mneighb\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mneighb\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mneighb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mneighbs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 18\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0msum_of_sims\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mneighb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mneighbs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "%%time\n", - "start_master_time = time()\n", - "new_embed_dict_master, responses_dict_master = {}, {}\n", - "\n", - "# Load all supporting files\n", - "# inp = InputEmbeddings()\n", - "basis = NeighborDatasets()\n", - "evalD = EvaluationDatasets()\n", - "\n", - "# get_size_of_variables()\n", - "\n", - "# Wordsim executions\n", - "new_embed_dict_master['wordsim'], responses_dict_master['wordsim'] = RetrofittingProcedures.execute_all_unsupervised_scenarios(inp.emb_list, basis.basis_list, inp.embed_dict_master, basis.neighbors_dict_master, \n", - " evalD.wordsim_df, \"wordsim_ind\")\n", - "# get_size_of_variables()\n", - "print(\"Analysed wordsim_ind\")\n", - "\n", - "SVMProcedures.execute_all_supervised_scenarios(inp.emb_list, basis.basis_list, inp.embed_dict_master, \n", - " new_embed_dict_master['wordsim'], \n", - " evalD.wordsim_df, \"SVC_Wordsim\",\n", - " comb_mode = False, SVC_or_SVR = 'SVC')\n", - "print(\"Analysed SVC_Wordsim\")\n", - "\n", - "SVMProcedures.execute_all_supervised_scenarios(inp.emb_list, basis.basis_list, inp.embed_dict_master, \n", - " new_embed_dict_master['wordsim'], \n", - " evalD.wordsim_df, \"SVR_Wordsim\",\n", - " comb_mode = False, SVC_or_SVR = 'SVR')\n", - "print(\"Analysed SVR_Wordsim\")\n", - "\n", - "# SVMProcedures.execute_all_supervised_scenarios(inp.emb_list, basis.basis_list, inp.embed_dict_master, \n", - "# new_embed_dict_master['wordsim'], \n", - "# evalD.wordsim_df, \"SVR_Wordsim\",\n", - "# comb_mode = True, SVC_or_SVR = 'SVR')\n", - "# print(\"Analysed SVR_Wordsim combinatrics\")\n", - "\n", - "new_embed_dict_master, responses_dict_master = {}, {}\n", - "\n", - "# Wiki CS executions\n", - "new_embed_dict_master['wiki_cs'], responses_dict_master['wiki_cs'] = RetrofittingProcedures.execute_all_unsupervised_scenarios(inp.emb_list, basis.basis_list, inp.embed_dict_master, basis.neighbors_dict_master, \n", - " evalD.wiki_cs_df, \"wiki_cs_ind\")\n", - "print(\"Analysed wiki_cs_ind\")\n", - "\n", - "SVMProcedures.execute_all_supervised_scenarios(inp.emb_list, basis.basis_list, inp.embed_dict_master,\n", - " new_embed_dict_master['wiki_cs'],\n", - " evalD.wordsim_df, \"SVC_Wiki_CS\",\n", - " comb_mode = False, SVC_or_SVR = 'SVC')\n", - "print(\"Analysed SVC_Wiki_CS\")\n", - "\n", - "# Conceptnet executions\n", - "new_embed_dict_master['conceptnet'], responses_dict_master['conceptnet'] = RetrofittingProcedures.execute_all_unsupervised_scenarios(inp.emb_list, basis.basis_list, inp.embed_dict_master, basis.neighbors_dict_master, \n", - " evalD.concept_net_df, \"concept_net_ind\")\n", - "print(\"Analysed concept_net_ind\")\n", - "\n", - "SVMProcedures.execute_all_supervised_scenarios(inp.emb_list, basis.basis_list, inp.embed_dict_master,\n", - " new_embed_dict_master['conceptnet'],\n", - " evalD.wordsim_df, \"SVC_Conceptnet\",\n", - " comb_mode = False, SVC_or_SVR = 'SVC')\n", - "print(\"Analysed SVC_Conceptnet\")\n", - "\n", - "print(f\"Time taken for end-to-end execution: {time() - start_master_time}s\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "champion-memory", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "hundred-virus", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Evaluation Datasets" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "limited-hormone", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bioDF = pd.read_csv('../data/pedersen2007measures_table1.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "alien-happiness", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Term1Term1_kg_idTerm1_kg_labelTerm1_descriptionTerm2Term2_kg_idTerm2_kg_labelTerm2_descriptionPhysicianCoder
0Renal failureQ476921kidney failuredisease where the kidneys fail to adequately f...Kidney failureQ476921kidney failuredisease where the kidneys fail to adequately f...4.04.0
1HeartQ1072heartorgan for the circulation of blood in animal c...MyocardiumQ84133myocardiummiddle layer of the heart wall, which consists...3.33.0
2StrokeQ12202strokeproblem with the arteries supplying blood to t...InfarctQ207550infarctiontissue death caused by a local lack of oxygen,...3.02.8
3AbortionQ8452abortionintentional ending of a pregnancyMiscarriageQ28693miscarriagenatural death of an embryo or fetus before it ...3.03.3
4DelusionQ189643delusionfirm and fixed belief based on inadequate grou...SchizophreniaQ41112schizophreniapsychotic disorder characterized by emotional ...3.02.2
\n", - "
" - ], - "text/plain": [ - " Term1 Term1_kg_id Term1_kg_label \\\n", - "0 Renal failure Q476921 kidney failure \n", - "1 Heart Q1072 heart \n", - "2 Stroke Q12202 stroke \n", - "3 Abortion Q8452 abortion \n", - "4 Delusion Q189643 delusion \n", - "\n", - " Term1_description Term2 \\\n", - "0 disease where the kidneys fail to adequately f... Kidney failure \n", - "1 organ for the circulation of blood in animal c... Myocardium \n", - "2 problem with the arteries supplying blood to t... Infarct \n", - "3 intentional ending of a pregnancy Miscarriage \n", - "4 firm and fixed belief based on inadequate grou... Schizophrenia \n", - "\n", - " Term2_kg_id Term2_kg_label \\\n", - "0 Q476921 kidney failure \n", - "1 Q84133 myocardium \n", - "2 Q207550 infarction \n", - "3 Q28693 miscarriage \n", - "4 Q41112 schizophrenia \n", - "\n", - " Term2_description Physician Coder \n", - "0 disease where the kidneys fail to adequately f... 4.0 4.0 \n", - "1 middle layer of the heart wall, which consists... 3.3 3.0 \n", - "2 tissue death caused by a local lack of oxygen,... 3.0 2.8 \n", - "3 natural death of an embryo or fetus before it ... 3.0 3.3 \n", - "4 psychotic disorder characterized by emotional ... 3.0 2.2 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bioDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "parental-event", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bioDFNodesSet = set(bioDF.Term1_kg_id.to_list() + bioDF.Term2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "wicked-proportion", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "P279childParNodesSet = set(p279WordSimSeededDF_wabs_text.node1.to_list() + p279WordSimSeededDF_wabs_text.node2.to_list())\n", - "P279siblingsNodesSet = set(p279Seeded_SiblingsDF3_wabs_text.node1.to_list() + p279Seeded_SiblingsDF3_wabs_text.node2.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "pediatric-tomato", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 1)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sum(bioDF.Term1_kg_id.apply(lambda p: p in P279childParNodesSet or p in P279siblingsNodesSet)), \\\n", - "sum(bioDF.Term2_kg_id.apply(lambda p: p in P279childParNodesSet or p in P279siblingsNodesSet))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "transparent-diversity", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(23, 25)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probaseNodesSet = set(probDF_Qnodes_DF_WQnodes1_subset.node1.to_list() + probDF_Qnodes_DF_WQnodes1_subset.node2.to_list())\n", - "\n", - "sum(bioDF.Term1_kg_id.apply(lambda p: p in probaseNodesSet)), \\\n", - "sum(bioDF.Term2_kg_id.apply(lambda p: p in probaseNodesSet))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "uniform-civilian", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "voluntary-logic", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "sacred-bacon", - "metadata": {}, - "source": [ - "# Dataset-Target Combinations" - ] - }, - { - "cell_type": "markdown", - "id": "amended-forth", - "metadata": {}, - "source": [ - "## Retrofitting" - ] - }, - { - "cell_type": "markdown", - "id": "dirty-magic", - "metadata": {}, - "source": [ - "### Retrofitting using concatenation of embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "twenty-chinese", - "metadata": {}, - "outputs": [], - "source": [ - "from collections import defaultdict\n", - "def generateConcatenatedEmbeddingDict(embedDictMaster, key_comb, embedding_lengths):\n", - " embedDict = defaultdict(list)\n", - " masterKeySet = set()\n", - " for key in key_comb:\n", - " for qnode in embedDictMaster[key]:\n", - " masterKeySet.add(qnode)\n", - " for qnode in masterKeySet:\n", - " for key in key_comb:\n", - " if qnode in embedDictMaster[key]:\n", - " embedDict[qnode] = embedDict[qnode] + (embedDictMaster[key][qnode].tolist())\n", - " else:\n", - " embedDict[qnode] = embedDict[qnode] + [0]*embedding_lengths[key]\n", - " embedDict[qnode] = np.array(embedDict[qnode])\n", - " return dict(embedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "cooperative-reference", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 1min 16s, sys: 5.4 s, total: 1min 21s\n", - "Wall time: 1min 21s\n" - ] - } - ], - "source": [ - "%%time\n", - "embedDictMaster['text_7-text_2-comp-tran-abs-abs_first'] = generateConcatenatedEmbeddingDict(embedDictMaster, \n", - " ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent'], \n", - " embedding_lengths)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "direct-discrimination", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "55c060d3c04441008eb1631416aa2a38", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/6 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0msvmCombCasesList\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mbasis\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbasisList\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mweightedNess\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0miterNum\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mNUM_ITERS\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mweightCase\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'basisList' is not defined" - ] - } - ], - "source": [ - "svmCombCasesList = []\n", - "for basis in tqdm(basisList):\n", - " for weightedNess in [True]:\n", - " for iterNum in range(0,NUM_ITERS+1):\n", - " for weightCase in [1,2]:\n", - " for svm_input in ['score']:\n", - " for i in range(1,len(embList)+1):\n", - " for embComb in combinations(embList, i):\n", - " temp_dict = {'basis': basis, 'emb': embComb, 'weightedNess': weightedNess, \n", - " 'iterNum': iterNum, 'weightCase': weightCase, 'svm_input': svm_input}\n", - " svmCombCasesList.append(temp_dict)" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "id": "ahead-letters", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3024" - ] - }, - "execution_count": 138, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(svmCombCasesList)" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "chicken-computer", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/3024 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2AvgtextOldtextNewold_diffnew_diffOld_Diff_CatNew_Diff_Catcorrect_categoryold_predicted_categorynew_predicted_category
0Arafatpeace3.603.9094143.8371590.3094140.23715900UUU
1Arafatterror3.603.6468523.5936110.0468520.00638900UUU
2FBIfingerprint3.603.4706443.4706440.1293560.12935600UMM
3FBIinvestigation3.003.6743953.6250260.6743950.62502611MUU
4HarvardYale2.202.5145912.5145910.3145910.31459100MMM
.......................................
339wartroops3.002.8773622.4768020.1226380.52319800MMM
340weaponsecret3.803.5446763.0785500.2553240.72145001UUM
341weatherforecast3.002.4431002.0758060.5569000.92419411MMM
342woodforest1.803.6666913.6929861.8666911.89298611MUU
343wordsimilarity3.753.2025132.6772940.5474871.07270611UMM
\n", - "

344 rows × 12 columns

\n", - "" - ], - "text/plain": [ - " Word 1 Word 2 Avg textOld textNew old_diff new_diff \\\n", - "0 Arafat peace 3.60 3.909414 3.837159 0.309414 0.237159 \n", - "1 Arafat terror 3.60 3.646852 3.593611 0.046852 0.006389 \n", - "2 FBI fingerprint 3.60 3.470644 3.470644 0.129356 0.129356 \n", - "3 FBI investigation 3.00 3.674395 3.625026 0.674395 0.625026 \n", - "4 Harvard Yale 2.20 2.514591 2.514591 0.314591 0.314591 \n", - ".. ... ... ... ... ... ... ... \n", - "339 war troops 3.00 2.877362 2.476802 0.122638 0.523198 \n", - "340 weapon secret 3.80 3.544676 3.078550 0.255324 0.721450 \n", - "341 weather forecast 3.00 2.443100 2.075806 0.556900 0.924194 \n", - "342 wood forest 1.80 3.666691 3.692986 1.866691 1.892986 \n", - "343 word similarity 3.75 3.202513 2.677294 0.547487 1.072706 \n", - "\n", - " Old_Diff_Cat New_Diff_Cat correct_category old_predicted_category \\\n", - "0 0 0 U U \n", - "1 0 0 U U \n", - "2 0 0 U M \n", - "3 1 1 M U \n", - "4 0 0 M M \n", - ".. ... ... ... ... \n", - "339 0 0 M M \n", - "340 0 1 U U \n", - "341 1 1 M M \n", - "342 1 1 M U \n", - "343 1 1 U M \n", - "\n", - " new_predicted_category \n", - "0 U \n", - "1 U \n", - "2 M \n", - "3 U \n", - "4 M \n", - ".. ... \n", - "339 M \n", - "340 M \n", - "341 M \n", - "342 U \n", - "343 M \n", - "\n", - "[344 rows x 12 columns]" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "automotive-trouble", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "123" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "arabic-binding", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['old_predicted_category'] != wordSim353AnnotDF_New_Merged_DF['correct_category']].to_csv('../data/transEmb/badBefore_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "acoustic-holocaust", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['new_predicted_category'] != wordSim353AnnotDF_New_Merged_DF['correct_category']].to_csv('../data/transEmb/badAfter_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "accompanied-spyware", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/transEmb/entireSet.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "reverse-cincinnati", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "breathing-footage", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 0)].to_csv('../data/transEmb/good+good_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "chief-chance", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 1)].to_csv('../data/transEmb/good+bad_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "shaped-letter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 0)].to_csv('../data/transEmb/bad+good_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "adolescent-monte", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 1)].to_csv('../data/transEmb/bad+bad_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "swiss-bridal", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "current-mirror", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "placed-identity", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "stopped-daisy", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "deadly-forwarding", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "southeast-canal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.567297\n", - "std 0.435379\n", - "min 0.000000\n", - "25% 0.250130\n", - "50% 0.508725\n", - "75% 0.835197\n", - "max 5.000000\n", - "Name: concat_19k_v1_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_old_cosSim_Diff'],ascending=False)['concat_19k_v1_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "adequate-terminology", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 3.440000e+02\n", - "mean 5.938081e-01\n", - "std 4.503200e-01\n", - "min 4.440892e-16\n", - "25% 2.665817e-01\n", - "50% 5.349785e-01\n", - "75% 8.528840e-01\n", - "max 5.000000e+00\n", - "Name: concat_19k_v1_2_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_2_new_cosSim_Diff'],ascending=False)['concat_19k_v1_2_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "wired-shoot", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.508725:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 5.349785e-01:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "operating-senegal", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'concat_19k_v1_old_cosSim', 'concat_19k_v1_2_new_cosSim', 'concat_19k_v1_old_cosSim_Diff', 'concat_19k_v1_2_new_cosSim_Diff', 'concat_19k_v1_old_cosSim_Diff_Cat', 'concat_19k_v1_2_new_cosSim_Diff_Cat']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quantitative-money", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_19k_v1_old_cosSim_Diffconcat_19k_v1_2_new_cosSim_Diffconcat_19k_v1_old_cosSim_Diff_Catconcat_19k_v1_2_new_cosSim_Diff_Cat
0Arafatpeace3.603.2511983.1932710.3488020.40672900
1Arafatterror3.603.2314093.1572290.3685910.44277100
2FBIfingerprint3.602.9484872.8530480.6515130.74695211
3FBIinvestigation3.002.9303652.8956040.0696350.10439600
4HarvardYale2.201.9910541.9910540.2089460.20894600
..............................
339wartroops3.002.9139312.7872130.0860690.21278700
340weaponsecret3.803.1525133.1190650.6474870.68093511
341weatherforecast3.002.4927652.4623890.5072350.53761101
342woodforest1.802.6126812.6069410.8126810.80694111
343wordsimilarity3.752.6782762.6528291.0717241.09717111
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg concat_19k_v1_old_cosSim \\\n", - "0 Arafat peace 3.60 3.251198 \n", - "1 Arafat terror 3.60 3.231409 \n", - "2 FBI fingerprint 3.60 2.948487 \n", - "3 FBI investigation 3.00 2.930365 \n", - "4 Harvard Yale 2.20 1.991054 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.913931 \n", - "340 weapon secret 3.80 3.152513 \n", - "341 weather forecast 3.00 2.492765 \n", - "342 wood forest 1.80 2.612681 \n", - "343 word similarity 3.75 2.678276 \n", - "\n", - " concat_19k_v1_2_new_cosSim concat_19k_v1_old_cosSim_Diff \\\n", - "0 3.193271 0.348802 \n", - "1 3.157229 0.368591 \n", - "2 2.853048 0.651513 \n", - "3 2.895604 0.069635 \n", - "4 1.991054 0.208946 \n", - ".. ... ... \n", - "339 2.787213 0.086069 \n", - "340 3.119065 0.647487 \n", - "341 2.462389 0.507235 \n", - "342 2.606941 0.812681 \n", - "343 2.652829 1.071724 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff concat_19k_v1_old_cosSim_Diff_Cat \\\n", - "0 0.406729 0 \n", - "1 0.442771 0 \n", - "2 0.746952 1 \n", - "3 0.104396 0 \n", - "4 0.208946 0 \n", - ".. ... ... \n", - "339 0.212787 0 \n", - "340 0.680935 1 \n", - "341 0.537611 0 \n", - "342 0.806941 1 \n", - "343 1.097171 1 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 0 \n", - "2 1 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 1 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "attractive-annex", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "164" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "proof-registrar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "elder-harmony", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "magnetic-marina", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "satisfied-increase", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "surprising-milan", - "metadata": {}, - "source": [ - "# SVM Models" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "worldwide-genius", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting datacompy\n", - " Downloading datacompy-0.7.2-py3-none-any.whl (27 kB)\n", - "Requirement already satisfied: numpy>=1.11.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.20.1)\n", - "Requirement already satisfied: pandas>=0.25.0 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.2.2)\n", - "Requirement already satisfied: pytz>=2017.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2021.1)\n", - "Requirement already satisfied: python-dateutil>=2.7.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2.8.1)\n", - "Requirement already satisfied: six>=1.5 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas>=0.25.0->datacompy) (1.15.0)\n", - "Installing collected packages: datacompy\n", - "Successfully installed datacompy-0.7.2\n" - ] - } - ], - "source": [ - "!pip install datacompy" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "overhead-board", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "developing-option", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "catholic-compensation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004515859576248157, -0.01172366887295375, ...3.2445393.175157[0.006720440291834372, 0.008331484208161396, 0...[-0.005011610937734838, -0.013383541550578623,...[0.006720440291834372, 0.008331484208161396, 0...[-0.00497129831746384, -0.01325426749683971, -...3.2445393.240270
1Arafatterror93D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004862257088069111, 0.014077170590128979, ...3.0850833.013958[0.006720440291834372, 0.008331484208161396, 0...[-0.005805280438126139, 0.015115419696749257, ...[0.006720440291834372, 0.008331484208161396, 0...[-0.004862255062129871, 0.014077164724644747, ...3.0850833.013958
2FBIfingerprint1093D4NaN4NaN3...[0.006466897059812569, 0.014694837542908411, -...[0.01523113309590259, 0.005271417380511587, -0...2.8230932.745230[0.006466894365273728, 0.014694831420063071, -...[0.013922101136130544, 0.0023911842131386003, ...[0.006466894365273728, 0.014694831420063071, -...[0.013814564227839972, 0.0024352598952305004, ...2.8230932.816176
3FBIinvestigation1103U3U3U3...[0.006466897059812569, 0.014694837542908411, -...[0.013016090623183913, 0.01114268771757639, -0...2.9209862.886161[0.006466894365273728, 0.014694831420063071, -...[0.01327496060589727, 0.010965634890657862, -0...[0.006466894365273728, 0.014694831420063071, -...[0.013242882546106787, 0.010953106196386554, -...2.9209862.919120
4HarvardYale1372S3S2S2...[0.01322626159341165, 0.005047111630696947, -0...[0.010410829393995813, 0.014776997996557633, -...1.7076551.707655[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...1.7076551.707655
\n", - "

5 rows × 104 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "1 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "2 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "3 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "4 ... [0.01322626159341165, 0.005047111630696947, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859576248157, -0.01172366887295375, ... 3.244539 \n", - "1 [-0.004862257088069111, 0.014077170590128979, ... 3.085083 \n", - "2 [0.01523113309590259, 0.005271417380511587, -0... 2.823093 \n", - "3 [0.013016090623183913, 0.01114268771757639, -0... 2.920986 \n", - "4 [0.010410829393995813, 0.014776997996557633, -... 1.707655 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.175157 \n", - "1 3.013958 \n", - "2 2.745230 \n", - "3 2.886161 \n", - "4 1.707655 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.005011610937734838, -0.013383541550578623,... \n", - "1 [-0.005805280438126139, 0.015115419696749257, ... \n", - "2 [0.013922101136130544, 0.0023911842131386003, ... \n", - "3 [0.01327496060589727, 0.010965634890657862, -0... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.00497129831746384, -0.01325426749683971, -... \n", - "1 [-0.004862255062129871, 0.014077164724644747, ... \n", - "2 [0.013814564227839972, 0.0024352598952305004, ... \n", - "3 [0.013242882546106787, 0.010953106196386554, -... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.244539 3.240270 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.816176 \n", - "3 2.920986 2.919120 \n", - "4 1.707655 1.707655 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "id": "expanded-uniform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
text_7props_19k_old_cosSimtext_7props_19k_2_new_cosSimtext_2props_19k_old_cosSimtext_2props_19k_2_new_cosSimcomplex_19k_old_cosSimcomplex_19k_2_new_cosSimtranse_19k_old_cosSimtranse_19k_1_new_cosSimabstract_19k_old_cosSimabstract_19k_2_new_cosSim...transe_probase_19k_old_cosSimtranse_probase_19k_1_new_cosSimconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_probase_19k_v1_old_cosSimconcat_probase_19k_v1_2_new_cosSimconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
count344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000...344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000
mean2.5110332.4648762.4822542.4351612.9833022.6848182.9833022.6800022.6528662.593916...2.9833022.5658862.8753812.8264932.8753812.8651012.8680662.8166852.8680662.856603
std1.1488211.1529111.1510601.1554270.6459110.5390920.6459110.6192390.6805250.653512...0.6459110.5967500.5739020.5755850.5739020.5744101.0971211.1063621.0971211.099179
min1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000...1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
25%2.0050971.9632291.9934241.9498692.5885912.4554312.5885912.3118182.1809122.137568...2.5885912.1836862.5779382.5510332.5779382.5838112.3843372.3506452.3843372.377672
50%2.3282762.2736742.2746682.2321563.0390872.7085693.0390872.7222782.6168102.591640...3.0390872.6080412.9505782.9120982.9505782.9339842.7164712.6570782.7164712.704941
75%2.6369072.5761552.5804822.5275543.3592432.9592593.3592433.0905633.2089193.060782...3.3592432.9352263.2087353.1644263.2087353.1962702.9922652.8996262.9922652.977770
max7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000004.3400894.327902...7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.000000
\n", - "

8 rows × 28 columns

\n", - "
" - ], - "text/plain": [ - " text_7props_19k_old_cosSim text_7props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.511033 2.464876 \n", - "std 1.148821 1.152911 \n", - "min 1.000000 1.000000 \n", - "25% 2.005097 1.963229 \n", - "50% 2.328276 2.273674 \n", - "75% 2.636907 2.576155 \n", - "max 7.000000 7.000000 \n", - "\n", - " text_2props_19k_old_cosSim text_2props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.482254 2.435161 \n", - "std 1.151060 1.155427 \n", - "min 1.000000 1.000000 \n", - "25% 1.993424 1.949869 \n", - "50% 2.274668 2.232156 \n", - "75% 2.580482 2.527554 \n", - "max 7.000000 7.000000 \n", - "\n", - " complex_19k_old_cosSim complex_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.684818 \n", - "std 0.645911 0.539092 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.455431 \n", - "50% 3.039087 2.708569 \n", - "75% 3.359243 2.959259 \n", - "max 7.000000 7.000000 \n", - "\n", - " transe_19k_old_cosSim transe_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.680002 \n", - "std 0.645911 0.619239 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.311818 \n", - "50% 3.039087 2.722278 \n", - "75% 3.359243 3.090563 \n", - "max 7.000000 7.000000 \n", - "\n", - " abstract_19k_old_cosSim abstract_19k_2_new_cosSim ... \\\n", - "count 344.000000 344.000000 ... \n", - "mean 2.652866 2.593916 ... \n", - "std 0.680525 0.653512 ... \n", - "min 1.000000 1.000000 ... \n", - "25% 2.180912 2.137568 ... \n", - "50% 2.616810 2.591640 ... \n", - "75% 3.208919 3.060782 ... \n", - "max 4.340089 4.327902 ... \n", - "\n", - " transe_probase_19k_old_cosSim transe_probase_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.565886 \n", - "std 0.645911 0.596750 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.183686 \n", - "50% 3.039087 2.608041 \n", - "75% 3.359243 2.935226 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v1_old_cosSim concat_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.826493 \n", - "std 0.573902 0.575585 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.551033 \n", - "50% 2.950578 2.912098 \n", - "75% 3.208735 3.164426 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v1_old_cosSim concat_probase_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.865101 \n", - "std 0.573902 0.574410 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.583811 \n", - "50% 2.950578 2.933984 \n", - "75% 3.208735 3.196270 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v2_old_cosSim concat_19k_v2_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.816685 \n", - "std 1.097121 1.106362 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.350645 \n", - "50% 2.716471 2.657078 \n", - "75% 2.992265 2.899626 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.856603 \n", - "std 1.097121 1.099179 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.377672 \n", - "50% 2.716471 2.704941 \n", - "75% 2.992265 2.977770 \n", - "max 7.000000 7.000000 \n", - "\n", - "[8 rows x 28 columns]" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "id": "indian-embassy", - "metadata": {}, - "outputs": [], - "source": [ - "import datacompy\n", - "compare = datacompy.Compare(\n", - " wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))],\n", - " wordSim353AnnotDF_New_Merged_DF_old[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF_old.columns.to_list()))],\n", - " join_columns = ['Word 1', 'Word 2'])" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "id": "vocational-nurse", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DataComPy Comparison\n", - "--------------------\n", - "\n", - "DataFrame Summary\n", - "-----------------\n", - "\n", - " DataFrame Columns Rows\n", - "0 df1 34 344\n", - "1 df2 34 344\n", - "\n", - "Column Summary\n", - "--------------\n", - "\n", - "Number of columns in common: 32\n", - "Number of columns in df1 but not in df2: 2\n", - "Number of columns in df2 but not in df1: 2\n", - "\n", - "Row Summary\n", - "-----------\n", - "\n", - "Matched on: word 1, word 2\n", - "Any duplicates on match values: No\n", - "Absolute Tolerance: 0\n", - "Relative Tolerance: 0\n", - "Number of rows in common: 344\n", - "Number of rows in df1 but not in df2: 0\n", - "Number of rows in df2 but not in df1: 0\n", - "\n", - "Number of rows with some compared columns unequal: 343\n", - "Number of rows with all compared columns equal: 1\n", - "\n", - "Column Comparison\n", - "-----------------\n", - "\n", - "Number of columns compared with some values unequal: 27\n", - "Number of columns compared with all values equal: 5\n", - "Total number of values which compare unequal: 5,136\n", - "\n", - "Columns with Unequal Values or Types\n", - "------------------------------------\n", - "\n", - " Column df1 dtype df2 dtype # Unequal Max Diff # Null Diff\n", - "25 abstract_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "17 abstract_19k_old_cossim float64 float64 9 4.440892e-16 0\n", - "8 abstract_firstsent_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "19 abstract_firstsent_19k_old_cossim float64 float64 8 4.440892e-16 0\n", - "6 category object object 4 0.000000e+00 0\n", - "12 complex_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "21 complex_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "11 complex_probase_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "18 complex_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "1 concat_19k_v1_2_new_cossim float64 float64 343 9.656675e-01 0\n", - "22 concat_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "2 concat_19k_v2_2_new_cossim float64 float64 325 4.810998e-01 0\n", - "3 concat_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "10 concat_probase_19k_v1_2_new_cossim float64 float64 341 9.673423e-01 0\n", - "7 concat_probase_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "26 concat_probase_19k_v2_2_new_cossim float64 float64 324 4.828636e-01 0\n", - "9 concat_probase_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "15 text_2props_19k_2_new_cossim float64 float64 7 4.440892e-16 0\n", - "0 text_2props_19k_old_cossim float64 float64 5 4.440892e-16 0\n", - "14 text_7props_19k_2_new_cossim float64 float64 11 4.440892e-16 0\n", - "24 text_7props_19k_old_cossim float64 float64 7 4.440892e-16 0\n", - "5 transe_19k_1_new_cossim float64 float64 5 4.440892e-16 0\n", - "4 transe_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "16 transe_probase_19k_1_new_cossim float64 float64 340 1.192889e-08 0\n", - "20 transe_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "23 transe_probase_1_new_cossim float64 float64 9 4.440892e-16 0\n", - "13 transe_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "\n", - "Sample Rows with Unequal Values\n", - "-------------------------------\n", - "\n", - " word 1 word 2 text_2props_19k_old_cossim (df1) text_2props_19k_old_cossim (df2)\n", - "33 bishop rabbi 2.333195 2.333195\n", - "69 credit card 1.834364 1.834364\n", - "107 drink ear 2.515900 2.515900\n", - "271 registration arrangement 1.826611 1.826611\n", - "169 line insurance 2.670612 2.670612\n", - "\n", - " word 1 word 2 concat_19k_v1_2_new_cossim (df1) concat_19k_v1_2_new_cossim (df2)\n", - "107 drink ear 3.116502 2.813165\n", - "112 energy crisis 3.024137 3.099512\n", - "14 admission ticket 2.647422 2.819317\n", - "63 computer software 2.167120 2.273544\n", - "241 precedent example 2.091422 2.138805\n", - "44 car flight 3.064250 2.948899\n", - "229 planet constellation 2.240850 2.286295\n", - "159 king queen 2.169999 2.241265\n", - "161 lad brother 2.755663 2.733430\n", - "297 stock egg 2.943623 2.952019\n", - "\n", - " word 1 word 2 concat_19k_v2_2_new_cossim (df1) concat_19k_v2_2_new_cossim (df2)\n", - "61 computer laboratory 2.670662 2.635687\n", - "239 precedent cognition 2.643438 2.676361\n", - "286 situation isolation 2.313211 2.399693\n", - "225 physics chemistry 1.755500 1.873616\n", - "262 psychology doctor 2.861167 2.665892\n", - "271 registration arrangement 1.935898 2.144032\n", - "111 drug abuse 2.653034 2.716209\n", - "150 impartiality interest 2.395906 2.496811\n", - "130 forest graveyard 2.963496 2.743907\n", - "80 cup substance 2.738585 2.703536\n", - "\n", - " word 1 word 2 concat_19k_v2_old_cossim (df1) concat_19k_v2_old_cossim (df2)\n", - "247 president medal 2.809529 3.039440\n", - "70 credit information 2.557827 2.567752\n", - "58 competition price 2.699197 2.854295\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "47 century nation 3.025727 3.021246\n", - "280 seven series 2.801360 2.821742\n", - "193 money dollar 2.376377 2.437513\n", - "5 Japanese American 2.564544 2.535274\n", - "340 weapon secret 2.889109 2.897323\n", - "189 money bank 2.261778 2.170577\n", - "\n", - " word 1 word 2 transe_19k_old_cossim (df1) transe_19k_old_cossim (df2)\n", - "36 book paper 3.078243 2.635533\n", - "5 Japanese American 2.496058 2.408249\n", - "26 baby mother 2.292784 2.155920\n", - "248 problem airport 3.826307 3.170909\n", - "55 coast hill 3.722873 2.798622\n", - "112 energy crisis 3.106233 3.230795\n", - "340 weapon secret 3.285620 3.310261\n", - "219 opera industry 3.296724 3.553488\n", - "169 line insurance 3.089979 2.829222\n", - "332 type kind 1.000000 1.000000\n", - "\n", - " word 1 word 2 transe_19k_1_new_cossim (df1) transe_19k_1_new_cossim (df2)\n", - "192 money deposit 2.837495 2.837495\n", - "232 planet people 3.716617 3.716617\n", - "114 energy secretary 2.865451 2.865451\n", - "304 street block 2.904156 2.904156\n", - "271 registration arrangement 1.933719 1.933719\n", - "\n", - " word 1 word 2 category (df1) category (df2)\n", - "296 stock CD U M\n", - "45 cell phone I M\n", - "328 tool implement I M\n", - "237 practice institution M U\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_old_cossim (df1) concat_probase_19k_v1_old_cossim (df2)\n", - "312 television film 3.266487 2.813985\n", - "191 money currency 2.401111 2.298975\n", - "243 precedent information 3.131530 3.019516\n", - "53 closet clothes 2.947983 2.705879\n", - "142 government crisis 3.181431 2.683486\n", - "183 media trading 3.103774 2.822458\n", - "89 delay racism 3.037041 2.943246\n", - "32 bird crane 2.323600 2.007661\n", - "126 food rooster 3.641608 3.323421\n", - "43 car automobile 1.000000 1.000000\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_2_new_cossim (df1) abstract_firstsent_19k_2_new_cossim (df2)\n", - "67 country citizen 2.307399 2.307399\n", - "218 oil stock 2.875288 2.875288\n", - "337 vodka gin 1.848263 1.848263\n", - "152 investor earning 1.998387 1.998387\n", - "90 deployment departure 1.826386 1.826386\n", - "208 movie theater 2.390347 2.390347\n", - "263 psychology fear 2.679016 2.679016\n", - "96 discovery space 2.952799 2.952799\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_old_cossim (df1) concat_probase_19k_v2_old_cossim (df2)\n", - "21 architecture century 3.188363 3.081890\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "60 computer keyboard 2.131908 2.212525\n", - "120 fertility egg 2.202871 2.244311\n", - "311 telephone communication 2.677514 2.463340\n", - "238 precedent antecedent 1.935676 2.019795\n", - "33 bishop rabbi 2.277504 2.458967\n", - "203 morality importance 2.272562 2.446757\n", - "228 planet astronomer 2.470710 2.152302\n", - "144 governor office 2.720705 2.742336\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_2_new_cossim (df1) concat_probase_19k_v1_2_new_cossim (df2)\n", - "166 life death 2.384376 2.467146\n", - "249 problem challenge 2.573163 2.851951\n", - "216 noon string 2.831571 3.404519\n", - "214 network hardware 2.797734 2.468385\n", - "324 tiger mammal 2.608830 2.218881\n", - "269 reason hypertension 3.043544 2.554564\n", - "35 book library 3.335751 2.560611\n", - "169 line insurance 3.121240 2.947265\n", - "319 tiger carnivore 3.332882 3.004569\n", - "161 lad brother 2.885448 2.868957\n", - "\n", - " word 1 word 2 complex_probase_2_new_cossim (df1) complex_probase_2_new_cossim (df2)\n", - "39 bread butter 1.926594 1.926594\n", - "102 dollar buck 2.733086 2.733086\n", - "193 money dollar 2.733086 2.733086\n", - "150 impartiality interest 2.323327 2.323327\n", - "1 Arafat terror 3.103668 3.103668\n", - "266 psychology psychiatry 1.826092 1.826092\n", - "10 Mexico Brazil 1.921104 1.921104\n", - "5 Japanese American 2.408249 2.408249\n", - "\n", - " word 1 word 2 complex_19k_old_cossim (df1) complex_19k_old_cossim (df2)\n", - "115 environment ecology 2.920428 2.903515\n", - "256 psychology Freud 3.234018 2.992413\n", - "169 line insurance 3.089979 2.829222\n", - "33 bishop rabbi 2.300842 2.845229\n", - "220 opera performance 3.163513 3.062105\n", - "267 psychology science 2.231959 2.334221\n", - "265 psychology mind 2.886509 2.426014\n", - "45 cell phone 3.622510 2.693966\n", - "26 baby mother 2.292784 2.155920\n", - "161 lad brother 3.110214 3.092837\n", - "\n", - " word 1 word 2 transe_probase_old_cossim (df1) transe_probase_old_cossim (df2)\n", - "209 murder manslaughter 2.249251 2.257188\n", - "141 glass metal 3.225510 2.093335\n", - "296 stock CD 3.395233 3.514011\n", - "325 tiger organism 3.290722 2.591059\n", - "35 book library 3.701910 2.539030\n", - "2 FBI fingerprint 3.149125 2.911334\n", - "254 profit loss 1.653272 1.573516\n", - "334 video archive 3.219152 2.407191\n", - "166 life death 2.565452 2.692000\n", - "9 Mars scientist 3.504530 3.187455\n", - "\n", - " word 1 word 2 text_7props_19k_2_new_cossim (df1) text_7props_19k_2_new_cossim (df2)\n", - "176 luxury car 2.942098 2.942098\n", - "293 space world 2.109041 2.109041\n", - "309 summer drought 2.687325 2.687325\n", - "67 country citizen 1.942392 1.942392\n", - "169 line insurance 2.691916 2.691916\n", - "302 stock phone 2.963663 2.963663\n", - "5 Japanese American 2.145108 2.145108\n", - "238 precedent antecedent 1.844509 1.844509\n", - "143 governor interview 2.651640 2.651640\n", - "152 investor earning 1.902240 1.902240\n", - "\n", - " word 1 word 2 text_2props_19k_2_new_cossim (df1) text_2props_19k_2_new_cossim (df2)\n", - "329 train car 1.998965 1.998965\n", - "10 Mexico Brazil 1.950233 1.950233\n", - "19 announcement production 1.866451 1.866451\n", - "121 fighting defeating 1.940122 1.940122\n", - "293 space world 1.993016 1.993016\n", - "8 Maradona football 2.351065 2.351065\n", - "114 energy secretary 2.803514 2.803514\n", - "\n", - " word 1 word 2 transe_probase_19k_1_new_cossim (df1) transe_probase_19k_1_new_cossim (df2)\n", - "155 journal association 2.736767 2.736767\n", - "123 focus life 2.337493 2.337493\n", - "159 king queen 1.570639 1.570639\n", - "169 line insurance 2.557647 2.557647\n", - "305 street children 3.186623 3.186623\n", - "336 vodka brandy 1.527815 1.527815\n", - "232 planet people 3.593423 3.593423\n", - "130 forest graveyard 3.142560 3.142560\n", - "69 credit card 2.076337 2.076337\n", - "40 brother monk 2.683273 2.683273\n", - "\n", - " word 1 word 2 abstract_19k_old_cossim (df1) abstract_19k_old_cossim (df2)\n", - "285 situation conclusion 1.808156 1.808156\n", - "303 street avenue 2.281843 2.281843\n", - "94 disability death 2.746255 2.746255\n", - "5 Japanese American 3.292768 3.292768\n", - "183 media trading 3.108796 3.108796\n", - "11 OPEC country 3.042327 3.042327\n", - "162 lad wizard 3.334772 3.334772\n", - "129 football tennis 2.518421 2.518421\n", - "231 planet moon 1.920149 1.920149\n", - "\n", - " word 1 word 2 complex_probase_old_cossim (df1) complex_probase_old_cossim (df2)\n", - "63 computer software 2.565704 2.726328\n", - "21 architecture century 3.418617 3.099197\n", - "179 man woman 2.351588 1.471079\n", - "149 image surface 3.137178 3.256807\n", - "81 cup tableware 2.124012 1.954043\n", - "36 book paper 3.078243 2.635533\n", - "194 money laundering 2.759570 2.800958\n", - "236 possibility girl 3.361988 2.920025\n", - "209 murder manslaughter 2.249251 2.257188\n", - "218 oil stock 2.577913 2.625197\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_old_cossim (df1) abstract_firstsent_19k_old_cossim (df2)\n", - "246 preservation world 3.234863 3.234863\n", - "5 Japanese American 2.728319 2.728319\n", - "285 situation conclusion 1.808156 1.808156\n", - "244 precedent law 1.878214 1.878214\n", - "94 disability death 3.016865 3.016865\n", - "175 lover quarrel 3.157233 3.157233\n", - "109 drink mother 3.128050 3.128050\n", - "177 magician wizard 1.909871 1.909871\n", - "\n", - " word 1 word 2 transe_probase_19k_old_cossim (df1) transe_probase_19k_old_cossim (df2)\n", - "79 cup object 2.627446 2.362561\n", - "234 planet star 2.586230 2.320493\n", - "176 luxury car 3.150901 2.977136\n", - "156 journey car 2.971068 2.457446\n", - "324 tiger mammal 2.909669 2.322927\n", - "120 fertility egg 2.547399 2.671721\n", - "248 problem airport 3.826307 3.170909\n", - "16 aluminum metal 2.712132 1.916614\n", - "36 book paper 3.078243 2.635533\n", - "211 music project 3.141641 3.304875\n", - "\n", - " word 1 word 2 complex_probase_19k_old_cossim (df1) complex_probase_19k_old_cossim (df2)\n", - "277 seafood lobster 2.240601 2.113436\n", - "27 bank money 3.066413 2.792811\n", - "337 vodka gin 1.857971 2.369972\n", - "211 music project 3.141641 3.304875\n", - "271 registration arrangement 2.319711 2.954145\n", - "143 governor interview 4.023383 3.076389\n", - "149 image surface 3.137178 3.256807\n", - "94 disability death 2.565398 2.939547\n", - "166 life death 2.565452 2.692000\n", - "226 physics proton 3.802075 2.800635\n", - "\n", - " word 1 word 2 concat_19k_v1_old_cossim (df1) concat_19k_v1_old_cossim (df2)\n", - "270 record number 2.977163 2.589607\n", - "282 shower flood 3.398140 2.908007\n", - "97 dividend calculation 2.507181 2.708939\n", - "239 precedent cognition 2.724066 2.793355\n", - "125 food preparation 2.932974 2.836360\n", - "342 wood forest 3.144257 2.612681\n", - "304 street block 2.690410 2.201689\n", - "250 production crew 2.552550 2.783363\n", - "6 Jerusalem Israel 2.978292 2.383538\n", - "210 museum theater 3.208882 2.943593\n", - "\n", - " word 1 word 2 transe_probase_1_new_cossim (df1) transe_probase_1_new_cossim (df2)\n", - "108 drink eat 2.334188 2.334188\n", - "25 attempt peace 2.624155 2.624155\n", - "232 planet people 3.392578 3.392578\n", - "204 morality marriage 2.173908 2.173908\n", - "267 psychology science 1.840069 1.840069\n", - "20 announcement warning 1.930855 1.930855\n", - "37 boxing round 3.527058 3.527058\n", - "77 cup food 2.657233 2.657233\n", - "73 cup artifact 2.065621 2.065621\n", - "\n", - " word 1 word 2 text_7props_19k_old_cossim (df1) text_7props_19k_old_cossim (df2)\n", - "311 telephone communication 2.269291 2.269291\n", - "205 movie critic 2.872865 2.872865\n", - "69 credit card 1.834364 1.834364\n", - "334 video archive 1.948662 1.948662\n", - "51 change attitude 1.894075 1.894075\n", - "260 psychology depression 1.948810 1.948810\n", - "63 computer software 1.918968 1.918968\n", - "\n", - " word 1 word 2 abstract_19k_2_new_cossim (df1) abstract_19k_2_new_cossim (df2)\n", - "90 deployment departure 1.826386 1.826386\n", - "14 admission ticket 2.890691 2.890691\n", - "84 day summer 1.820569 1.820569\n", - "217 observation architecture 2.541219 2.541219\n", - "243 precedent information 2.768309 2.768309\n", - "253 professor doctor 2.462181 2.462181\n", - "60 computer keyboard 1.977226 1.977226\n", - "95 disaster area 3.350219 3.350219\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_2_new_cossim (df1) concat_probase_19k_v2_2_new_cossim (df2)\n", - "208 movie theater 2.614114 2.456455\n", - "177 magician wizard 2.146197 2.011585\n", - "86 death row 2.990100 2.809539\n", - "293 space world 2.481352 2.412213\n", - "123 focus life 2.908816 2.990622\n", - "316 territory surface 2.778507 2.489232\n", - "289 smart student 2.754242 2.578396\n", - "333 victim emergency 2.380390 2.445431\n", - "55 coast hill 2.826077 2.516979\n", - "78 cup liquid 2.365327 2.264276\n", - "\n", - "\n" - ] - } - ], - "source": [ - "print(compare.report())" - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "id": "common-vietnam", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idword 1word 2idh_simh_dimf_simf_dimn_sim...concat_19k_v2_word2_newconcat_19k_v2_old_cossimconcat_19k_v2_2_new_cossimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cossimconcat_probase_19k_v2_2_new_cossimavg_old
0Q106106Q11460closetclothes423H3H3...[0.0014151543049584102, 0.003161483781535701, ...2.6970222.652559[0.013902607489678993, 0.013241494756981564, -...[0.0014224480432097992, 0.0031547764732941653,...[0.01371531560905985, 0.013126875633706597, -0...[0.0014206775968733409, 0.0031581452887393872,...2.6970222.6833183.0
1Q107Q16502spaceworld2933L3S3...[-0.0031782974877087693, 0.003973805776938075,...2.4858592.347308[0.00027019944749503126, 0.005353652289998999,...[-0.0032792710227188605, 0.0036472880832864947...[0.00027492382990721006, 0.0053545622809597, -...[-0.0032450374860671267, 0.0036673577053825254...2.4858592.4813523.2
2Q107Q2329spacechemistry2924NaN4NaN4...[0.015268952851071075, -0.0024137893437008715,...2.7987882.782963[0.00027019944749503126, 0.005353652289998999,...[0.015322423107720673, -0.0024500099720118624,...[0.00027492382990721006, 0.0053545622809597, -...[0.015281665873653082, -0.002421165402091456, ...2.7987882.7950474.0
3Q1074Q7364skineye2883H3H3...[0.002992664951436964, 0.013922942027531155, -...2.3558132.314417[-0.0026976204618851985, 0.001541600665881322,...[0.0033640181667058486, 0.014044398230441645, ...[-0.002678224125439186, 0.0015598357892553907,...[0.0033484286344994184, 0.014002864550517797, ...2.3558132.3506033.0
4Q1079023Q500834championshiptournament381NaN1NaN2...[0.00920825730356781, 0.011965374832474578, 0....1.8686991.865663[-0.0008601077391385219, 0.005201185839222482,...[0.00923153244996602, 0.011960544533439752, 0....[-0.0008458279784483333, 0.005209858282773185,...[0.009207264410626997, 0.011951895965764294, 0...1.8686991.8667851.2
\n", - "

5 rows × 105 columns

\n", - "
" - ], - "text/plain": [ - " word1_kg_id word2_kg_id word 1 word 2 id h_sim h_dim f_sim \\\n", - "0 Q106106 Q11460 closet clothes 42 3 H 3 \n", - "1 Q107 Q16502 space world 293 3 L 3 \n", - "2 Q107 Q2329 space chemistry 292 4 NaN 4 \n", - "3 Q1074 Q7364 skin eye 288 3 H 3 \n", - "4 Q1079023 Q500834 championship tournament 38 1 NaN 1 \n", - "\n", - " f_dim n_sim ... concat_19k_v2_word2_new \\\n", - "0 H 3 ... [0.0014151543049584102, 0.003161483781535701, ... \n", - "1 S 3 ... [-0.0031782974877087693, 0.003973805776938075,... \n", - "2 NaN 4 ... [0.015268952851071075, -0.0024137893437008715,... \n", - "3 H 3 ... [0.002992664951436964, 0.013922942027531155, -... \n", - "4 NaN 2 ... [0.00920825730356781, 0.011965374832474578, 0.... \n", - "\n", - " concat_19k_v2_old_cossim concat_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.652559 \n", - "1 2.485859 2.347308 \n", - "2 2.798788 2.782963 \n", - "3 2.355813 2.314417 \n", - "4 1.868699 1.865663 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.013902607489678993, 0.013241494756981564, -... \n", - "1 [0.00027019944749503126, 0.005353652289998999,... \n", - "2 [0.00027019944749503126, 0.005353652289998999,... \n", - "3 [-0.0026976204618851985, 0.001541600665881322,... \n", - "4 [-0.0008601077391385219, 0.005201185839222482,... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [0.0014224480432097992, 0.0031547764732941653,... \n", - "1 [-0.0032792710227188605, 0.0036472880832864947... \n", - "2 [0.015322423107720673, -0.0024500099720118624,... \n", - "3 [0.0033640181667058486, 0.014044398230441645, ... \n", - "4 [0.00923153244996602, 0.011960544533439752, 0.... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.01371531560905985, 0.013126875633706597, -0... \n", - "1 [0.00027492382990721006, 0.0053545622809597, -... \n", - "2 [0.00027492382990721006, 0.0053545622809597, -... \n", - "3 [-0.002678224125439186, 0.0015598357892553907,... \n", - "4 [-0.0008458279784483333, 0.005209858282773185,... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [0.0014206775968733409, 0.0031581452887393872,... \n", - "1 [-0.0032450374860671267, 0.0036673577053825254... \n", - "2 [0.015281665873653082, -0.002421165402091456, ... \n", - "3 [0.0033484286344994184, 0.014002864550517797, ... \n", - "4 [0.009207264410626997, 0.011951895965764294, 0... \n", - "\n", - " concat_probase_19k_v2_old_cossim concat_probase_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.683318 \n", - "1 2.485859 2.481352 \n", - "2 2.798788 2.795047 \n", - "3 2.355813 2.350603 \n", - "4 1.868699 1.866785 \n", - "\n", - " avg_old \n", - "0 3.0 \n", - "1 3.2 \n", - "2 4.0 \n", - "3 3.0 \n", - "4 1.2 \n", - "\n", - "[5 rows x 105 columns]" - ] - }, - "execution_count": 157, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "rising-platform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.20519776]])" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cosine_similarity(np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word1_new'][1:-1].split(\",\")]).reshape(1,-1), np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word2_new'][1:-1].split(\",\")]).reshape(1,-1))" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "governing-offer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Word 1', 'Word 2', 'ID', 'H_Sim', 'H_Dim', 'F_Sim', 'F_Dim', 'N_Sim',\n", - " 'N_Dim', 'D_Sim',\n", - " ...\n", - " 'concat_19k_v2_word1_new', 'concat_19k_v2_word2_new',\n", - " 'concat_19k_v2_old_cosSim', 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_word1_old', 'concat_probase_19k_v2_word2_old',\n", - " 'concat_probase_19k_v2_word1_new', 'concat_probase_19k_v2_word2_new',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim'],\n", - " dtype='object', length=104)" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "rough-february", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_7props_19k_2_new_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'text_2props_19k_2_new_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'complex_19k_2_new_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'transe_19k_1_new_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_19k_2_new_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_2_new_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'complex_probase_2_new_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'transe_probase_1_new_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'complex_probase_19k_2_new_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_1_new_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_19k_v1_2_new_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_2_new_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim']" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "hired-center", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "\n", - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "extraordinary-value", - "metadata": {}, - "outputs": [], - "source": [ - "emb_pairs = [('text_7props_19k', 'text_7props_19k_2'),\n", - " ('text_2props_19k', 'text_2props_19k_2'),\n", - " ('complex_19k', 'complex_19k_2'),\n", - " ('transe_19k', 'transe_19k_1'),\n", - " ('abstract_19k', 'abstract_19k_2'),\n", - " ('abstract_firstSent_19k', 'abstract_firstSent_19k_2'),\n", - " ('complex_probase', 'complex_probase_2'),\n", - " ('transe_probase', 'transe_probase_1'),\n", - " ('complex_probase_19k', 'complex_probase_19k_2'),\n", - " ('transe_probase_19k', 'transe_probase_19k_1'),\n", - " ('concat_19k_v1', 'concat_19k_v1_2'),\n", - " ('concat_probase_19k_v1', 'concat_probase_19k_v1_2'),\n", - " ('concat_19k_v2', 'concat_19k_v2_2'),\n", - " ('concat_probase_19k_v2', 'concat_probase_19k_v2_2')]\n", - "colMappers = {p[0]+'_old_cosSim': p[1]+'_new_cosSim' for p in emb_pairs}" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "political-battle", - "metadata": {}, - "outputs": [], - "source": [ - "oldColList = list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "flexible-booking", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 123, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "radio-outline", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "recent-portal", - "metadata": {}, - "outputs": [], - "source": [ - "# oldColList, [colMappers[col] for col in oldColList]\n", - "t1234 = []\n", - "t4567 = []\n", - "for col in oldColList:\n", - " t1234.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(label_samples), wordSim353AnnotDF_New_Merged_DF[col].apply(label_samples)))\n", - " t4567.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(label_samples), wordSim353AnnotDF_New_Merged_DF[colMappers[col]].apply(label_samples)))\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "id": "opening-inside", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = list(zip(indNames,t1234, t4567))" - ] - }, - { - "cell_type": "code", - "execution_count": 187, - "id": "settled-overhead", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = pd.DataFrame(t1234, columns=['Type', 'Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category'])" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "id": "young-heath", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TypeAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated category
10Complex-Transe-AbsFirstSent - 19k0.6802330.686047
11Complex-Transe-AbsFirstSent - Probase-19k0.6802330.680233
8Complex - Probase-19k0.5988370.662791
2Complex - 19k0.5988370.659884
6Complex - Probase0.5988370.656977
3Transe - 19k0.5988370.654070
5Abstract First Sentence - 19k0.6511630.654070
7Transe - Probase0.5988370.645349
9Transe - Probase-19k0.5988370.642442
4Abstract - 19k0.6279070.627907
136 embeddings - Probase-19k0.6250000.627907
126 embeddings - 19k0.6250000.625000
0Text 7 props - 19k0.5726740.569767
1Text 2 props - 19k0.5668600.555233
\n", - "
" - ], - "text/plain": [ - " Type \\\n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "8 Complex - Probase-19k \n", - "2 Complex - 19k \n", - "6 Complex - Probase \n", - "3 Transe - 19k \n", - "5 Abstract First Sentence - 19k \n", - "7 Transe - Probase \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "10 0.680233 \n", - "11 0.680233 \n", - "8 0.598837 \n", - "2 0.598837 \n", - "6 0.598837 \n", - "3 0.598837 \n", - "5 0.651163 \n", - "7 0.598837 \n", - "9 0.598837 \n", - "4 0.627907 \n", - "13 0.625000 \n", - "12 0.625000 \n", - "0 0.572674 \n", - "1 0.566860 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \n", - "10 0.686047 \n", - "11 0.680233 \n", - "8 0.662791 \n", - "2 0.659884 \n", - "6 0.656977 \n", - "3 0.654070 \n", - "5 0.654070 \n", - "7 0.645349 \n", - "9 0.642442 \n", - "4 0.627907 \n", - "13 0.627907 \n", - "12 0.625000 \n", - "0 0.569767 \n", - "1 0.555233 " - ] - }, - "execution_count": 188, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t1234.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "id": "beneficial-continuity", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " tempVals.append(acc/N_SPLITS)\n", - "\n", - " for col in colList:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " tempVals.append(acc/N_SPLITS)\n", - " return tempVals\n", - "\n", - "def compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, newColList, indNames):\n", - " tempVals1 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, oldColList)\n", - " tempVals2 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, newColList)\n", - " summ = (pd.DataFrame(list(zip(tempVals1, tempVals2)), index = ['Combined'] + indNames, columns = ['Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category']) * 100)\n", - " summ['Increase'] = summ['Accuracy (in %) of new embeddings compared to annotated category'] - summ['Accuracy (in %) of old embeddings compared to annotated category']\n", - " return summ.sort_values(by=['Increase'], ascending=False)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "intensive-platform", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "id": "significant-season", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracyRF(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = RandomForestClassifier(max_depth=max(2 * len(colList) // 3,3), random_state=100)\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "id": "fitting-jurisdiction", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Text 2 props - 19k66.00000067.1596641.159664
Complex - 19k66.86554667.1596640.294118
Combined68.89916069.1680670.268908
Transe - 19k66.86554666.571429-0.294118
Abstract - 19k66.54621865.983193-0.563025
Text 7 props - 19k67.74789967.159664-0.588235
Abstract First Sentence - 19k73.21848771.504202-1.714286
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Text 2 props - 19k 66.000000 \n", - "Complex - 19k 66.865546 \n", - "Combined 68.899160 \n", - "Transe - 19k 66.865546 \n", - "Abstract - 19k 66.546218 \n", - "Text 7 props - 19k 67.747899 \n", - "Abstract First Sentence - 19k 73.218487 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Text 2 props - 19k 67.159664 \n", - "Complex - 19k 67.159664 \n", - "Combined 69.168067 \n", - "Transe - 19k 66.571429 \n", - "Abstract - 19k 65.983193 \n", - "Text 7 props - 19k 67.159664 \n", - "Abstract First Sentence - 19k 71.504202 \n", - "\n", - " Increase \n", - "Text 2 props - 19k 1.159664 \n", - "Complex - 19k 0.294118 \n", - "Combined 0.268908 \n", - "Transe - 19k -0.294118 \n", - "Abstract - 19k -0.563025 \n", - "Text 7 props - 19k -0.588235 \n", - "Abstract First Sentence - 19k -1.714286 " - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - "'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', \n", - " 'Transe - 19k', 'Abstract - 19k', 'Abstract First Sentence - 19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "loose-cuisine", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Complex + Transe + Abstract FirstSent 19k66.17647166.4621850.285714
Combined68.75630369.0336130.277311
Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent69.63025269.327731-0.302521
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.176471 \n", - "Combined 68.756303 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.630252 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.462185 \n", - "Combined 69.033613 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.327731 \n", - "\n", - " Increase \n", - "Complex + Transe + Abstract FirstSent 19k 0.285714 \n", - "Combined 0.277311 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... -0.302521 " - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['concat_19k_v1_old_cosSim',\n", - "'concat_19k_v2_old_cosSim']\n", - "indNames = ['Complex + Transe + Abstract FirstSent 19k', 'Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "second-lightning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 271, - "id": "institutional-gamma", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "KeyboardInterrupt\n", - "\n" - ] - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "seven-edinburgh", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "individual-store", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "processed-reynolds", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "oldColPairs = list(zip(oldColList, indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "forced-dining", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Text 7 props - 19k\n", - "Text 2 props - 19k\n", - "Complex - 19k\n", - "Transe - 19k\n", - "Abstract - 19k\n", - "Abstract First Sentence - 19k\n", - "Complex - Probase\n", - "Transe - Probase\n", - "Complex - Probase-19k\n", - "Transe - Probase-19k\n", - "Complex-Transe-AbsFirstSent - 19k\n", - "Complex-Transe-AbsFirstSent - Probase-19k\n", - "6 embeddings - 19k\n", - "6 embeddings - Probase-19k\n" - ] - } - ], - "source": [ - "print(\"\\n\".join(indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "permanent-comfort", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2002" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comb(len(oldColPairs), 9)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "quantitative-japanese", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "16384" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "2**(len(oldColPairs))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "flexible-preparation", - "metadata": {}, - "outputs": [], - "source": [ - "# accs = []\n", - "# for r in tqdm(range(1,len(oldColPairs)+1)):\n", - "# for comb in tqdm(combinations(oldColPairs, r)):\n", - "# print(len(comb))\n", - "# # oldAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [col[0] for col in comb])\n", - "# # newAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [colMappers[col[0]] for col in comb])\n", - "# print(\" & \".join([col[1] for col in comb]).count(\"&\"))\n", - "# # accs.append((indName, oldAcc, newAcc))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 316, - "id": "fatal-publicity", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "77739ea8b6bf4cfb933f406e6e9699a5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.42857165.126050-0.3025211
1Text 2 props - 19k64.55462263.680672-0.8739501
2Complex - 19k64.57983265.4453780.8655461
3Transe - 19k64.57983266.8907562.3109241
4Abstract - 19k67.73949668.0504200.3109241
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.428571 \n", - "1 64.554622 \n", - "2 64.579832 \n", - "3 64.579832 \n", - "4 67.739496 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 65.126050 -0.302521 \n", - "1 63.680672 -0.873950 \n", - "2 65.445378 0.865546 \n", - "3 66.890756 2.310924 \n", - "4 68.050420 0.310924 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 325, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 326, - "id": "congressional-genre", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 327, - "id": "single-duration", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 328, - "id": "sharp-tunisia", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
30Text 2 props - 19k & Abstract First Sentence - 19k71.84033670.966387-0.8739502
204Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k71.84033670.378151-1.4621853
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
60Abstract - 19k & Abstract First Sentence - 19k71.54621871.243697-0.3025212
12350Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.504202-1.4705888
12329Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.075630-0.8991608
12154Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.084034-0.8907568
11944Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.781513-1.1932778
12349Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.210084-1.7647068
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "30 Text 2 props - 19k & Abstract First Sentence - 19k \n", - "204 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "12350 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12329 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12154 Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "11944 Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12349 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "30 71.840336 \n", - "204 71.840336 \n", - "18 71.840336 \n", - "60 71.546218 \n", - "12350 70.974790 \n", - "12329 70.974790 \n", - "12154 70.974790 \n", - "11944 70.974790 \n", - "12349 70.974790 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "30 70.966387 \n", - "204 70.378151 \n", - "18 71.848739 \n", - "60 71.243697 \n", - "12350 69.504202 \n", - "12329 70.075630 \n", - "12154 70.084034 \n", - "11944 69.781513 \n", - "12349 69.210084 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "30 -0.873950 2 \n", - "204 -1.462185 3 \n", - "18 0.008403 2 \n", - "60 -0.302521 2 \n", - "12350 -1.470588 8 \n", - "12329 -0.899160 8 \n", - "12154 -0.890756 8 \n", - "11944 -1.193277 8 \n", - "12349 -1.764706 8 " - ] - }, - "execution_count": 328, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 329, - "id": "federal-timing", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
5318Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.39495871.5462181.1512616
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
108Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k69.21008471.2521012.0420173
694Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k70.08403471.2521011.1680674
8035Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.09243771.2521011.1596647
7049Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.38655571.2521010.8655467
1916Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k69.79831971.2521011.4537825
11327Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.10084071.2521011.1512618
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "5318 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "108 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k \n", - "694 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "8035 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7049 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "1916 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "11327 Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "18 71.840336 \n", - "5318 70.394958 \n", - "5 72.705882 \n", - "51 68.630252 \n", - "108 69.210084 \n", - "694 70.084034 \n", - "8035 70.092437 \n", - "7049 70.386555 \n", - "1916 69.798319 \n", - "11327 70.100840 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "18 71.848739 \n", - "5318 71.546218 \n", - "5 71.537815 \n", - "51 71.521008 \n", - "108 71.252101 \n", - "694 71.252101 \n", - "8035 71.252101 \n", - "7049 71.252101 \n", - "1916 71.252101 \n", - "11327 71.252101 \n", - "\n", - " Increase count \n", - "18 0.008403 2 \n", - "5318 1.151261 6 \n", - "5 -1.168067 1 \n", - "51 2.890756 2 \n", - "108 2.042017 3 \n", - "694 1.168067 4 \n", - "8035 1.159664 7 \n", - "7049 0.865546 7 \n", - "1916 1.453782 5 \n", - "11327 1.151261 8 " - ] - }, - "execution_count": 329, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 330, - "id": "known-basement", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
1041Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k66.28571469.1932772.9075634
2828Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k65.71428668.6134452.8991605
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
9440Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k66.56302569.1848742.6218497
2701Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k65.71428668.3277312.6134455
1035Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k66.28571468.8991602.6134454
1030Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k66.28571468.8991602.6134454
2689Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k65.71428668.3193282.6050425
2834Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k65.71428668.3193282.6050425
1026Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k68.64705971.2268912.5798324
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "1041 Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "2828 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "9440 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "2701 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "1035 Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k \n", - "1030 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k \n", - "2689 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k \n", - "2834 Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k \n", - "1026 Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "1041 66.285714 \n", - "2828 65.714286 \n", - "51 68.630252 \n", - "9440 66.563025 \n", - "2701 65.714286 \n", - "1035 66.285714 \n", - "1030 66.285714 \n", - "2689 65.714286 \n", - "2834 65.714286 \n", - "1026 68.647059 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "1041 69.193277 \n", - "2828 68.613445 \n", - "51 71.521008 \n", - "9440 69.184874 \n", - "2701 68.327731 \n", - "1035 68.899160 \n", - "1030 68.899160 \n", - "2689 68.319328 \n", - "2834 68.319328 \n", - "1026 71.226891 \n", - "\n", - " Increase count \n", - "1041 2.907563 4 \n", - "2828 2.899160 5 \n", - "51 2.890756 2 \n", - "9440 2.621849 7 \n", - "2701 2.613445 5 \n", - "1035 2.613445 4 \n", - "1030 2.613445 4 \n", - "2689 2.605042 5 \n", - "2834 2.605042 5 \n", - "1026 2.579832 4 " - ] - }, - "execution_count": 330, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "id": "private-conditions", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
126 embeddings - 19k70.09243771.2521011.1596641
136 embeddings - Probase-19k70.09243770.6722690.5798321
4Abstract - 19k67.73949668.0504200.3109241
11Complex-Transe-AbsFirstSent - Probase-19k67.47058867.176471-0.2941181
10Complex-Transe-AbsFirstSent - 19k67.47058866.899160-0.5714291
3Transe - 19k64.57983266.8907562.3109241
9Transe - Probase-19k64.57983266.8907562.3109241
7Transe - Probase64.57983266.5966392.0168071
8Complex - Probase-19k64.57983265.4453780.8655461
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "12 6 embeddings - 19k \n", - "13 6 embeddings - Probase-19k \n", - "4 Abstract - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "7 Transe - Probase \n", - "8 Complex - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "12 70.092437 \n", - "13 70.092437 \n", - "4 67.739496 \n", - "11 67.470588 \n", - "10 67.470588 \n", - "3 64.579832 \n", - "9 64.579832 \n", - "7 64.579832 \n", - "8 64.579832 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "12 71.252101 \n", - "13 70.672269 \n", - "4 68.050420 \n", - "11 67.176471 \n", - "10 66.899160 \n", - "3 66.890756 \n", - "9 66.890756 \n", - "7 66.596639 \n", - "8 65.445378 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "12 1.159664 1 \n", - "13 0.579832 1 \n", - "4 0.310924 1 \n", - "11 -0.294118 1 \n", - "10 -0.571429 1 \n", - "3 2.310924 1 \n", - "9 2.310924 1 \n", - "7 2.016807 1 \n", - "8 0.865546 1 " - ] - }, - "execution_count": 331, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs[allCombs['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "markdown", - "id": "heard-think", - "metadata": {}, - "source": [ - "## RF" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "id": "trying-liabilities", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "123c20d4e60b4e3e8b09c0e0e46efc1e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.12605063.672269-1.4537821
1Text 2 props - 19k61.89916063.3445381.4453781
2Complex - 19k66.61344564.277311-2.3361341
3Transe - 19k66.61344566.310924-0.3025211
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.126050 \n", - "1 61.899160 \n", - "2 66.613445 \n", - "3 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 63.672269 -1.453782 \n", - "1 63.344538 1.445378 \n", - "2 64.277311 -2.336134 \n", - "3 66.310924 -0.302521 \n", - "4 66.008403 -2.890756 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "id": "increased-indonesian", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs1)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "id": "english-brother", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "id": "fantastic-narrow", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
60Abstract - 19k & Abstract First Sentence - 19k72.11764768.327731-3.7899162
138Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k72.10084070.361345-1.7394963
151Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.83193370.378151-1.4537823
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
2114Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k71.81512669.789916-2.0252105
2001Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k71.81512669.798319-2.0168075
2000Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k71.81512670.378151-1.4369755
1999Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k71.81512669.495798-2.3193285
1998Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k71.81512669.487395-2.3277315
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "138 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "151 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "2114 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "2001 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "2000 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "1999 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k \n", - "1998 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 73.285714 \n", - "60 72.117647 \n", - "138 72.100840 \n", - "151 71.831933 \n", - "152 71.831933 \n", - "2114 71.815126 \n", - "2001 71.815126 \n", - "2000 71.815126 \n", - "1999 71.815126 \n", - "1998 71.815126 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 70.075630 \n", - "60 68.327731 \n", - "138 70.361345 \n", - "151 70.378151 \n", - "152 71.252101 \n", - "2114 69.789916 \n", - "2001 69.798319 \n", - "2000 70.378151 \n", - "1999 69.495798 \n", - "1998 69.487395 \n", - "\n", - " Increase count \n", - "5 -3.210084 1 \n", - "60 -3.789916 2 \n", - "138 -1.739496 3 \n", - "151 -1.453782 3 \n", - "152 -0.579832 3 \n", - "2114 -2.025210 5 \n", - "2001 -2.016807 5 \n", - "2000 -1.436975 5 \n", - "1999 -2.319328 5 \n", - "1998 -2.327731 5 " - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 259, - "id": "brown-punishment", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
681Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k70.66386671.2605040.5966394
218Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.22689171.2521010.0252103
1575Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.23529471.2521010.0168075
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
3884Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k68.31092471.2352942.9243706
129Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k69.76470671.2352941.4705883
217Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.22689170.974790-0.2521013
604Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.52941270.966387-0.5630254
7207Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k68.60504270.9663872.3613457
690Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k70.66386670.9663870.3025214
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "681 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k \n", - "218 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "1575 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "3884 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "129 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k \n", - "217 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "604 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "7207 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "690 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "681 70.663866 \n", - "218 71.226891 \n", - "1575 71.235294 \n", - "152 71.831933 \n", - "3884 68.310924 \n", - "129 69.764706 \n", - "217 71.226891 \n", - "604 71.529412 \n", - "7207 68.605042 \n", - "690 70.663866 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "681 71.260504 \n", - "218 71.252101 \n", - "1575 71.252101 \n", - "152 71.252101 \n", - "3884 71.235294 \n", - "129 71.235294 \n", - "217 70.974790 \n", - "604 70.966387 \n", - "7207 70.966387 \n", - "690 70.966387 \n", - "\n", - " Increase count \n", - "681 0.596639 4 \n", - "218 0.025210 3 \n", - "1575 0.016807 5 \n", - "152 -0.579832 3 \n", - "3884 2.924370 6 \n", - "129 1.470588 3 \n", - "217 -0.252101 3 \n", - "604 -0.563025 4 \n", - "7207 2.361345 7 \n", - "690 0.302521 4 " - ] - }, - "execution_count": 259, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 260, - "id": "considerable-syndication", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
13048Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210170.3529416.1008409
13084Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210169.2100844.9579839
14022Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.52941269.1764714.6470599
13861Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.24369768.8907564.6470599
7551Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k63.09243767.7226894.6302527
13058Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210168.6050424.3529419
6500Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k63.68907668.0336134.3445387
7537Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k63.09243767.4369754.3445387
7570Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k63.09243767.4285714.3361347
6499Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k63.68907668.0252104.3361347
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "13048 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "13084 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "14022 Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "13861 Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7551 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "13058 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "6500 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7537 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7570 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k \n", - "6499 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "13048 64.252101 \n", - "13084 64.252101 \n", - "14022 64.529412 \n", - "13861 64.243697 \n", - "7551 63.092437 \n", - "13058 64.252101 \n", - "6500 63.689076 \n", - "7537 63.092437 \n", - "7570 63.092437 \n", - "6499 63.689076 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "13048 70.352941 \n", - "13084 69.210084 \n", - "14022 69.176471 \n", - "13861 68.890756 \n", - "7551 67.722689 \n", - "13058 68.605042 \n", - "6500 68.033613 \n", - "7537 67.436975 \n", - "7570 67.428571 \n", - "6499 68.025210 \n", - "\n", - " Increase count \n", - "13048 6.100840 9 \n", - "13084 4.957983 9 \n", - "14022 4.647059 9 \n", - "13861 4.647059 9 \n", - "7551 4.630252 7 \n", - "13058 4.352941 9 \n", - "6500 4.344538 7 \n", - "7537 4.344538 7 \n", - "7570 4.336134 7 \n", - "6499 4.336134 7 " - ] - }, - "execution_count": 260, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 261, - "id": "binary-committee", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
11Complex-Transe-AbsFirstSent - Probase-19k70.04201770.6302520.5882351
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
10Complex-Transe-AbsFirstSent - 19k70.04201768.302521-1.7394961
136 embeddings - Probase-19k68.90756368.042017-0.8655461
126 embeddings - 19k68.90756366.857143-2.0504201
6Complex - Probase66.61344566.596639-0.0168071
7Transe - Probase66.61344566.596639-0.0168071
3Transe - 19k66.61344566.310924-0.3025211
9Transe - Probase-19k66.61344566.008403-0.6050421
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "6 Complex - Probase \n", - "7 Transe - Probase \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "11 70.042017 \n", - "5 73.285714 \n", - "10 70.042017 \n", - "13 68.907563 \n", - "12 68.907563 \n", - "6 66.613445 \n", - "7 66.613445 \n", - "3 66.613445 \n", - "9 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "11 70.630252 \n", - "5 70.075630 \n", - "10 68.302521 \n", - "13 68.042017 \n", - "12 66.857143 \n", - "6 66.596639 \n", - "7 66.596639 \n", - "3 66.310924 \n", - "9 66.008403 \n", - "4 66.008403 \n", - "\n", - " Increase count \n", - "11 0.588235 1 \n", - "5 -3.210084 1 \n", - "10 -1.739496 1 \n", - "13 -0.865546 1 \n", - "12 -2.050420 1 \n", - "6 -0.016807 1 \n", - "7 -0.016807 1 \n", - "3 -0.302521 1 \n", - "9 -0.605042 1 \n", - "4 -2.890756 1 " - ] - }, - "execution_count": 261, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1[allCombs1['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "approximate-event", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "successful-spider", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "moral-thought", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "western-easter", - "metadata": {}, - "source": [ - "# Generate Embeddings Files" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "nervous-physiology", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = pd.concat([wordSim353AnnotDF_New2[['word1_kg_id', 'Word 1']], wordSim353AnnotDF_New2[['word2_kg_id', 'Word 2']].rename(columns={'Word 2': 'Word 1', 'word2_kg_id': 'word1_kg_id'})])" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "neither-hammer", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = wordList[~wordList.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "welsh-indiana", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in embedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "processed-wonder", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in newEmbedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings_new_attempt1.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "psychological-template", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['Word 1'].to_csv('../data/wordsim353_embeddings_words.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prime-munich", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assigned-appliance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "severe-textbook", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prompt-orlando", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "otherwise-qatar", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "inclusive-brick", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "micro-kernel", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "optical-atlas", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assured-means", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-fever", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opened-baker", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "supposed-charm", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "308px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Evaluation Datasets.ipynb b/Evaluation Datasets.ipynb deleted file mode 100644 index 67f4871..0000000 --- a/Evaluation Datasets.ipynb +++ /dev/null @@ -1,2262 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "ultimate-subscriber", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from tqdm.notebook import tqdm\n", - "import gzip\n", - "import os\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from matplotlib import pyplot\n", - "from itertools import combinations\n", - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "democratic-memorial", - "metadata": {}, - "outputs": [], - "source": [ - "LABELS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/labels.en.tsv.gz\"\n", - "ALL_EDGES_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/claims.tsv.gz\"" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "covered-flashing", - "metadata": {}, - "outputs": [], - "source": [ - "# wikidata-20201208 files\n", - "# https://drive.google.com/drive/u/3/folders/1qbbgjo7pddMdDvQzOSeSaL6lYwj_f5gi\n", - "SITELINKS_FILE_V2 = \"../source_dataset_files/wikidata-20201208/sitelinks.en.tsv.gz\"" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "improving-prototype", - "metadata": {}, - "outputs": [], - "source": [ - "WORDSIM_SOURCE_FILE = \"../data/evaluation/source_files/wordsim353_with_r3.csv\"\n", - "WORDSIM_FINAL_FILE = \"../data/evaluation/wordsim353_with_r3.csv\"\n", - "\n", - "WORDSIM_OLD_SOURCE_FILE = \"../data/evaluation/source_files/wordsim_old.csv\"\n", - "WORDSIM_OLD_FINAL_FILE = \"../data/evaluation/wordsim_old.csv\"" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "immune-blend", - "metadata": {}, - "outputs": [], - "source": [ - "DBPEDIA_MC_30_SOURCE_FILE = \"../data/evaluation/source_files/mc-30_DBpedia.csv\"\n", - "DBPEDIA_MC_30_FINAL_FILE = \"../data/evaluation/mc-30_DBpedia.csv\"\n", - "\n", - "DBPEDIA_RG_65_SOURCE_FILE = \"../data/evaluation/source_files/rg-65_DBpedia.csv\"\n", - "DBPEDIA_RG_65_FINAL_FILE = \"../data/evaluation/rg-65_DBpedia.csv\"" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "perceived-robert", - "metadata": {}, - "outputs": [], - "source": [ - "CONCEPTNET_SOURCE_FILE = \"../data/evaluation/source_files/kgtk_conceptnet.tsv\"\n", - "CONCEPTNET_INTERM_FILE = \"../data/evaluation/intermediate_files/kgtk_conceptnet.csv\"\n", - "CONCEPTNET_FINAL_FILE = \"../data/evaluation/kgtk_conceptnet_final.csv\"" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "southeast-liberty", - "metadata": {}, - "outputs": [], - "source": [ - "WIKI_CS_SOURCE_FILE = '../data/evaluation/source_files/wikidata-cs-20200504.tsv'\n", - "WIKI_CS_INTERM_FILE = '../data/evaluation/intermediate_files/wikidata-cs_categorized.csv'\n", - "WIKI_CS_FINAL_FILE = '../data/evaluation/wikidata-cs_final.csv'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "annual-producer", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "automatic-rotation", - "metadata": {}, - "outputs": [], - "source": [ - "def uniformize_dataset(wikiDF):\n", - " needed_size = len(wikiDF[wikiDF.category == 'I'])\n", - " M_sampled_set = wikiDF[wikiDF.category == 'M'].sample(needed_size, random_state=13)\n", - " subset = wikiDF[wikiDF.category == 'M']\n", - " mainset = wikiDF\n", - " \n", - " mainset_pairs = set([(row['word1_kg_id'], row['word2_kg_id']) for _,row in mainset.iterrows()])\n", - " nodes = set([row['word1_kg_id'] for _,row in subset.iterrows()] \n", - " + [row['word2_kg_id'] for _,row in subset.iterrows()])\n", - " node_label_mappings = {row['word1_kg_id']: row['node1;label'] for _, row in subset.iterrows()}\n", - " node_label_mappings.update({row['word2_kg_id']: row['node2;label'] for _, row in subset.iterrows()})\n", - " \n", - " all_pairs = set([pair for pair in random.sample(list(combinations(list(nodes), 2)), 10*needed_size)])\n", - " removed_pairs = set()\n", - "\n", - " first_line = True\n", - " \n", - " with gzip.open(ALL_EDGES_FILE, 'r') as claims_file:\n", - " for line in tqdm(claims_file, total=491297976): #, total=1034927835):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.decode(\"utf-8\").strip().split('\\t')\n", - " curr_pair = (line[1], line[3])\n", - " if curr_pair in all_pairs:\n", - " removed_pairs.add(curr_pair)\n", - " newDF = []\n", - " count = 0\n", - " \n", - " for pair in all_pairs - removed_pairs - mainset_pairs:\n", - " if pair is None or pair[0] is None or pair[1] is None:\n", - " continue\n", - " try:\n", - " newDF.append((pair[0], pair[1], 'U', node_label_mappings.get(pair[0],\"\"), node_label_mappings.get(pair[1],\"\"), None, None, None, None, None))\n", - " count += 1\n", - " if count == needed_size:\n", - " break\n", - " except:\n", - " print(f\"Error while processing pair: {pair}\")\n", - " \n", - " return pd.concat([\n", - " wikiDF[wikiDF.category == 'I'],\n", - " M_sampled_set,\n", - " pd.DataFrame(newDF, columns=subset.columns)\n", - " ])" - ] - }, - { - "cell_type": "markdown", - "id": "compact-telling", - "metadata": {}, - "source": [ - "# Wordsim" - ] - }, - { - "cell_type": "markdown", - "id": "maritime-picnic", - "metadata": {}, - "source": [ - "## New" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "touched-eclipse", - "metadata": {}, - "outputs": [], - "source": [ - "wordsim_df = pd.read_csv(WORDSIM_SOURCE_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "inclusive-boxing", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "335" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsim_df = wordsim_df[wordsim_df.word1_kg_id != wordsim_df.word2_kg_id]\n", - "len(wordsim_df)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "unknown-arabic", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "334" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsim_df = wordsim_df[~(wordsim_df.word1_kg_id + wordsim_df.word2_kg_id).duplicated()]\n", - "len(wordsim_df)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "macro-basin", - "metadata": {}, - "outputs": [], - "source": [ - "wordsim_df.to_csv(WORDSIM_FINAL_FILE,index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "painted-oklahoma", - "metadata": {}, - "source": [ - "## Old" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "engaging-clause", - "metadata": {}, - "outputs": [], - "source": [ - "old_wordsim_df = pd.read_csv(WORDSIM_OLD_SOURCE_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "dutch-occasion", - "metadata": {}, - "outputs": [], - "source": [ - "old_wordsim_df['Avg'] = (10 - old_wordsim_df['Human (Mean)']) * 3 / 10 + 1" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "blocked-haven", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclassAvg
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN2.33920
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.0058512.76250
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.3936572.01250
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.2088123.38125
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.8886211.84375
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class Avg \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN 2.33920 \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 2.76250 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 2.01250 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 3.38125 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 1.84375 " - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "old_wordsim_df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "better-bangladesh", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 349.000000\n", - "mean 2.784180\n", - "std 0.613491\n", - "min 1.000000\n", - "25% 2.387500\n", - "50% 2.818750\n", - "75% 3.287500\n", - "max 3.906250\n", - "Name: Avg, dtype: float64" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "old_wordsim_df.Avg.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "convinced-pride", - "metadata": {}, - "outputs": [], - "source": [ - "old_wordsim_df['category'] = old_wordsim_df.Avg.apply(lambda score: 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M')" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "robust-pennsylvania", - "metadata": {}, - "outputs": [], - "source": [ - "old_wordsim_df.to_csv(WORDSIM_OLD_FINAL_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "living-darwin", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "occasional-parcel", - "metadata": {}, - "source": [ - "# DBPedia sourced eval datasets" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "matched-terminal", - "metadata": {}, - "outputs": [], - "source": [ - "dbpedia_30_df = pd.read_csv(DBPEDIA_MC_30_SOURCE_FILE, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "measured-helen", - "metadata": {}, - "outputs": [], - "source": [ - "dbpedia_30_df.columns = ['Word 1', 'Word 2', 'Avg']" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "biological-gentleman", - "metadata": {}, - "outputs": [], - "source": [ - "dbpedia_65_df = pd.read_csv(DBPEDIA_RG_65_SOURCE_FILE, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "annual-france", - "metadata": {}, - "outputs": [], - "source": [ - "dbpedia_65_df.columns = ['Word 1', 'Word 2', 'Avg']" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "native-allocation", - "metadata": {}, - "outputs": [], - "source": [ - "cvg_nodes = set(dbpedia_30_df['Word 1'].to_list() + dbpedia_30_df['Word 2'].to_list() + \\\n", - " dbpedia_65_df['Word 1'].to_list() + dbpedia_65_df['Word 2'].to_list())\n", - "for elem in list(cvg_nodes):\n", - " cvg_nodes.add(elem.capitalize())" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "historical-scott", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "2ebabfa2b63b4589a033281506ca7bd3", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "defaultdict(str,\n", - " {'Brother': 'Q10861465',\n", - " 'Cushion': 'Q10971235',\n", - " 'Boy': 'Q3010',\n", - " 'Glass': 'Q21830626',\n", - " 'Hill': 'Q9131144',\n", - " 'Tumbler': 'Q1190389',\n", - " 'Fruit': 'Q1364',\n", - " 'Car': 'Q1420',\n", - " 'tool': 'Q14444884',\n", - " 'Food': 'Q2095',\n", - " 'Mound': 'Q1584134',\n", - " 'Jewellery': 'Q161439',\n", - " 'Furnace': 'Q1709184',\n", - " 'Signature': 'Q188675',\n", - " 'Stove': 'Q203789',\n", - " 'Oracle': 'Q217123',\n", - " 'Rooster': 'Q2216236',\n", - " 'Implementation': 'Q245962',\n", - " 'Magician_(paranormal)': 'Q2488257',\n", - " 'Crane_(bird)': 'Q25365',\n", - " 'Autograph': 'Q2872572',\n", - " 'Woodland': 'Q3241565',\n", - " 'Tool': 'Q39546',\n", - " 'Cemetery': 'Q39614',\n", - " 'Forest': 'Q4421',\n", - " 'Shore': 'Q468756',\n", - " 'Bird': 'Q6730492',\n", - " 'Monk': 'Q733786',\n", - " 'Gemstone': 'Q83437',\n", - " 'Slavery': 'Q8463',\n", - " 'Coast': 'Q93352',\n", - " 'Pillow': 'Q99895'})" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from collections import defaultdict\n", - "sitelinks_map = defaultdict(str)\n", - "with gzip.open(SITELINKS_FILE_V2) as f:\n", - " first_line = False\n", - " for line in tqdm(f):\n", - " if first_line:\n", - " first_line = True\n", - " continue\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " if line[2] != 'wikipedia_sitelink':\n", - " continue\n", - " fetch_main_string = lambda p: p.split(\"/\")[-1] if p.split(\"/\")[-1] != '' else p.split(\"/\")[-2]\n", - " sitelink_str = fetch_main_string(line[3])\n", - " if sitelink_str not in cvg_nodes:\n", - " continue\n", - " sitelinks_map[sitelink_str] = line[1]\n", - "sitelinks_map" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "accepting-cherry", - "metadata": {}, - "outputs": [], - "source": [ - "# First check if capitalized version has a qnode else check for the original one\n", - "fetch_qnode = lambda p: sitelinks_map[p.capitalize()] if p.capitalize() else sitelinks_map[p] if p in sitelinks_map in sitelinks_map else None\n", - "dbpedia_30_df['word1_kg_id'] = dbpedia_30_df['Word 1'].apply(fetch_qnode)\n", - "dbpedia_30_df['word2_kg_id'] = dbpedia_30_df['Word 2'].apply(fetch_qnode)\n", - "dbpedia_65_df['word1_kg_id'] = dbpedia_65_df['Word 1'].apply(fetch_qnode)\n", - "dbpedia_65_df['word2_kg_id'] = dbpedia_65_df['Word 2'].apply(fetch_qnode)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "interim-spray", - "metadata": {}, - "outputs": [], - "source": [ - "dbpedia_30_df['Avg'] = dbpedia_30_df.Avg.apply(lambda p: 4 - 3 * p / 5)\n", - "dbpedia_65_df['Avg'] = dbpedia_65_df.Avg.apply(lambda p: 4 - 3 * p / 5)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "charming-perry", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgword1_kg_idword2_kg_id
0GemstoneJewellery1.696Q83437Q161439
1coastshore1.780Q93352Q468756
2furnacestove2.134Q1709184Q203789
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg word1_kg_id word2_kg_id\n", - "0 Gemstone Jewellery 1.696 Q83437 Q161439\n", - "1 coast shore 1.780 Q93352 Q468756\n", - "2 furnace stove 2.134 Q1709184 Q203789" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dbpedia_30_df.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "southwest-overview", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgword1_kg_idword2_kg_id
0GemstoneJewellery1.696Q83437Q161439
1coastshore1.780Q93352Q468756
2furnacestove2.134Q1709184Q203789
3foodfruit2.152Q2095Q1364
4birdrooster2.170Q6730492Q2216236
5birdCrane_(bird)2.218Q6730492Q25365
6toolimplementation2.230Q39546Q245962
7brothermonk2.308Q10861465Q733786
8monkoracle3.340Q733786Q217123
9cemeterywoodland3.430Q39614Q3241565
10foodrooster3.466Q2095Q2216236
11coasthill3.478Q93352Q9131144
12shorewoodland3.622Q468756Q3241565
13monkSlavery3.670Q733786Q8463
14coastforest3.748Q93352Q4421
15glassmagician_(paranormal)3.934Q21830626Q2488257
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg word1_kg_id word2_kg_id\n", - "0 Gemstone Jewellery 1.696 Q83437 Q161439\n", - "1 coast shore 1.780 Q93352 Q468756\n", - "2 furnace stove 2.134 Q1709184 Q203789\n", - "3 food fruit 2.152 Q2095 Q1364\n", - "4 bird rooster 2.170 Q6730492 Q2216236\n", - "5 bird Crane_(bird) 2.218 Q6730492 Q25365\n", - "6 tool implementation 2.230 Q39546 Q245962\n", - "7 brother monk 2.308 Q10861465 Q733786\n", - "8 monk oracle 3.340 Q733786 Q217123\n", - "9 cemetery woodland 3.430 Q39614 Q3241565\n", - "10 food rooster 3.466 Q2095 Q2216236\n", - "11 coast hill 3.478 Q93352 Q9131144\n", - "12 shore woodland 3.622 Q468756 Q3241565\n", - "13 monk Slavery 3.670 Q733786 Q8463\n", - "14 coast forest 3.748 Q93352 Q4421\n", - "15 glass magician_(paranormal) 3.934 Q21830626 Q2488257" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dbpedia_30_df" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "generous-hayes", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgword1_kg_idword2_kg_id
0GemstoneJewellery1.636Q83437Q161439
1cushionpillow1.696Q10971235Q99895
2Implementationtool1.804Q245962Q39546
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg word1_kg_id word2_kg_id\n", - "0 Gemstone Jewellery 1.636 Q83437 Q161439\n", - "1 cushion pillow 1.696 Q10971235 Q99895\n", - "2 Implementation tool 1.804 Q245962 Q39546" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dbpedia_65_df.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "outdoor-dining", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgword1_kg_idword2_kg_id
0GemstoneJewellery1.636Q83437Q161439
1cushionpillow1.696Q10971235Q99895
2Implementationtool1.804Q245962Q39546
3forestwoodland1.810Q4421Q3241565
4coastshore1.840Q93352Q468756
5autographsignature1.846Q2872572Q188675
6glasstumbler1.930Q21830626Q1190389
7hillmound2.026Q9131144Q1584134
8furnacestove2.134Q1709184Q203789
9brothermonk2.356Q10861465Q733786
10foodfruit2.386Q2095Q1364
11birdRooster2.422Q6730492Q2216236
12birdCrane_(bird)2.422Q6730492Q25365
13Magician_(paranormal)oracle2.908Q2488257Q217123
14glassJewellery2.932Q21830626Q161439
15cemeterymound2.986Q39614Q1584134
16hillwoodland3.112Q9131144Q3241565
17Crane_(bird)rooster3.154Q25365Q2216236
18furnaceImplementation3.178Q1709184Q245962
19coasthill3.244Q93352Q9131144
20birdwoodland3.256Q6730492Q3241565
21cemeterywoodland3.292Q39614Q3241565
22foodrooster3.346Q2095Q2216236
23moundshore3.418Q1584134Q468756
24carcushion3.418Q1420Q10971235
25monkoracle3.454Q733786Q217123
26shorewoodland3.460Q468756Q3241565
27coastforest3.490Q93352Q4421
28monkslavery3.658Q733786Q8463
29cushionJewellery3.730Q10971235Q161439
30boyrooster3.736Q3010Q2216236
31glassMagician_(paranormal)3.736Q21830626Q2488257
32moundstove3.916Q1584134Q203789
33fruitfurnace3.970Q1364Q1709184
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg word1_kg_id \\\n", - "0 Gemstone Jewellery 1.636 Q83437 \n", - "1 cushion pillow 1.696 Q10971235 \n", - "2 Implementation tool 1.804 Q245962 \n", - "3 forest woodland 1.810 Q4421 \n", - "4 coast shore 1.840 Q93352 \n", - "5 autograph signature 1.846 Q2872572 \n", - "6 glass tumbler 1.930 Q21830626 \n", - "7 hill mound 2.026 Q9131144 \n", - "8 furnace stove 2.134 Q1709184 \n", - "9 brother monk 2.356 Q10861465 \n", - "10 food fruit 2.386 Q2095 \n", - "11 bird Rooster 2.422 Q6730492 \n", - "12 bird Crane_(bird) 2.422 Q6730492 \n", - "13 Magician_(paranormal) oracle 2.908 Q2488257 \n", - "14 glass Jewellery 2.932 Q21830626 \n", - "15 cemetery mound 2.986 Q39614 \n", - "16 hill woodland 3.112 Q9131144 \n", - "17 Crane_(bird) rooster 3.154 Q25365 \n", - "18 furnace Implementation 3.178 Q1709184 \n", - "19 coast hill 3.244 Q93352 \n", - "20 bird woodland 3.256 Q6730492 \n", - "21 cemetery woodland 3.292 Q39614 \n", - "22 food rooster 3.346 Q2095 \n", - "23 mound shore 3.418 Q1584134 \n", - "24 car cushion 3.418 Q1420 \n", - "25 monk oracle 3.454 Q733786 \n", - "26 shore woodland 3.460 Q468756 \n", - "27 coast forest 3.490 Q93352 \n", - "28 monk slavery 3.658 Q733786 \n", - "29 cushion Jewellery 3.730 Q10971235 \n", - "30 boy rooster 3.736 Q3010 \n", - "31 glass Magician_(paranormal) 3.736 Q21830626 \n", - "32 mound stove 3.916 Q1584134 \n", - "33 fruit furnace 3.970 Q1364 \n", - "\n", - " word2_kg_id \n", - "0 Q161439 \n", - "1 Q99895 \n", - "2 Q39546 \n", - "3 Q3241565 \n", - "4 Q468756 \n", - "5 Q188675 \n", - "6 Q1190389 \n", - "7 Q1584134 \n", - "8 Q203789 \n", - "9 Q733786 \n", - "10 Q1364 \n", - "11 Q2216236 \n", - "12 Q25365 \n", - "13 Q217123 \n", - "14 Q161439 \n", - "15 Q1584134 \n", - "16 Q3241565 \n", - "17 Q2216236 \n", - "18 Q245962 \n", - "19 Q9131144 \n", - "20 Q3241565 \n", - "21 Q3241565 \n", - "22 Q2216236 \n", - "23 Q468756 \n", - "24 Q10971235 \n", - "25 Q217123 \n", - "26 Q3241565 \n", - "27 Q4421 \n", - "28 Q8463 \n", - "29 Q161439 \n", - "30 Q2216236 \n", - "31 Q2488257 \n", - "32 Q203789 \n", - "33 Q1709184 " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dbpedia_65_df" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "regulation-frequency", - "metadata": {}, - "outputs": [], - "source": [ - "dbpedia_30_df.to_csv(DBPEDIA_MC_30_FINAL_FILE, index=None)\n", - "dbpedia_65_df.to_csv(DBPEDIA_RG_65_FINAL_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "measured-arbitration", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "awful-vatican", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "attended-tulsa", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "collective-techno", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "personalized-chambers", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "accredited-consistency", - "metadata": {}, - "source": [ - "# ConceptNet" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "steady-mitchell", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "beb4ee57be0a42afaedfece6dac99064", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "No. of conceptNet nodes fetched: 1165190\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8bc3ec3c5db74a4eb8c6ba97d08a7a31", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "labelsMap = {}\n", - "with open(CONCEPTNET_SOURCE_FILE) as conceptFile:\n", - " firstLine = True\n", - " for line in tqdm(conceptFile):\n", - " if firstLine:\n", - " firstLine = False\n", - " continue\n", - " line = line.split('\\t')\n", - " labelsMap[line[3][1:-1]] = None\n", - " labelsMap[line[4][1:-1]] = None\n", - "print(\"No. of conceptNet nodes fetched: \",len(labelsMap))\n", - "with gzip.open(LABELS_FILE, 'r') as labelsFile:\n", - " firstLine = True\n", - " for line in tqdm(labelsFile):\n", - " if firstLine:\n", - " firstLine = False\n", - " continue\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " line[3] = line[3][1:-5]\n", - " qnode, label = line[1], line[3]\n", - "# print(qnode, label)\n", - " if label in labelsMap:\n", - " if labelsMap[label] == None:\n", - " labelsMap[label] = []\n", - " labelsMap[label].append(qnode)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "studied-pharmacology", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchQnode(label):\n", - " if pd.isna(label):\n", - " return None\n", - " label = label[1:-1]\n", - " if label not in labelsMap:\n", - " return None\n", - " else:\n", - " return labelsMap[label]" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "imperial-genetics", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/IPython/core/interactiveshell.py:3165: DtypeWarning: Columns (8) have mixed types.Specify dtype option on import or set low_memory=False.\n", - " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Concept Net dataset size reduced from 3423004 pairs to 99052 pairs\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":6: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF1['node1;qnode;len'] = conceptDF1['node1;qnode'].apply(len)\n", - ":7: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF1['node2;qnode;len'] = conceptDF1['node2;qnode'].apply(len)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Concept Net dataset size reduced from 99052 pairs to 2084 pairs by keeping only pairs which have one-one mapping with qnodes\n" - ] - }, - { - "data": { - "text/plain": [ - "related to 758\n", - "synonym 708\n", - "form of 219\n", - "etymologically related to 82\n", - "derived from 77\n", - "is a 63\n", - "has context 45\n", - "at location 29\n", - "antonym 15\n", - "manner of 15\n", - "similar to 15\n", - "part of 12\n", - "causes 9\n", - "distinct from 6\n", - "used for 5\n", - "receives action 4\n", - "has prerequisite 4\n", - "genus 2\n", - "has a 2\n", - "instance of 2\n", - "has subevent 2\n", - "capital 2\n", - "motivated by goal 2\n", - "has last subevent 1\n", - "has property 1\n", - "causes desire 1\n", - "genre 1\n", - "has first subevent 1\n", - "language 1\n", - "Name: relation;label, dtype: int64" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "conceptDF = pd.read_csv(CONCEPTNET_SOURCE_FILE, sep='\\t')\n", - "conceptDF['node1;qnode'] = conceptDF['node1;label'].apply(fetchQnode)\n", - "conceptDF['node2;qnode'] = conceptDF['node2;label'].apply(fetchQnode)\n", - "conceptDF1 = conceptDF[(~conceptDF['node1;qnode'].isna()) & (~conceptDF['node2;qnode'].isna())]\n", - "print(f\"Concept Net dataset size reduced from {len(conceptDF)} pairs to {len(conceptDF1)} pairs\")\n", - "conceptDF1['node1;qnode;len'] = conceptDF1['node1;qnode'].apply(len)\n", - "conceptDF1['node2;qnode;len'] = conceptDF1['node2;qnode'].apply(len)\n", - "conceptDF2 = conceptDF1[(conceptDF1['node1;qnode;len'] == 1) & (conceptDF1['node2;qnode;len'] == 1)]\n", - "print(f\"Concept Net dataset size reduced from {len(conceptDF1)} pairs to {len(conceptDF2)} pairs by keeping only pairs which have one-one mapping with qnodes\")\n", - "conceptDF2['relation;label'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "elder-final", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF2['category'] = conceptDF2['relation;label'].apply(lambda p: 'I' if p == 'synonym' or p == 'similar to' else 'M')\n", - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF2['word1_kg_id'] = conceptDF2['node1;qnode'].apply(lambda p: p[0])\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " conceptDF2['word2_kg_id'] = conceptDF2['node2;qnode'].apply(lambda p: p[0])\n" - ] - } - ], - "source": [ - "conceptDF2['category'] = conceptDF2['relation;label'].apply(lambda p: 'I' if p == 'synonym' or p == 'similar to' else 'M')\n", - "conceptDF2['relation;label'].apply(lambda p: 'I' if p == 'synonym' or p == 'similar to' else 'M').value_counts()\n", - "conceptDF2['word1_kg_id'] = conceptDF2['node1;qnode'].apply(lambda p: p[0])\n", - "conceptDF2['word2_kg_id'] = conceptDF2['node2;qnode'].apply(lambda p: p[0])\n", - "conceptDF2[['word1_kg_id', 'word2_kg_id', 'category', 'node1;label', 'node2;label', 'relation', 'relation;label', 'relation;dimension', 'source', 'sentence']].to_csv(CONCEPTNET_INTERM_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "distinguished-mustang", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "18277bf62d5e4098a980327e5a94f8a4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/491297976 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idcategorynode1;labelnode2;labelrelationrelation;labelrelation;dimensionsourcesentence
1350Q29736947Q50414211Iarcobowed/r/SimilarTosimilar toNaNCN[[arco]] is similar to [[bowed]]
1351Q29782278Q12835706Iauxothallo/r/SimilarTosimilar toNaNCNNaN
1352Q50414211Q29736947Ibowedarco/r/SimilarTosimilar toNaNCN[[bowed]] is similar to [[arco]]
1353Q1146652Q12835706Idikethallo/r/SimilarTosimilar toNaNCNNaN
1354Q61504726Q3366001Iemptystripped/r/SimilarTosimilar toNaNCN[[empty]] is similar to [[stripped]]
.................................
2025Q190527Q2655953Ivalueprize/r/SynonymsynonymNaNCN[[value]] is a synonym of [[prize]]
2037Q1128240P3828Iwearyaweary/r/SynonymsynonymNaNCN[[weary]] is a synonym of [[aweary]]
2038Q1128240Q29713327Iwearytire/r/SynonymsynonymNaNCN[[weary]] is a synonym of [[tire]]
2045Q103859907Q213449Iwhippingbeating/r/SynonymsynonymNaNCN[[whipping]] is a synonym of [[beating]]
2059Q1128240Q97138958Iyearsdays/r/SynonymsynonymNaNCN[[years]] is a synonym of [[days]]
\n", - "

76 rows × 10 columns

\n", - "" - ], - "text/plain": [ - " word1_kg_id word2_kg_id category node1;label node2;label relation \\\n", - "1350 Q29736947 Q50414211 I arco bowed /r/SimilarTo \n", - "1351 Q29782278 Q12835706 I auxo thallo /r/SimilarTo \n", - "1352 Q50414211 Q29736947 I bowed arco /r/SimilarTo \n", - "1353 Q1146652 Q12835706 I dike thallo /r/SimilarTo \n", - "1354 Q61504726 Q3366001 I empty stripped /r/SimilarTo \n", - "... ... ... ... ... ... ... \n", - "2025 Q190527 Q2655953 I value prize /r/Synonym \n", - "2037 Q1128240 P3828 I weary aweary /r/Synonym \n", - "2038 Q1128240 Q29713327 I weary tire /r/Synonym \n", - "2045 Q103859907 Q213449 I whipping beating /r/Synonym \n", - "2059 Q1128240 Q97138958 I years days /r/Synonym \n", - "\n", - " relation;label relation;dimension source \\\n", - "1350 similar to NaN CN \n", - "1351 similar to NaN CN \n", - "1352 similar to NaN CN \n", - "1353 similar to NaN CN \n", - "1354 similar to NaN CN \n", - "... ... ... ... \n", - "2025 synonym NaN CN \n", - "2037 synonym NaN CN \n", - "2038 synonym NaN CN \n", - "2045 synonym NaN CN \n", - "2059 synonym NaN CN \n", - "\n", - " sentence \n", - "1350 [[arco]] is similar to [[bowed]] \n", - "1351 NaN \n", - "1352 [[bowed]] is similar to [[arco]] \n", - "1353 NaN \n", - "1354 [[empty]] is similar to [[stripped]] \n", - "... ... \n", - "2025 [[value]] is a synonym of [[prize]] \n", - "2037 [[weary]] is a synonym of [[aweary]] \n", - "2038 [[weary]] is a synonym of [[tire]] \n", - "2045 [[whipping]] is a synonym of [[beating]] \n", - "2059 [[years]] is a synonym of [[days]] \n", - "\n", - "[76 rows x 10 columns]" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "conceptnet_uniform_df[(conceptnet_uniform_df.category == 'I') & (conceptnet_uniform_df.word1_kg_id != conceptnet_uniform_df.word2_kg_id)].head(100)" - ] - }, - { - "cell_type": "markdown", - "id": "structural-league", - "metadata": {}, - "source": [ - "# Wiki-CS" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "incomplete-range", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "inheritance 72707\n", - "meronymy 6886\n", - "context 5541\n", - "distinctness 4934\n", - "utility 2243\n", - "antonymy 2184\n", - "ordering 2107\n", - "material 1426\n", - "synonymy 1070\n", - "properties 1049\n", - "derivation 540\n", - "causation 510\n", - "similarity 345\n", - "attribution 187\n", - "other 42\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF = pd.read_csv(WIKI_CS_SOURCE_FILE,sep='\\t')\n", - "mapper1 = {'/r/DistinctFrom': 'distinctness',\n", - " '/r/Antonym': 'antonymy',\n", - " '/r/Synonym': 'synonymy',\n", - " '/r/SimilarTo': 'similarity',\n", - " '/r/DerivedFrom': 'derivation',\n", - " '/r/IsA': 'inheritance',\n", - " '/r/PartOf': 'meronymy',\n", - " '/r/MadeOf': 'material',\n", - " '/r/CreatedBy': 'attribution',\n", - " '/r/UsedFor': 'utility',\n", - " '/r/HasProperty': 'properties',\n", - " '/r/Causes': 'causation',\n", - " '/r/HasPrerequisite': 'ordering',\n", - " '/r/HasContext': 'context',\n", - " '/r/RelatedTo': 'other'}\n", - "\n", - "wikiDF['dim'] = wikiDF['relation'].apply(lambda p: mapper1[p])\n", - "wikiDF['category'] = wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' or p == 'similarity' else 'M')\n", - "wikiDF['dim'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "practical-credits", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 100701\n", - "I 1070\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' else 'M').value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "agreed-strand", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 100110\n", - "I 1415\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF1 = wikiDF[wikiDF.apply(lambda p: p['node1'].startswith('Q') and p['node2'].startswith('Q'), axis=1)]\n", - "wikiDF1.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "secondary-episode", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF1.rename(columns={'node1':'word1_kg_id', 'node2':'word2_kg_id'})\n", - "wikiDF1[['word1_kg_id', 'word2_kg_id', 'category', 'node1;label', 'node2;label', 'relation', 'relation;label', 'relation;dimension', 'source', 'sentence']].to_csv(WIKI_CS_INTERM_FILE,index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "artificial-fantasy", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c0dd5091b52c44849cf5dbfd30090864", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/491297976 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0indexnode2idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDescnode1_embnode2_embbert2SentSim
001Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791974 fighter aircraft family by General DynamicsYF-16F-16 Fighting Falconinitial prototype of the F-16 fighter aircraftinitial prototype of the F-16 fighter aircraft1974 fighter aircraft family by General Dynamics[-5.89544833e-01 1.19935878e-01 3.76383096e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.666525
112Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791974 fighter aircraft family by General DynamicsF-16A/B Fighting FalconF-16 Fighting Falconinitial series of the F-16 fighter aircraftinitial series of the F-16 fighter aircraft1974 fighter aircraft family by General Dynamics[-6.08038664e-01 5.00908047e-02 5.60190260e-...[ 1.79253891e-01 6.10661447e-01 8.33987534e-...0.700515
223Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791974 fighter aircraft family by General DynamicsF-16C/D Fighting FalconF-16 Fighting Falconmultirole series of the F-16 fighter aircraftmultirole series of the F-16 fighter aircraft1974 fighter aircraft family by General Dynamics[-5.40582001e-01 1.56212196e-01 5.69522917e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.683245
334Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791974 fighter aircraft family by General DynamicsF-16E/F Desert FalconF-16 Fighting Falconexport strike fighter series of the F-16 fight...export strike fighter series of the F-16 fight...1974 fighter aircraft family by General Dynamics[-4.99146163e-01 6.76080063e-02 3.48868877e-...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.689516
445Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791974 fighter aircraft family by General DynamicsF-16 VISTAF-16 Fighting Falconexperimental aircraftexperimental aircraft1974 fighter aircraft family by General Dynamics[-1.47221148e-01 9.54690054e-02 1.05311513e+...[ 1.79253638e-01 6.10661507e-01 8.33987653e-...0.603161
\n", - "" - ], - "text/plain": [ - " Unnamed: 0 index node2 id node1 \\\n", - "0 0 1 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 \n", - "1 1 2 Q100026 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 \n", - "2 2 3 Q100026 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 \n", - "3 3 4 Q100026 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 \n", - "4 4 5 Q100026 Q2029940-P279-Q100026-ceba4380-0 Q2029940 \n", - "\n", - " label node2_desc \\\n", - "0 P279 1974 fighter aircraft family by General Dynamics \n", - "1 P279 1974 fighter aircraft family by General Dynamics \n", - "2 P279 1974 fighter aircraft family by General Dynamics \n", - "3 P279 1974 fighter aircraft family by General Dynamics \n", - "4 P279 1974 fighter aircraft family by General Dynamics \n", - "\n", - " node1_label node2_label \\\n", - "0 YF-16 F-16 Fighting Falcon \n", - "1 F-16A/B Fighting Falcon F-16 Fighting Falcon \n", - "2 F-16C/D Fighting Falcon F-16 Fighting Falcon \n", - "3 F-16E/F Desert Falcon F-16 Fighting Falcon \n", - "4 F-16 VISTA F-16 Fighting Falcon \n", - "\n", - " node1_desc \\\n", - "0 initial prototype of the F-16 fighter aircraft \n", - "1 initial series of the F-16 fighter aircraft \n", - "2 multirole series of the F-16 fighter aircraft \n", - "3 export strike fighter series of the F-16 fight... \n", - "4 experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "0 initial prototype of the F-16 fighter aircraft \n", - "1 initial series of the F-16 fighter aircraft \n", - "2 multirole series of the F-16 fighter aircraft \n", - "3 export strike fighter series of the F-16 fight... \n", - "4 experimental aircraft \n", - "\n", - " node2_labDesc \\\n", - "0 1974 fighter aircraft family by General Dynamics \n", - "1 1974 fighter aircraft family by General Dynamics \n", - "2 1974 fighter aircraft family by General Dynamics \n", - "3 1974 fighter aircraft family by General Dynamics \n", - "4 1974 fighter aircraft family by General Dynamics \n", - "\n", - " node1_emb \\\n", - "0 [-5.89544833e-01 1.19935878e-01 3.76383096e-... \n", - "1 [-6.08038664e-01 5.00908047e-02 5.60190260e-... \n", - "2 [-5.40582001e-01 1.56212196e-01 5.69522917e-... \n", - "3 [-4.99146163e-01 6.76080063e-02 3.48868877e-... \n", - "4 [-1.47221148e-01 9.54690054e-02 1.05311513e+... \n", - "\n", - " node2_emb bert2SentSim \n", - "0 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.666525 \n", - "1 [ 1.79253891e-01 6.10661447e-01 8.33987534e-... 0.700515 \n", - "2 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.683245 \n", - "3 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.689516 \n", - "4 [ 1.79253638e-01 6.10661507e-01 8.33987653e-... 0.603161 " - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "appropriate-understanding", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = hierDF[['id','node1','label','node2']]" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "conceptual-scene", - "metadata": {}, - "outputs": [], - "source": [ - "hierDFCounts = hierDF.groupby('node2').count()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "criminal-irish", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found P279 counts for 109631 parents from a dataset of size 623368\n" - ] - } - ], - "source": [ - "print(f\"Found P279 counts for {len(hierDFCounts)} parents from a dataset of size {len(hierDF)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "functional-moderator", - "metadata": {}, - "outputs": [], - "source": [ - "hierDFCounts = hierDFCounts['node1'].rename({'node1': 'child_count'})" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "native-kernel", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "node2\n", - "Q100026 7\n", - "Q1000371 1\n", - "Q100047 10\n", - "Q100052008 4\n", - "Q100052938 1\n", - "Name: node1, dtype: int64" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDFCounts.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "international-mercury", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 109631.000000\n", - "mean 5.686056\n", - "std 124.365173\n", - "min 1.000000\n", - "25% 1.000000\n", - "50% 2.000000\n", - "75% 4.000000\n", - "max 39217.000000\n", - "Name: node1, dtype: float64" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDFCounts.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "internal-server", - "metadata": {}, - "outputs": [], - "source": [ - "hierDFCounts.to_csv('../data/Master_P279_dataset/hierDF_direct_P279_counts.csv')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Master P279 Emb Generation.ipynb b/Master P279 Emb Generation.ipynb deleted file mode 100644 index ddee543..0000000 --- a/Master P279 Emb Generation.ipynb +++ /dev/null @@ -1,5540 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "incorrect-routine", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn.metrics.pairwise import euclidean_distances\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.metrics import confusion_matrix\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from tqdm.notebook import tqdm\n", - "from itertools import combinations\n", - "from math import comb\n", - "from sklearn.ensemble import RandomForestClassifier\n", - "import os\n", - "import h5py\n", - "import json\n", - "import gzip" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "moderate-drunk", - "metadata": {}, - "outputs": [], - "source": [ - "# DWD V2 files\n", - "# https://drive.google.com/drive/u/3/folders/1OIZegxxrs_Hv2ZhDsSO-zLVARCR60P01\n", - "# SITELINKS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/sitelinks.en.tsv.gz\"\n", - "CLAIMS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/claims.tsv.gz\"\n", - "LABELS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/labels.en.tsv.gz\"\n", - "DESCRIPTIONS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/descriptions.en.tsv.gz\"" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "exceptional-funeral", - "metadata": {}, - "outputs": [], - "source": [ - "# wikidata-20210215 files\n", - "# https://drive.google.com/drive/u/3/folders/1NGtob1BFQ03sXf4yQyYvP13ly3u1Ul5u\n", - "# SITELINKS_FILE_V1 = \"../source_dataset_files/wikidata-20210215/sitelinks.en.tsv.gz\"" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "compressed-question", - "metadata": {}, - "outputs": [], - "source": [ - "# wikidata-20201208 files\n", - "# https://drive.google.com/drive/u/3/folders/1qbbgjo7pddMdDvQzOSeSaL6lYwj_f5gi\n", - "SITELINKS_FILE_V2 = \"../source_dataset_files/wikidata-20201208/sitelinks.en.tsv.gz\"" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "fiscal-appointment", - "metadata": {}, - "outputs": [], - "source": [ - "# Embedding Related Files\n", - "DBPEDIA_SHORT_ABSTRACTS_TTL = \"../data/evaluation/source_files/short-abstracts_lang=en.ttl\"\n", - "DBPEDIA_SHORT_ABSTRACTS_CSV = \"../data/evaluation/source_files/short-abstracts_lang=en.csv\"\n", - "ABSTRACTS_INTERMEDIATE_FILE = \"../data/embeddings/intermediate_files/abstracts.csv\"\n", - "\n", - "COMPLEX_EMB_SOURCE_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/wikidatadwd.complEx.graph-embeddings.txt\"\n", - "TRANSE_EMB_SOURCE_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/wikidatadwd.transE.graph-embeddings.txt\"\n", - "TEXT_EMB_SOURCE_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/text-embeddings-concatenated.tsv.gz\"\n", - "\n", - "COMPLEX_EMB_FINAL_FILE = \"../data/embeddings/complex_orig_embedding_dict.json\"\n", - "TRANSE_EMB_FINAL_FILE = \"../data/embeddings/transe_orig_embedding_dict.json\"\n", - "TEXT_EMB_FINAL_FILE = \"../data/embeddings/text_7_props_orig_embedding_dict.json\"\n", - "ABS_EMB_FINAL_FILE = \"../data/embeddings/abstract_orig_embedding_dict.json\"\n", - "ABS_FIRST_SENT_EMB_FINAL_FILE = \"../data/embeddings/abstract_first_sent_orig_embedding_dict.json\"\n", - "\n", - "LABELS_EMB_FINAL_FILE = \"../data/embeddings/labels_orig_embedding_dict.json\"\n", - "LABELS_DESC_EMB_FINAL_FILE = \"../data/embeddings/labels_n_desc_orig_embedding_dict.json\"" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "departmental-buddy", - "metadata": {}, - "outputs": [], - "source": [ - "# HAS Embedding Related Files\n", - "A_SOURCE_FILE = \"../source_dataset_files/A_walks_analysis/a_embeddings_10x10,min_count=0.kv\"\n", - "A_OP_FILE = \"../data/embeddings/has_a_orig_embedding_dict.json\"\n", - "\n", - "H_SOURCE_FILE = \"../source_dataset_files/H_walks_analysis/h_embeddings_5x8,min_count=21.kv\"\n", - "H_OP_FILE = \"../data/embeddings/has_h_orig_embedding_dict.json\"\n", - "\n", - "S_SOURCE_FILE = \"../source_dataset_files/S_walks_analysis/s_embeddings_5x10,min_count=0.kv\"\n", - "S_OP_FILE = \"../data/embeddings/has_s_orig_embedding_dict.json\"" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "failing-talent", - "metadata": {}, - "outputs": [], - "source": [ - "WORDSIM_CLASS_SIM_FILE = '../data/embeddings/wordsim_class_sim.csv'\n", - "WORDSIM_JC_SIM_FILE = '../data/embeddings/wordsim_jc_sim.csv'\n", - "WORDSIM_TOP_SIM_FILE = '../data/embeddings/wordsim_top_sim.csv'\n", - "\n", - "WORDSIM_OLD_CLASS_SIM_FILE = '../data/embeddings/wordsim_old_class_sim.csv'\n", - "WORDSIM_OLD_JC_SIM_FILE = '../data/embeddings/wordsim_old_jc_sim.csv'\n", - "WORDSIM_OLD_TOP_SIM_FILE = '../data/embeddings/wordsim_old_top_sim.csv'\n", - "\n", - "DBPEDIA_MC_30_CLASS_SIM_FILE = '../data/embeddings/dbpedia_mc_30_class_sim.csv'\n", - "DBPEDIA_MC_30_JC_SIM_FILE = '../data/embeddings/dbpedia_mc_30_jc_sim.csv'\n", - "DBPEDIA_MC_30_TOP_SIM_FILE = '../data/embeddings/dbpedia_mc_30_top_sim.csv'\n", - "\n", - "DBPEDIA_RG_65_CLASS_SIM_FILE = '../data/embeddings/dbpedia_rg_65_class_sim.csv'\n", - "DBPEDIA_RG_65_JC_SIM_FILE = '../data/embeddings/dbpedia_rg_65_jc_sim.csv'\n", - "DBPEDIA_RG_65_TOP_SIM_FILE = '../data/embeddings/dbpedia_rg_65_top_sim.csv'" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "elementary-desktop", - "metadata": {}, - "outputs": [], - "source": [ - "P279_CHILD_PAR_DISTILBERT_COSSIM_FILE = \"../data/basis/P279_ChildPar.all-distilroberta-v1.csv\"\n", - "WORDSIM_FILE = \"../data/evaluation/wordsim353_with_r3.csv\"\n", - "WORDSIM_OLD_FILE = \"../data/evaluation/wordsim_old.csv\"\n", - "DBPEDIA_MC_30_FINAL_FILE = \"../data/evaluation/mc-30_DBpedia.csv\"\n", - "DBPEDIA_RG_65_FINAL_FILE = \"../data/evaluation/rg-65_DBpedia.csv\"\n" - ] - }, - { - "cell_type": "markdown", - "id": "noble-draft", - "metadata": {}, - "source": [ - "# Common Code" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "broadband-background", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "241698\n" - ] - } - ], - "source": [ - "def get_all_nodes():\n", - " \"\"\"\n", - " This function generates the set of all nodes needed for execution\n", - " \"\"\"\n", - " p279ChildPar = pd.read_csv(P279_CHILD_PAR_DISTILBERT_COSSIM_FILE)\n", - " wordsim_df = pd.read_csv(WORDSIM_FILE)\n", - " dbpedia_mc_30_df = pd.read_csv(DBPEDIA_MC_30_FINAL_FILE)\n", - " dbpedia_rg_65_df = pd.read_csv(DBPEDIA_RG_65_FINAL_FILE)\n", - "# wiki_cs_df = pd.read_csv('../data/wikidata-cs_categorized.csv')\n", - "# concept_net_df = pd.read_csv('../data/kgtk_conceptnet_evaluation.csv')\n", - " p279QnodesList = set(p279ChildPar.node1.to_list() \n", - " + p279ChildPar.node2.to_list()\n", - " + wordsim_df['word1_kg_id'].to_list() \n", - " + wordsim_df['word2_kg_id'].to_list()\n", - " + dbpedia_mc_30_df['word1_kg_id'].to_list()\n", - " + dbpedia_mc_30_df['word2_kg_id'].to_list()\n", - " + dbpedia_rg_65_df['word1_kg_id'].to_list()\n", - " + dbpedia_rg_65_df['word2_kg_id'].to_list())\n", - "# + wiki_cs_df['word1_kg_id'].to_list() \n", - "# + wiki_cs_df['word2_kg_id'].to_list()\n", - "# + concept_net_df['word1_kg_id'].to_list()\n", - "# + concept_net_df['word2_kg_id'].to_list())\n", - " print(len(p279QnodesList))\n", - " return p279QnodesList\n", - "\n", - "allNodes = get_all_nodes()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "parliamentary-documentation", - "metadata": {}, - "outputs": [], - "source": [ - "def fillCoverage(embedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv(WORDSIM_FILE)\n", - " wordSim353AnnotDF_set = set(wordSim353AnnotDF_New['word1_kg_id'].to_list() + wordSim353AnnotDF_New['word2_kg_id'].to_list())\n", - " embed_size = len(embedDict[next(iter(embedDict))])\n", - "# print(embed_size)\n", - " count = 0\n", - " for word in wordSim353AnnotDF_set:\n", - " if word not in embedDict:\n", - " embedDict[word] = np.zeros((embed_size))\n", - " count += 1\n", - " print(f\"Added {count} corrections\")\n", - " return embedDict\n", - "\n", - "def deserializeEmbeddingDict(embedDict):\n", - " for key2 in embedDict.keys():\n", - " embedDict[key2] = np.array(embedDict[key2])\n", - " return embedDict\n", - "\n", - "def serializeEmbeddingDict(embedDict):\n", - " for key2 in embedDict.keys():\n", - " embedDict[key2] = embedDict[key2].tolist() if type(embedDict[key2]) != list else embedDict[key2]\n", - " return embedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "established-brush", - "metadata": {}, - "outputs": [], - "source": [ - "def get_labels(node_set):\n", - " labels_dict = {}\n", - " first_line = True\n", - " with gzip.open(LABELS_FILE, 'r') as labelsFile:\n", - " firstLine = True\n", - " for line in tqdm(labelsFile, total=41845781):\n", - " if firstLine:\n", - " firstLine = False\n", - " continue\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " line[3] = line[3][1:-5]\n", - " qnode, label = line[1], line[3]\n", - " # print(qnode, label)\n", - " if qnode in node_set:\n", - " labels_dict[qnode] = label\n", - " return labels_dict" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "automated-olive", - "metadata": {}, - "outputs": [], - "source": [ - "def get_labels_n_desc(node_set):\n", - " labels_dict = get_labels(node_set)\n", - " first_line = True\n", - " with gzip.open(DESCRIPTIONS_FILE, 'r') as labelsFile:\n", - " firstLine = True\n", - " for line in tqdm(labelsFile, total=34700043):\n", - " if firstLine:\n", - " firstLine = False\n", - " continue\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " line[3] = line[3][1:-5]\n", - " qnode, label = line[1], line[3]\n", - " # print(qnode, label)\n", - " if qnode in node_set:\n", - " if qnode in labels_dict:\n", - " labels_dict[qnode] += ' ' + label\n", - " else:\n", - " raise \"Label not present\"\n", - " return labels_dict" - ] - }, - { - "cell_type": "markdown", - "id": "driven-yeast", - "metadata": {}, - "source": [ - "# Complex + Transe Embeddings Generation" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "sound-spain", - "metadata": {}, - "outputs": [], - "source": [ - "complex_emb_dict = json.load(open(COMPLEX_EMB_FINAL_FILE))" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "correct-gentleman", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "64deda8236084d79bce85a2fd249dec9", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "first_line = True\n", - "complex_emb_dict = {}\n", - "with open(COMPLEX_EMB_SOURCE_FILE) as complex_file:\n", - " for line in tqdm(complex_file, total=53002671):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.strip().split()\n", - " if line[0] in allNodes and line[0] not in complex_emb_dict:\n", - " complex_emb_dict[line[0]] = [float(elem) for elem in line[1:]]" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "proved-buffer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "241698" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(complex_emb_dict)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "hazardous-amazon", - "metadata": {}, - "outputs": [], - "source": [ - "json.dump(complex_emb_dict, open(COMPLEX_EMB_FINAL_FILE, 'w'))" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "industrial-paradise", - "metadata": {}, - "outputs": [], - "source": [ - "transe_emb_dict = json.load(open(TRANSE_EMB_FINAL_FILE))" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "needed-passion", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8636f544aa484f6d9785723a4a96e83b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "241698" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "first_line = True\n", - "transe_emb_dict = {}\n", - "with open(TRANSE_EMB_SOURCE_FILE) as complex_file:\n", - " for line in tqdm(complex_file, total=53002671):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.strip().split()\n", - " if line[0] in allNodes and line[0] not in transe_emb_dict:\n", - " transe_emb_dict[line[0]] = [float(elem) for elem in line[1:]]\n", - "len(transe_emb_dict)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "classified-chick", - "metadata": {}, - "outputs": [], - "source": [ - "json.dump(transe_emb_dict, open(TRANSE_EMB_FINAL_FILE, 'w'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "steady-cliff", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "suffering-zealand", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "brief-timer", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "238889\n" - ] - } - ], - "source": [ - "# p279ChildPar = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_baremetal.csv')\n", - "# print(len(set(p279ChildPar.node1.to_list() \n", - "# + p279ChildPar.node2.to_list())))\n", - "\n", - "# # Load complex, transe embedding files and entity names file\n", - "# compf = h5py.File('../data/complTrans/complEx.h5','r')\n", - "# transf = h5py.File('../data/complTrans/transE.h5','r')\n", - "# ent_names = json.load(open('../data/complTrans/entity_names_all_0.json'))\n", - "# allNodes = get_all_nodes()\n", - "# # json.dump(list(p279QnodesList), open('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_nodes.json', 'w'))\n", - "\n", - "# complexEmb = {qnode: emb for emb, qnode in zip(compf['embeddings'], ent_names) if qnode in allNodes}\n", - "# transeEmb = {qnode: emb for emb, qnode in zip(transf['embeddings'], ent_names) if qnode in allNodes}\n", - "# print(f\"Out of {len(ent_names)} embeddings, retaining {len(transeEmb)} embeddings\")\n", - "\n", - "# def serialize_embedding_dict(embed_dict):\n", - "# for key2 in embed_dict.keys():\n", - "# embed_dict[key2] = embed_dict[key2].tolist() if type(embed_dict[key2]) != list else embed_dict[key2]\n", - "# return embed_dict\n", - "\n", - "# json.dump(serialize_embedding_dict(complexEmb),open('../data/Master_P279_dataset/embeddings/complex_orig_embedding_dict.json','w'))\n", - "# json.dump(serialize_embedding_dict(transeEmb),open('../data/Master_P279_dataset/embeddings/transe_orig_embedding_dict.json','w'))\n", - "# # complexEmb = json.load(open('../data/Master_P279_dataset/embeddings/complex_orig_embedding_dict.json'))\n", - "# # transeEmb = json.load(open('../data/Master_P279_dataset/embeddings/transe_orig_embedding_dict.json'))" - ] - }, - { - "cell_type": "markdown", - "id": "continued-locking", - "metadata": {}, - "source": [ - "# Text Embedding" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "polished-divorce", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6f97b30760e841da87be90aebef9c8cd", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "first_line = True\n", - "text_emb_dict = {}\n", - "with gzip.open(TEXT_EMB_SOURCE_FILE) as file:\n", - " for line in tqdm(file):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " if line[1] == 'text_embedding' and line[0] in allNodes:\n", - " text_emb_dict[line[0]] = [float(elem) for elem in line[2].split(',')]" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "raising-boost", - "metadata": {}, - "outputs": [], - "source": [ - "json.dump(text_emb_dict, open(TEXT_EMB_FINAL_FILE, 'w'))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "beautiful-drill", - "metadata": {}, - "outputs": [], - "source": [ - "text_emb_dict = json.load(open('../data/embeddings/archived/text_7_props_orig_embedding_dict.json.old'))" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "impressed-stations", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a75bc167e9b449f88e4df7ebb19bca77", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/241698 [00:00 ../output/text-embeddings/P279-text-embedding-7-props-missing-qnodes.tsv\"\n", - "os.system(q1 + \" \")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "based-circuit", - "metadata": {}, - "outputs": [], - "source": [ - "text7_missingnodes = pd.read_csv(\"../output/text-embeddings/P279-text-embedding-7-props-missing-qnodes.tsv\", sep='\\t')\n", - "text7_missingnodes = text7_missingnodes[text7_missingnodes.property == 'text_embedding']" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "imposed-series", - "metadata": {}, - "outputs": [], - "source": [ - "text7_missingnodes['value'] = text7_missingnodes['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "compliant-locator", - "metadata": {}, - "outputs": [], - "source": [ - "text7EmbDict = {row['node']: row['value'] for _,row in text7_missingnodes.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "quick-voluntary", - "metadata": {}, - "outputs": [], - "source": [ - "for key in text7EmbDict.keys():\n", - " if key not in text_emb_dict:\n", - " text_emb_dict[key] = text7EmbDict[key]" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "special-smile", - "metadata": {}, - "outputs": [], - "source": [ - "json.dump(text_emb_dict, open(TEXT_EMB_FINAL_FILE, 'w'))" - ] - }, - { - "cell_type": "markdown", - "id": "infectious-mauritius", - "metadata": {}, - "source": [ - "## Old technique follows" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "neural-gibson", - "metadata": {}, - "outputs": [], - "source": [ - "p279ChildPar = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_baremetal.csv')\n", - "p279QnodesList = list(set(p279ChildPar.node1.to_list() + p279ChildPar.node2.to_list()))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "instructional-weather", - "metadata": {}, - "outputs": [], - "source": [ - "missingNodes = allNodes - set(p279ChildPar.node1.to_list() + p279ChildPar.node2.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "specified-clear", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "37038" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(missingNodes)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "conditional-brooks", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6fb2da21d7cf4241a3e52ac132a7c534", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/38 [00:00 ../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - " print(cnt)\n", - " runCommCnt += 1\n", - " os.system(q1 + \" &\")\n", - " if runCommCnt % 15 == 0:\n", - " time.sleep(11*60)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "surprising-burning", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "for cnt in tqdm(range(1,290)):\n", - " if countFileLines(\"../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\") != 4097:\n", - " print(cnt)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bottom-lodge", - "metadata": {}, - "outputs": [], - "source": [ - "import time\n", - "from os.path import exists\n", - "\n", - "# roberta-large-nli-mean-tokens\n", - "runCommCnt = 0\n", - "for cnt in tqdm(range(252,290)):\n", - " if exists(\"../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\") and countFileLines(\"../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\") == 4097:\n", - " continue\n", - " q1 = \"\"\n", - "# if cnt % 10 == 0:\n", - "# q1 += \"sleep 20m; \"\n", - " q1 += \"~/miniconda3/envs/kgtkEnv2/bin/kgtk text-embedding -i ../data/Master_P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - " --model sentence-transformers/all-distilroberta-v1 \\\n", - " --property-labels-file ../data/labels.en.tsv --debug \\\n", - " --isa-properties P31 P279 \\\n", - " --save-embedding-sentence > ../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\"\n", - " print(cnt)\n", - " runCommCnt += 1\n", - " os.system(q1 + \" &\")\n", - " if runCommCnt % 15 == 0:\n", - " time.sleep(13*60)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "damaged-browse", - "metadata": {}, - "outputs": [], - "source": [ - "p279QnodesList = set(json.load(open('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_nodes.json')))" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "collective-april", - "metadata": {}, - "outputs": [], - "source": [ - "# temp = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-1.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "decent-yorkshire", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99738027text_embedding0.74755263,1.6350263,-0.73952675,1.0463063,-0....
1Q99738027embedding_sentencenight shift, work shift during nighttime hours...
2Q99228502text_embedding0.25261465,0.06285462,0.029052094,0.50796187,0...
3Q99228502embedding_sentenceavenue, thoroughfare named \\\"avenue\\\" is thoro...
4Q98970128text_embedding0.11887096,0.8598291,0.4446009,-0.5038472,-0.9...
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q99738027 text_embedding \n", - "1 Q99738027 embedding_sentence \n", - "2 Q99228502 text_embedding \n", - "3 Q99228502 embedding_sentence \n", - "4 Q98970128 text_embedding \n", - "\n", - " value \n", - "0 0.74755263,1.6350263,-0.73952675,1.0463063,-0.... \n", - "1 night shift, work shift during nighttime hours... \n", - "2 0.25261465,0.06285462,0.029052094,0.50796187,0... \n", - "3 avenue, thoroughfare named \\\"avenue\\\" is thoro... \n", - "4 0.11887096,0.8598291,0.4446009,-0.5038472,-0.9... " - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# temp.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "satisfactory-speech", - "metadata": {}, - "outputs": [], - "source": [ - "text2EmbArr = []\n", - "for i in tqdm(range(1, 290)):\n", - " if not(checkIfFileContainsLines('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-'+str(i)+'.tsv')):\n", - " continue\n", - " temp = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-'+str(i)+'.tsv', sep='\\t')\n", - " temp = temp[temp.property == 'text_embedding']\n", - " text2EmbArr.append(temp)\n", - "text2Emb = pd.concat(text2EmbArr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "unavailable-competition", - "metadata": {}, - "outputs": [], - "source": [ - "text2Emb.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "concerned-april", - "metadata": {}, - "outputs": [], - "source": [ - "text7EmbArr = []\n", - "for i in tqdm(range(1, 290)):\n", - " if not(checkIfFileContainsLines('../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-'+str(i)+'.tsv')):\n", - " continue\n", - " temp = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-'+str(i)+'.tsv', sep='\\t')\n", - " temp = temp[temp.property == 'text_embedding']\n", - " text7EmbArr.append(temp)\n", - "text7Emb = pd.concat(text7EmbArr)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "australian-enforcement", - "metadata": {}, - "outputs": [], - "source": [ - "text2Emb = text2Emb[text2Emb.node.apply(lambda p: p in allNodes)]\n", - "text7Emb = text7Emb[text7Emb.node.apply(lambda p: p in allNodes)]" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "closed-treatment", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "We have 2prop text embeddings for 278467 nodes and 7prop for 277587 nodes\n" - ] - } - ], - "source": [ - "print(f\"We have 2prop text embeddings for {len(text2Emb)} nodes and 7prop for {len(text7Emb)} nodes\")" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "duplicate-agency", - "metadata": {}, - "outputs": [], - "source": [ - "text2Emb['value'] = text2Emb['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "text7Emb['value'] = text7Emb['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "framed-third", - "metadata": {}, - "outputs": [], - "source": [ - "text2EmbDict = {row['node']: row['value'] for _,row in text2Emb.iterrows()}\n", - "text7EmbDict = {row['node']: row['value'] for _,row in text7Emb.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "peaceful-andrew", - "metadata": {}, - "outputs": [], - "source": [ - "json.dump(text2EmbDict, open('../data/Master_P279_dataset/embeddings/text_2_props_orig_embedding_dict.json', 'w'))\n", - "json.dump(text7EmbDict, open('../data/Master_P279_dataset/embeddings/text_7_props_orig_embedding_dict.json', 'w'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "considered-river", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sustained-playback", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "requested-state", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "suited-going", - "metadata": {}, - "source": [ - "# Abstract Embeddings Generation\n", - "\n", - "Downloaded short abstracts file from [DBPedia Short Abstracts - 2020.07.01](https://downloads.dbpedia.org/repo/dbpedia/text/short-abstracts/2020.07.01/short-abstracts_lang=en.ttl.bz2)\n", - "\n", - "Then, we extract the abstracts file from the bz2 file using: `bzip2 -d short-abstracts_lang=en.ttl.bz2`" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "former-editor", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d0038713a1604ccb9c2e5499615fbc43", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# cnt = 0\n", - "# p1s = []\n", - "# p11s = []\n", - "# p2s = []\n", - "# lines = []\n", - "# with open(DBPEDIA_SHORT_ABSTRACTS_TTL, 'r', encoding='utf-8') as f:\n", - "# for line in tqdm(f):\n", - "# p1 = line[:line.find(\" \")]\n", - "# p11 = p1[len(\"\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...P_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategoryembedding_cos_simResp_code
0Arafatpeace83D4NaN3U4...NaN3.60.5477232.12507.8750Q34211Q454U3.982734<Response [200]>
1Arafatterror93D4NaN3U4...NaN3.60.5477233.06256.9375Q34211Q13648784U3.969884<Response [200]>
2FBIfingerprint1093D4NaN4NaN3...NaN3.60.5477234.06255.9375Q8333Q178022U4.000000<Response [200]>
3FBIinvestigation1103U3U3U3...u3.00.0000005.06254.9375Q8333Q21004260M3.951077<Response [200]>
4HarvardYale1372S3S2S2...s2.20.4472144.87505.1250Q13371Q49112M1.264601<Response [200]>
\n", - "

5 rows × 22 columns

\n", - "" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... P_Dim Avg Stdev H_orig H_reversed word1_kg_id word2_kg_id \\\n", - "0 ... NaN 3.6 0.547723 2.1250 7.8750 Q34211 Q454 \n", - "1 ... NaN 3.6 0.547723 3.0625 6.9375 Q34211 Q13648784 \n", - "2 ... NaN 3.6 0.547723 4.0625 5.9375 Q8333 Q178022 \n", - "3 ... u 3.0 0.000000 5.0625 4.9375 Q8333 Q21004260 \n", - "4 ... s 2.2 0.447214 4.8750 5.1250 Q13371 Q49112 \n", - "\n", - " category embedding_cos_sim Resp_code \n", - "0 U 3.982734 \n", - "1 U 3.969884 \n", - "2 U 4.000000 \n", - "3 M 3.951077 \n", - "4 M 1.264601 \n", - "\n", - "[5 rows x 22 columns]" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "word_sim_class_sim_df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "operational-survival", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "48386a6eaa0745e4a9eebbed1e61c72c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/349 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
embeddingcountCoverage Percentage
0complex23844899.815395
1transe23844899.815395
2text2238889100.000000
3text7238889100.000000
4abstract10582844.300072
5abstractFirstSent10582844.300072
\n", - "" - ], - "text/plain": [ - " embedding count Coverage Percentage\n", - "0 complex 238448 99.815395\n", - "1 transe 238448 99.815395\n", - "2 text2 238889 100.000000\n", - "3 text7 238889 100.000000\n", - "4 abstract 105828 44.300072\n", - "5 abstractFirstSent 105828 44.300072" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(summArr, columns=['embedding', 'count', 'Coverage Percentage'])" - ] - }, - { - "cell_type": "markdown", - "id": "changing-strategy", - "metadata": {}, - "source": [ - "# Embeddings correction" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "purple-raising", - "metadata": {}, - "outputs": [], - "source": [ - "masterEmbedDictMaster = {}\n", - "subsetEmbedDictMaster = {}" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "round-product", - "metadata": {}, - "outputs": [], - "source": [ - "masterEmbedKeys = ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent']\n", - "for key1 in masterEmbedKeys:\n", - " masterEmbedDictMaster[key1] = json.load(open('../data/Master_P279_dataset/embeddings/'+key1+'_orig_embedding_dict.json'))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "metallic-insulin", - "metadata": {}, - "outputs": [], - "source": [ - "subsetEmbedKeys = ['text_7props', 'text_2props', 'complex', 'transe', 'abstract', 'abstract_first_sent']\n", - "for key1 in subsetEmbedKeys:\n", - " subsetEmbedDictMaster[key1] = json.load(open('../data/orig_embeddings/'+key1+'_original_embeddings_dict.json'))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "assigned-parameter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "olympic-yemen", - "metadata": {}, - "outputs": [], - "source": [ - "wordsim_pairs = {(row['word1_kg_id'], row['word2_kg_id']) for _, row in wordSim353AnnotDF_New.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "welcome-disorder", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pair Coverage by text_7props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by text_2props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by complex embeddings created for 19k retrofitting: 342\n", - "Pair Coverage by transe embeddings created for 19k retrofitting: 342\n", - "Pair Coverage by abstract embeddings created for 19k retrofitting: 343\n", - "Pair Coverage by abstract_first_sent embeddings created for 19k retrofitting: 343\n" - ] - } - ], - "source": [ - "for key1 in subsetEmbedKeys:\n", - " print(f\"Pair Coverage by {key1} embeddings created for 19k retrofitting: {sum([row[0] in subsetEmbedDictMaster[key1] and row[1] in subsetEmbedDictMaster[key1] for row in wordsim_pairs])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "northern-psychiatry", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pair Coverage by old text_7_props embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old text_2_props embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old complex embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old transe embeddings created for 19k retrofitting: 278\n", - "Pair Coverage by old abstract embeddings created for 19k retrofitting: 183\n", - "Pair Coverage by old abstract_first_sent embeddings created for 19k retrofitting: 183\n" - ] - } - ], - "source": [ - "for key1 in masterEmbedKeys:\n", - " print(f\"Pair Coverage by old {key1} embeddings created for 19k retrofitting: {sum([row[0] in masterEmbedDictMaster[key1] and row[1] in masterEmbedDictMaster[key1] for row in wordsim_pairs])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "contrary-casino", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_set = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "alleged-polish", - "metadata": {}, - "outputs": [], - "source": [ - "from collections import defaultdict\n", - "masterEmbCorrections = defaultdict(list)\n", - "for node in wordSim353AnnotDF_New_set:\n", - " for i in range(len(masterEmbedKeys)):\n", - " if node not in masterEmbedDictMaster[masterEmbedKeys[i]] and node in wordSim353AnnotDF_New_set:\n", - " masterEmbCorrections[masterEmbedKeys[i]].append(node)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "periodic-buffer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['abstract', 'abstract_first_sent', 'text_7_props', 'text_2_props', 'complex', 'transe'])" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "masterEmbCorrections.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "awful-signal", - "metadata": {}, - "source": [ - "## Complex, Transe" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "exceptional-acting", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# correctedComplexEmb = {}\n", - "# correctedTranseEmb = {}\n", - "# for wordID in masterEmbCorrections['complex']:\n", - "# try:\n", - "# resp = requests.get(\"http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID).json()['_source']\n", - "# correctedComplexEmb[wordID] = [float(p) for p in resp['graph_embedding_complex'].split(',')]\n", - "# correctedTranseEmb[wordID] = [float(p) for p in resp['graph_embeddings_transe'].split(',')]\n", - "# except:\n", - "# print(\"Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "assigned-journey", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "51850ec9544547f293820bd9e94091f4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/42575933 [00:00 ../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-corrections.tsv\"\n", - "# print(q1)\n", - "os.system(q1 + \" &\")" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "cooked-vinyl", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "32512" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "q1 = \"kgtk text-embedding -i ../data/Master_P279_dataset/output/wikidataos.for.text-embedding-ext-corrections.tsv \\\n", - " --model roberta-large-nli-mean-tokens \\\n", - " --property-labels-file ../data/labels.en.tsv --debug \\\n", - " --isa-properties P31 P279 \\\n", - " --save-embedding-sentence > ../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-corrections.tsv\"\n", - "# print(q1)\n", - "os.system(q1 + \" &\")" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "static-failure", - "metadata": {}, - "outputs": [], - "source": [ - "corrected7Emb = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-7-props-part-corrections.tsv', sep='\\t')\n", - "corrected2Emb = pd.read_csv('../data/Master_P279_dataset/output/P279-text-embedding-2-props-part-corrections.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "spare-flexibility", - "metadata": {}, - "outputs": [], - "source": [ - "corrected7Emb = corrected7Emb[corrected7Emb.property == 'text_embedding']\n", - "corrected7Emb['value'] = corrected7Emb.value.apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "\n", - "corrected2Emb = corrected2Emb[corrected2Emb.property == 'text_embedding']\n", - "corrected2Emb['value'] = corrected2Emb.value.apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "id": "minute-oakland", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in corrected7Emb.iterrows():\n", - " masterEmbedDictMaster['text_7_props'][row['node']] = row['value']\n", - "for _, row in corrected2Emb.iterrows():\n", - " masterEmbedDictMaster['text_2_props'][row['node']] = row['value']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "documentary-fluid", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "analyzed-naples", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "psychological-brighton", - "metadata": {}, - "source": [ - "## Abstract" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "meaning-spanking", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DBPedia dataset has 5732949 records with unique 5732947 index values\n", - "There are 8472828 sitelinks present in the dataset corresponding to 8472828 unique node1s (Qxxx), 8401883 unique labels (text)\n" - ] - } - ], - "source": [ - "df1 = pd.read_csv(\"../data/short-abstracts_lang=en.csv\", skiprows=1, skipfooter=1, header=None, engine='python')\n", - "df1.columns = ['ignore', 'node1', 'url', 'ignore2', 'abstract']\n", - "df1 = df1.set_index('node1')\n", - "df1[df1.url.apply(lambda p: 'http://dbpedia.org/resource' not in p)]\n", - "print(f\"DBPedia dataset has {len(df1)} records with unique {df1.index.nunique()} index values\")\n", - "sitelinksDF = pd.read_csv(\"../data/sitelinks.en.tsv.gz\", sep='\\t')\n", - "sitelinksDF['trimmedNode2'] = sitelinksDF.node2.apply(lambda p: p.split(\"/\")[-1] if p.split(\"/\")[-1] != '' else p.split(\"/\")[-2])\n", - "sitelinksDF1 = sitelinksDF[sitelinksDF.label == 'wikipedia_sitelink']\n", - "sitelinksDF2 = sitelinksDF1.set_index('trimmedNode2')\n", - "print(f\"There are {len(sitelinksDF2)} sitelinks present in the dataset corresponding to {sitelinksDF2.node1.nunique()} unique node1s (Qxxx), {sitelinksDF2.index.nunique()} unique labels (text)\")\n", - "sitelinksDF2.loc[sitelinksDF2[sitelinksDF2.index.duplicated()].index]\n", - "masterEmbCorrections_abs_set = set(masterEmbCorrections['abstract'])\n", - "sitelinksDF2 = sitelinksDF2[sitelinksDF2.node1.apply(lambda p: p in masterEmbCorrections_abs_set)]" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "offensive-enclosure", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')\n", - "labelsDF = labelsDF[labelsDF.node1.apply(lambda p: p in masterEmbCorrections_abs_set)]\n", - "labelsDict = {row['node1']: row['node2'] for _, row in labelsDF.iterrows()}\n", - "descriptionsDF = pd.read_csv('../../wd-correctness/gdrive-kgtk-dump-2020-12-07/descriptions.en.tsv.gz', compression='gzip', sep='\\t')\n", - "descriptionsDF = descriptionsDF[descriptionsDF.node1.apply(lambda p: p in masterEmbCorrections_abs_set)]\n", - "descDict = {row['node1']: row['node2'] for _, row in descriptionsDF.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "better-tuner", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "From 58 Qnodes, there are 16 sitelink Qnodes which do not have a short abstract i.e 42 have a short abstract\n" - ] - } - ], - "source": [ - "sdf_set = set(sitelinksDF2.index.to_list())\n", - "df1 = df1[df1.index.map(lambda p: p in sdf_set)]\n", - "abstractsDF2 = sitelinksDF2.join(df1).reset_index()\n", - "print(f\"From {len(abstractsDF2)} Qnodes, there are {abstractsDF2.ignore2.isna().sum()} sitelink Qnodes which do not have a short abstract i.e {len(abstractsDF2) - abstractsDF2.ignore2.isna().sum()} have a short abstract\")\n", - "# abstractsDF2 = abstractsDF2[~abstractsDF2.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "invalid-fiction", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2['node1_label'] = abstractsDF2.node1.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else \"\")\n", - "abstractsDF2['node1_desc'] = abstractsDF2.node1.apply(lambda p: descDict[p][1:-4] if p in descDict else \"\")\n", - "def combineAbsLabDesc(row, parameter):\n", - " if not(pd.isna(row[parameter])) and row[parameter] != 'nan' and row[parameter] != \"\":\n", - " return row[parameter]\n", - " elif row['node1_label'] == \"\" and row['node1_desc'] == \"\":\n", - " return None\n", - " else:\n", - " return row['node1_label'] + ' ' + row['node1_desc']" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "opened-drink", - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.tokenize import sent_tokenize\n", - "abstractsDF2['abstract_firstSent'] = abstractsDF2.abstract.apply(lambda p: sent_tokenize(str(p))[0] if p else None)\n", - "abstractsDF2 = abstractsDF2.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "affected-reproduction", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2['abstract'] = abstractsDF2.apply(combineAbsLabDesc, axis=1, args=('abstract',))\n", - "abstractsDF2['abstract_firstSent'] = abstractsDF2.apply(combineAbsLabDesc, axis=1, args=('abstract_firstSent',))" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "actual-communication", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "58" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(abstractsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "quantitative-tumor", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2 = abstractsDF2[~abstractsDF2.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "turned-retail", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "58" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(abstractsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "heard-freedom", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF2 = abstractsDF2.drop(columns=['index']).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "forty-southeast", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
level_0indextrimmedNode2idnode1labelnode2ignoreurlignore2abstractnode1_labelnode1_descabstract_firstSent
000LuxuriesQ10953913-wikipedia_sitelink-538fe3-0Q10953913wikipedia_sitelinkhttp://en.wikipedia.org/wiki/LuxuriesNaNNaNNaNluxuryBehavior, expenses or equipment that far...luxuryBehavior, expenses or equipment that far excee...nan
111PotatoQ10998-wikipedia_sitelink-56b85c-0Q10998wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Potato10709.0<http://dbpedia.org/resource/Potato><http://www.w3.org/2000/01/rdf-schema#comment>The potato is a root vegetable native to the A...potatospecies of plantThe potato is a root vegetable native to the A...
222MarsQ111-wikipedia_sitelink-9ff296-0Q111wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Mars1803088.0<http://dbpedia.org/resource/Mars><http://www.w3.org/2000/01/rdf-schema#comment>Mars is the fourth planet from the Sun and the...Marsfourth planet from the SunMars is the fourth planet from the Sun and the...
333DawnQ11326182-wikipedia_sitelink-ae2918-0Q11326182wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Dawn97544.0<http://dbpedia.org/resource/Dawn><http://www.w3.org/2000/01/rdf-schema#comment>Dawn is the time that marks the beginning of t...dawntime that marks the beginning of the twilight ...Dawn is the time that marks the beginning of t...
444Change_(philosophy)Q1150070-wikipedia_sitelink-81cf5f-0Q1150070wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Change_(philosophy)NaNNaNNaNchangeprocess, event or action that deviates f...changeprocess, event or action that deviates from th...nan
\n", - "
" - ], - "text/plain": [ - " level_0 index trimmedNode2 id \\\n", - "0 0 0 Luxuries Q10953913-wikipedia_sitelink-538fe3-0 \n", - "1 1 1 Potato Q10998-wikipedia_sitelink-56b85c-0 \n", - "2 2 2 Mars Q111-wikipedia_sitelink-9ff296-0 \n", - "3 3 3 Dawn Q11326182-wikipedia_sitelink-ae2918-0 \n", - "4 4 4 Change_(philosophy) Q1150070-wikipedia_sitelink-81cf5f-0 \n", - "\n", - " node1 label \\\n", - "0 Q10953913 wikipedia_sitelink \n", - "1 Q10998 wikipedia_sitelink \n", - "2 Q111 wikipedia_sitelink \n", - "3 Q11326182 wikipedia_sitelink \n", - "4 Q1150070 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "0 http://en.wikipedia.org/wiki/Luxuries NaN \n", - "1 http://en.wikipedia.org/wiki/Potato 10709.0 \n", - "2 http://en.wikipedia.org/wiki/Mars 1803088.0 \n", - "3 http://en.wikipedia.org/wiki/Dawn 97544.0 \n", - "4 http://en.wikipedia.org/wiki/Change_(philosophy) NaN \n", - "\n", - " url \\\n", - "0 NaN \n", - "1 \n", - "2 \n", - "3 \n", - "4 NaN \n", - "\n", - " ignore2 \\\n", - "0 NaN \n", - "1 \n", - "2 \n", - "3 \n", - "4 NaN \n", - "\n", - " abstract node1_label \\\n", - "0 luxuryBehavior, expenses or equipment that far... luxury \n", - "1 The potato is a root vegetable native to the A... potato \n", - "2 Mars is the fourth planet from the Sun and the... Mars \n", - "3 Dawn is the time that marks the beginning of t... dawn \n", - "4 changeprocess, event or action that deviates f... change \n", - "\n", - " node1_desc \\\n", - "0 Behavior, expenses or equipment that far excee... \n", - "1 species of plant \n", - "2 fourth planet from the Sun \n", - "3 time that marks the beginning of the twilight ... \n", - "4 process, event or action that deviates from th... \n", - "\n", - " abstract_firstSent \n", - "0 nan \n", - "1 The potato is a root vegetable native to the A... \n", - "2 Mars is the fourth planet from the Sun and the... \n", - "3 Dawn is the time that marks the beginning of t... \n", - "4 nan " - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "id": "multiple-offer", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getIndSentEmbeddings(sent, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode([sent])\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "id": "sustainable-breakdown", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.6419482231140137 s\n", - "0.5260367393493652 s\n" - ] - } - ], - "source": [ - "abstractsDF2['abs_emb'] = pd.Series(list(getSentEmbeddings(abstractsDF2.abstract, 'bert-base-nli-mean-tokens')))\n", - "abstractsDF2['abs_firstSent_emb'] = pd.Series(list(getSentEmbeddings(abstractsDF2.abstract_firstSent, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "usual-selling", - "metadata": {}, - "outputs": [], - "source": [ - "for _, row in abstractsDF2.iterrows():\n", - " masterEmbedDictMaster['abstract'][row['node1']] = row['abs_emb']\n", - " masterEmbedDictMaster['abstract_first_sent'][row['node1']] = row['abs_firstSent_emb']" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "id": "promising-owner", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.37706875801086426 s\n", - "0.3001420497894287 s\n", - "0.370746374130249 s\n", - "0.6896324157714844 s\n", - "0.33779358863830566 s\n", - "0.3965473175048828 s\n", - "0.3200962543487549 s\n", - "0.3489806652069092 s\n", - "0.3413431644439697 s\n", - "0.32114505767822266 s\n", - "0.3811838626861572 s\n", - "0.34630370140075684 s\n", - "0.37790727615356445 s\n", - "0.26860570907592773 s\n", - "0.3601953983306885 s\n", - "0.3713240623474121 s\n", - "0.34137582778930664 s\n", - "0.33736181259155273 s\n", - "0.37023448944091797 s\n", - "0.31382036209106445 s\n", - "0.35136938095092773 s\n", - "0.37309718132019043 s\n", - "0.33543896675109863 s\n", - "0.38199710845947266 s\n", - "0.3740067481994629 s\n", - "0.3278031349182129 s\n", - "0.32283997535705566 s\n", - "0.34000563621520996 s\n", - "0.31502628326416016 s\n", - "0.34996771812438965 s\n", - "0.3871273994445801 s\n", - "0.3487060070037842 s\n", - "0.35172486305236816 s\n", - "0.3280646800994873 s\n", - "0.3519773483276367 s\n", - "0.3354451656341553 s\n", - "0.3633551597595215 s\n", - "0.3226644992828369 s\n", - "0.33882975578308105 s\n", - "0.36072254180908203 s\n", - "0.3833494186401367 s\n", - "0.2929043769836426 s\n", - "0.32875680923461914 s\n", - "0.36334872245788574 s\n", - "0.34148168563842773 s\n", - "0.3569769859313965 s\n", - "0.37468576431274414 s\n", - "0.399524450302124 s\n", - "0.3516504764556885 s\n", - "0.333402156829834 s\n", - "0.3851203918457031 s\n", - "0.34867238998413086 s\n", - "0.3607771396636963 s\n", - "0.38669753074645996 s\n", - "0.33347272872924805 s\n", - "0.36278390884399414 s\n", - "0.3602781295776367 s\n", - "0.3322322368621826 s\n", - "0.36807823181152344 s\n", - "0.3407411575317383 s\n", - "0.3837134838104248 s\n", - "0.38958096504211426 s\n", - "0.3332521915435791 s\n", - "0.3331124782562256 s\n", - "0.35001134872436523 s\n", - "0.32433485984802246 s\n", - "0.36315059661865234 s\n", - "0.34323906898498535 s\n", - "0.3112339973449707 s\n", - "0.30588483810424805 s\n", - "0.30704236030578613 s\n", - "0.31201720237731934 s\n" - ] - } - ], - "source": [ - "for node in masterEmbCorrections_abs_set:\n", - " if node not in masterEmbedDictMaster['abstract']:\n", - " if node in labelsDict and node in descDict:\n", - " masterEmbedDictMaster['abstract'][node] = getIndSentEmbeddings(labelsDict[node] + ' ' + descDict[node], 'bert-base-nli-mean-tokens')[0]\n", - " elif node in labelsDict:\n", - " masterEmbedDictMaster['abstract'][node] = getIndSentEmbeddings(labelsDict[node], 'bert-base-nli-mean-tokens')[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "id": "acquired-manitoba", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.32213783264160156 s\n", - "0.357776403427124 s\n", - "0.37949395179748535 s\n", - "0.35210466384887695 s\n", - "0.28103041648864746 s\n", - "0.3626406192779541 s\n", - "0.35109710693359375 s\n", - "0.34203338623046875 s\n", - "0.32386112213134766 s\n", - "0.3354361057281494 s\n", - "0.3063056468963623 s\n", - "0.3441202640533447 s\n", - "0.32869935035705566 s\n", - "0.42442989349365234 s\n", - "0.37239527702331543 s\n", - "0.38650059700012207 s\n", - "0.3191685676574707 s\n", - "0.3609733581542969 s\n", - "0.3115823268890381 s\n", - "0.36015963554382324 s\n", - "0.3338603973388672 s\n", - "0.3487727642059326 s\n", - "0.3250617980957031 s\n", - "0.35145044326782227 s\n", - "0.33944034576416016 s\n", - "0.31502413749694824 s\n", - "0.3611795902252197 s\n", - "0.35285043716430664 s\n", - "0.3575010299682617 s\n", - "0.304781436920166 s\n", - "0.4003562927246094 s\n", - "0.3315858840942383 s\n", - "0.36008763313293457 s\n", - "0.36187100410461426 s\n", - "0.32981252670288086 s\n", - "0.3378865718841553 s\n", - "0.31662964820861816 s\n", - "0.32143092155456543 s\n", - "0.3152732849121094 s\n", - "0.38222813606262207 s\n", - "0.3846759796142578 s\n", - "0.33153700828552246 s\n", - "0.37013936042785645 s\n", - "0.33272790908813477 s\n", - "0.29526567459106445 s\n", - "0.3218040466308594 s\n", - "0.3795340061187744 s\n", - "0.3576061725616455 s\n", - "0.35764193534851074 s\n", - "0.36867713928222656 s\n", - "0.3807237148284912 s\n", - "0.33266758918762207 s\n", - "0.33878159523010254 s\n", - "0.38289546966552734 s\n", - "0.38695788383483887 s\n", - "0.33074188232421875 s\n", - "0.32749414443969727 s\n", - "0.33860039710998535 s\n", - "0.36585235595703125 s\n", - "0.33011841773986816 s\n", - "0.3293156623840332 s\n", - "0.3491702079772949 s\n", - "0.3720529079437256 s\n", - "0.3078622817993164 s\n", - "0.3844125270843506 s\n", - "0.32468104362487793 s\n", - "0.3186354637145996 s\n", - "0.3438723087310791 s\n", - "0.36643028259277344 s\n", - "0.34279680252075195 s\n", - "0.3625810146331787 s\n", - "0.35865354537963867 s\n", - "0.3503103256225586 s\n", - "0.37160682678222656 s\n", - "0.3268110752105713 s\n", - "0.2564544677734375 s\n", - "0.37343525886535645 s\n", - "0.33298277854919434 s\n" - ] - } - ], - "source": [ - "for node in masterEmbCorrections_abs_set:\n", - " if node not in masterEmbedDictMaster['abstract_first_sent']:\n", - " if node in labelsDict and node in descDict:\n", - " masterEmbedDictMaster['abstract_first_sent'][node] = getIndSentEmbeddings(labelsDict[node] + ' ' + descDict[node], 'bert-base-nli-mean-tokens')[0]\n", - " elif node in labelsDict:\n", - " masterEmbedDictMaster['abstract_first_sent'][node] = getIndSentEmbeddings(labelsDict[node], 'bert-base-nli-mean-tokens')[0]" - ] - }, - { - "cell_type": "markdown", - "id": "veterinary-thailand", - "metadata": {}, - "source": [ - "## Updated coverage details" - ] - }, - { - "cell_type": "code", - "execution_count": 145, - "id": "intimate-campus", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pair Coverage by new text_7_props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by new text_2_props embeddings created for 19k retrofitting: 325\n", - "Pair Coverage by new complex embeddings created for 19k retrofitting: 343\n", - "Pair Coverage by new transe embeddings created for 19k retrofitting: 343\n", - "Pair Coverage by new abstract embeddings created for 19k retrofitting: 339\n", - "Pair Coverage by new abstract_first_sent embeddings created for 19k retrofitting: 339\n" - ] - } - ], - "source": [ - "for key1 in masterEmbedKeys:\n", - " print(f\"Pair Coverage by new {key1} embeddings created for 19k retrofitting: {sum([row[0] in masterEmbedDictMaster[key1] and row[1] in masterEmbedDictMaster[key1] for row in wordsim_pairs])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "lovely-token", - "metadata": {}, - "outputs": [], - "source": [ - "for key1 in masterEmbedDictMaster.keys():\n", - " for key2 in masterEmbedDictMaster[key1].keys():\n", - " if type(masterEmbedDictMaster[key1][key2]) != list:\n", - " masterEmbedDictMaster[key1][key2] = masterEmbedDictMaster[key1][key2].tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "exact-surfing", - "metadata": {}, - "outputs": [], - "source": [ - "for key1 in ['complex', 'transe']:\n", - " json.dump(masterEmbedDictMaster[key1], open('../data/Master_P279_dataset/embeddings/'+key1+'_orig_embedding_dict_updated.json', 'w'))" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "behavioral-spain", - "metadata": {}, - "outputs": [], - "source": [ - "def countOverlap(source, target):\n", - " cnt = 0\n", - " for key1 in source:\n", - " if key1 in target:\n", - " cnt += 1\n", - " return cnt\n", - "p279QnodesList = set(json.load(open('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_nodes.json')))" - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "id": "hawaiian-brain", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
embeddingtotal countoverlap countCoverage Percentage
0text_7_props238930238889100.000000
1text_2_props238930238889100.000000
2complex23850023844899.815395
3transe23850023844899.815395
4abstract10596410591644.336910
5abstract_first_sent10596410591644.336910
\n", - "
" - ], - "text/plain": [ - " embedding total count overlap count Coverage Percentage\n", - "0 text_7_props 238930 238889 100.000000\n", - "1 text_2_props 238930 238889 100.000000\n", - "2 complex 238500 238448 99.815395\n", - "3 transe 238500 238448 99.815395\n", - "4 abstract 105964 105916 44.336910\n", - "5 abstract_first_sent 105964 105916 44.336910" - ] - }, - "execution_count": 147, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summArr = []\n", - "for key1 in masterEmbedDictMaster:\n", - " cnt = countOverlap(masterEmbedDictMaster[key1], p279QnodesList)\n", - " summArr.append([key1, len(masterEmbedDictMaster[key1]), cnt, cnt / len(p279QnodesList) * 100])\n", - "pd.DataFrame(summArr, columns=['embedding', 'total count', 'overlap count', 'Coverage Percentage'])" - ] - }, - { - "cell_type": "markdown", - "id": "greater-namibia", - "metadata": {}, - "source": [ - "# Concatenated Embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "fifth-associate", - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "embedDictMaster = {}\n", - "for key1 in ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent']:\n", - " embedDictMaster[key1] = json.load(open('../data/Master_P279_dataset/embeddings/'+key1+'_orig_embedding_dict_updated.json'))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "egyptian-sentence", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "text_7_props : 1024\n", - "text_2_props : 1024\n", - "complex : 200\n", - "transe : 200\n", - "abstract : 768\n", - "abstract_first_sent : 768\n" - ] - } - ], - "source": [ - "def determineEmbeddingLengths(embedDictMaster):\n", - " for key in embedDictMaster.keys():\n", - " embed_size = len(next(iter(embedDictMaster[key].values())))\n", - " print(key,\": \",embed_size)\n", - "determineEmbeddingLengths(embedDictMaster)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "removable-point", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Added 11 corrections\n", - "Added 11 corrections\n", - "Added 0 corrections\n", - "Added 0 corrections\n", - "Added 4 corrections\n", - "Added 4 corrections\n" - ] - } - ], - "source": [ - "for key1 in embedDictMaster.keys():\n", - " embedDictMaster[key1] = deserializeEmbeddingDict(embedDictMaster[key1])\n", - "# Fill Coverage of embedding dictionaries\n", - "for key1 in embedDictMaster.keys():\n", - " embedDictMaster[key1] = fillCoverage(embedDictMaster[key1])" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "productive-indiana", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "text_7_props 238941\n", - "text_2_props 238941\n", - "complex 238941\n", - "transe 238941\n", - "abstract 238941\n", - "abstract_first_sent 238941\n" - ] - } - ], - "source": [ - "for key1 in embedDictMaster.keys():\n", - " print(key1, len(next(iter(embedDictMaster.values()))))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "mechanical-retro", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ready-financing", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "prime-hometown", - "metadata": {}, - "source": [ - "# Retrofitting sample" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "tight-civilization", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchNeighbours(df):\n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row.bert2SentSim))\n", - " \n", - " if row.node2 not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row.bert2SentSim))\n", - " print(max([len(neigh) for neigh in neighboursDict.values()]))\n", - " return neighboursDict" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "exciting-circle", - "metadata": {}, - "outputs": [], - "source": [ - "def retrofit(embedDict, neighDict, weightCase, weightAssignment=False):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - "# assert len(neighbs) == 1\n", - " if weightAssignment:\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " else:\n", - " sumOfSims = sum([1 for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] for neighb in neighbs])\n", - " \n", - " if weightCase == 1:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sumOfEmbs) / ((len(neighbs)) + sumOfSims)\n", - " elif weightCase == 2:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " elif weightCase == 0.5:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sumOfEmbs) / ((len(neighbs))**0.5 + sumOfSims)\n", - " else:\n", - " raise\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "hollywood-prisoner", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import classification_report\n", - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - "LABELS = ['I','U','M']\n", - "def fetchCorrelationResults(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "# print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - "# wordSim353AnnotDF_New2 = wordSim353AnnotDF_New\n", - " wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - " wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - " responseDict = {}\n", - " responseDict['wordSimMissingSet'] = wordSimMissingSet\n", - " responseDict['coveredPairs'] = len(wordSim353AnnotDF_New2)\n", - " responseDict['totalPairs'] = len(wordSim353AnnotDF_New)\n", - " \n", - "# wordSimMissingSet\n", - "# print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textOld'] == -1, 'textOld'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textOld'] != -1]['textOld'].mean()\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textNew'] == -1, 'textNew'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textNew'] != -1]['textNew'].mean()\n", - " \n", - " # Logic 1: Scale min,max value to 1,4 strictly\n", - "# min1, max1 = wordSim353AnnotDF_New['textOld'].min(), wordSim353AnnotDF_New['textOld'].max()\n", - "# min2, max2 = wordSim353AnnotDF_New['textNew'].min(), wordSim353AnnotDF_New['textNew'].max()\n", - "# wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * (p - min1) / (max1 - min1))\n", - "# wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * (p - min2) / (max2 - min2))\n", - " \n", - " # Logic 2: Scale abs value to 1,4 strictly\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * abs(p))\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * abs(p))\n", - "\n", - " \n", - "# print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "# print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " \n", - "# print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - "# print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " responseDict['KT_old_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_new_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_old_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['KT_new_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['old_acc'] = accuracy_score(wordSim353AnnotDF_New['textOld'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " responseDict['new_acc'] = accuracy_score(wordSim353AnnotDF_New['textNew'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " \n", - " responseDict['class_rep_old'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), output_dict=True)\n", - " responseDict['class_rep_new'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), output_dict=True)\n", - " \n", - " cm_old = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), labels=LABELS)\n", - " cm_new = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), labels=LABELS)\n", - " \n", - " responseDict['cm_old'] = cm_old\n", - " responseDict['cm_new'] = cm_new\n", - " \n", - " return responseDict" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "severe-explosion", - "metadata": {}, - "outputs": [], - "source": [ - "neighDictMaster, embedDictMaster = {}, {}" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "decreased-syndication", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "39218\n" - ] - } - ], - "source": [ - "neighDictMaster['19k_childPar'] = fetchNeighbours(p279ChildPar)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "rocky-criterion", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster['complex'] = complexEmb\n", - "embedDictMaster['transe'] = transeEmb" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "apparent-sapphire", - "metadata": {}, - "outputs": [], - "source": [ - "for key1 in embedDictMaster.keys():\n", - " for key2 in embedDictMaster[key1].keys():\n", - " embedDictMaster[key1][key2] = np.array(embedDictMaster[key1][key2])" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "precise-oxygen", - "metadata": {}, - "outputs": [], - "source": [ - "embList = list(embedDictMaster.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "identical-keyboard", - "metadata": {}, - "outputs": [], - "source": [ - "basisList = list(neighDictMaster.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "aging-flavor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['19k_childPar'])" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "neighDictMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "amended-remove", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDictMaster, responsesDictMaster = {}, {}" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "surgical-insurance", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7817a00dcf3c412b92a7c5ac75517168", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/1 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
EmbeddingBasisWeightWeightednessIteration NumOld AccNew AccIncreasePairs CoveredOld I Precision...Old U PrecisionOld U RecallOld U F1-ScoreNew I PrecisionNew I RecallNew I F1-ScoreNew U PrecisionNew U RecallNew U F1-ScoreRank
0complex19k_childPar1True160.75581464.2441863.4883722911.000000...0.4331210.6601940.5230771.0000000.400.5714290.4634150.5533980.5044252
20transe19k_childPar1True162.50000065.6976743.1976742910.888889...0.3970590.2621360.3157890.8333330.500.6250000.4500000.1747570.2517480
1complex19k_childPar1True264.24418667.1511632.9069772911.000000...0.4634150.5533980.5044251.0000000.500.6666670.4950500.4854370.4901964
11complex19k_childPar2True261.91860563.6627911.7441862911.000000...0.4444440.6601940.5312501.0000000.450.6206900.4589040.6504850.53815313
10complex19k_childPar2True160.75581461.9186051.1627912911.000000...0.4331210.6601940.5230771.0000000.400.5714290.4444440.6601940.53125012
2complex19k_childPar1True367.15116367.7325580.5813952911.000000...0.4950500.4854370.4901960.9090910.500.6451610.5119050.4174760.4598931
4complex19k_childPar1True567.15116367.7325580.5813952910.916667...0.4929580.3398060.4022990.9166670.550.6875000.5079370.3106800.3855425
36transe19k_childPar2True762.50000063.0813950.5813952910.846154...0.3518520.1844660.2420380.8461540.550.6666670.3653850.1844660.2451616
30transe19k_childPar2True162.50000063.0813950.5813952910.888889...0.3970590.2621360.3157890.9000000.450.6000000.4000000.2524270.30952417
22transe19k_childPar1True364.82558165.4069770.5813952910.750000...0.3939390.1262140.1911760.7500000.750.7500000.4000000.1165050.1804513
38transe19k_childPar2True963.08139563.3720930.2906982910.785714...0.3725490.1844660.2467530.7857140.550.6470590.3800000.1844660.2483668
33transe19k_childPar2True462.79069863.0813950.2906982910.900000...0.3833330.2233010.2822090.8461540.550.6666670.3750000.2038830.26415114
18complex19k_childPar2True963.08139563.0813950.0000002910.909091...0.4444440.5436890.4890830.9090910.500.6451610.4444440.5436890.48908319
37transe19k_childPar2True863.08139563.0813950.0000002910.846154...0.3653850.1844660.2451610.7857140.550.6470590.3725490.1844660.2467537
32transe19k_childPar2True362.79069862.7906980.0000002910.900000...0.3870970.2330100.2909090.9000000.450.6000000.3833330.2233010.28220912
23transe19k_childPar1True465.40697765.4069770.0000002910.750000...0.4000000.1165050.1804510.6521740.750.6976740.4444440.1165050.1846151
39transe19k_childPar2True1063.37209363.3720930.0000002910.785714...0.3800000.1844660.2483660.7857140.550.6470590.3800000.1844660.2483669
15complex19k_childPar2True663.66279163.6627910.0000002911.000000...0.4552240.5922330.5147681.0000000.450.6206900.4538460.5728160.50643817
14complex19k_childPar2True563.66279163.6627910.0000002911.000000...0.4571430.6213590.5267491.0000000.450.6206900.4552240.5922330.51476816
13complex19k_childPar2True463.66279163.6627910.0000002911.000000...0.4577460.6310680.5306121.0000000.450.6206900.4571430.6213590.52674915
12complex19k_childPar2True363.66279163.6627910.0000002911.000000...0.4589040.6504850.5381531.0000000.450.6206900.4577460.6310680.53061214
17complex19k_childPar2True863.37209363.081395-0.2906982910.909091...0.4488190.5533980.4956520.9090910.500.6451610.4444440.5436890.48908318
16complex19k_childPar2True763.66279163.372093-0.2906982911.000000...0.4538460.5728160.5064380.9090910.500.6451610.4488190.5533980.4956529
35transe19k_childPar2True662.79069862.500000-0.2906982910.846154...0.3636360.1941750.2531650.8461540.550.6666670.3518520.1844660.2420385
34transe19k_childPar2True563.08139562.790698-0.2906982910.846154...0.3750000.2038830.2641510.8461540.550.6666670.3636360.1941750.25316515
31transe19k_childPar2True263.08139562.790698-0.2906982910.900000...0.4000000.2524270.3095240.9000000.450.6000000.3870970.2330100.29090911
28transe19k_childPar1True960.75581460.465116-0.2906982910.394737...0.3684210.0679610.1147540.3658540.750.4918030.3888890.0679610.11570213
19complex19k_childPar2True1063.08139562.790698-0.2906982910.909091...0.4444440.5436890.4890830.9000000.450.6000000.4444440.5436890.48908310
26transe19k_childPar1True762.20930261.627907-0.5813952910.428571...0.4285710.0873790.1451610.4166670.750.5357140.4000000.0776700.1300814
29transe19k_childPar1True1060.46511659.883721-0.5813952910.365854...0.3888890.0679610.1157020.3333330.750.4615380.4117650.0679610.11666716
8complex19k_childPar1True965.11627964.534884-0.5813952910.785714...0.4423080.2233010.2967740.7857140.550.6470590.4166670.1941750.2649010
3complex19k_childPar1True467.73255867.151163-0.5813952910.909091...0.5119050.4174760.4598930.9166670.550.6875000.4929580.3398060.4022993
6complex19k_childPar1True766.56976765.988372-0.5813952910.916667...0.4754100.2815530.3536590.8461540.550.6666670.4642860.2524270.3270447
7complex19k_childPar1True865.98837265.116279-0.8720932910.846154...0.4642860.2524270.3270440.7857140.550.6470590.4423080.2233010.2967748
21transe19k_childPar1True265.69767464.825581-0.8720932910.833333...0.4500000.1747570.2517480.7500000.600.6666670.3939390.1262140.1911762
27transe19k_childPar1True861.62790760.755814-0.8720932910.416667...0.4000000.0776700.1300810.3947370.750.5172410.3684210.0679610.11475410
25transe19k_childPar1True663.37209362.209302-1.1627912910.468750...0.4545450.0970870.1600000.4285710.750.5454550.4285710.0873790.14516119
5complex19k_childPar1True667.73255866.569767-1.1627912910.916667...0.5079370.3106800.3855420.9166670.550.6875000.4754100.2815530.3536596
9complex19k_childPar1True1064.53488463.081395-1.4534882910.785714...0.4166670.1941750.2649010.6875000.550.6111110.3777780.1650490.22973011
24transe19k_childPar1True565.40697763.372093-2.0348842910.652174...0.4444440.1165050.1846150.4687500.750.5769230.4545450.0970870.16000018
\n", - "

40 rows × 22 columns

\n", - "" - ], - "text/plain": [ - " Embedding Basis Weight Weightedness Iteration Num Old Acc \\\n", - "0 complex 19k_childPar 1 True 1 60.755814 \n", - "20 transe 19k_childPar 1 True 1 62.500000 \n", - "1 complex 19k_childPar 1 True 2 64.244186 \n", - "11 complex 19k_childPar 2 True 2 61.918605 \n", - "10 complex 19k_childPar 2 True 1 60.755814 \n", - "2 complex 19k_childPar 1 True 3 67.151163 \n", - "4 complex 19k_childPar 1 True 5 67.151163 \n", - "36 transe 19k_childPar 2 True 7 62.500000 \n", - "30 transe 19k_childPar 2 True 1 62.500000 \n", - "22 transe 19k_childPar 1 True 3 64.825581 \n", - "38 transe 19k_childPar 2 True 9 63.081395 \n", - "33 transe 19k_childPar 2 True 4 62.790698 \n", - "18 complex 19k_childPar 2 True 9 63.081395 \n", - "37 transe 19k_childPar 2 True 8 63.081395 \n", - "32 transe 19k_childPar 2 True 3 62.790698 \n", - "23 transe 19k_childPar 1 True 4 65.406977 \n", - "39 transe 19k_childPar 2 True 10 63.372093 \n", - "15 complex 19k_childPar 2 True 6 63.662791 \n", - "14 complex 19k_childPar 2 True 5 63.662791 \n", - "13 complex 19k_childPar 2 True 4 63.662791 \n", - "12 complex 19k_childPar 2 True 3 63.662791 \n", - "17 complex 19k_childPar 2 True 8 63.372093 \n", - "16 complex 19k_childPar 2 True 7 63.662791 \n", - "35 transe 19k_childPar 2 True 6 62.790698 \n", - "34 transe 19k_childPar 2 True 5 63.081395 \n", - "31 transe 19k_childPar 2 True 2 63.081395 \n", - "28 transe 19k_childPar 1 True 9 60.755814 \n", - "19 complex 19k_childPar 2 True 10 63.081395 \n", - "26 transe 19k_childPar 1 True 7 62.209302 \n", - "29 transe 19k_childPar 1 True 10 60.465116 \n", - "8 complex 19k_childPar 1 True 9 65.116279 \n", - "3 complex 19k_childPar 1 True 4 67.732558 \n", - "6 complex 19k_childPar 1 True 7 66.569767 \n", - "7 complex 19k_childPar 1 True 8 65.988372 \n", - "21 transe 19k_childPar 1 True 2 65.697674 \n", - "27 transe 19k_childPar 1 True 8 61.627907 \n", - "25 transe 19k_childPar 1 True 6 63.372093 \n", - "5 complex 19k_childPar 1 True 6 67.732558 \n", - "9 complex 19k_childPar 1 True 10 64.534884 \n", - "24 transe 19k_childPar 1 True 5 65.406977 \n", - "\n", - " New Acc Increase Pairs Covered Old I Precision ... Old U Precision \\\n", - "0 64.244186 3.488372 291 1.000000 ... 0.433121 \n", - "20 65.697674 3.197674 291 0.888889 ... 0.397059 \n", - "1 67.151163 2.906977 291 1.000000 ... 0.463415 \n", - "11 63.662791 1.744186 291 1.000000 ... 0.444444 \n", - "10 61.918605 1.162791 291 1.000000 ... 0.433121 \n", - "2 67.732558 0.581395 291 1.000000 ... 0.495050 \n", - "4 67.732558 0.581395 291 0.916667 ... 0.492958 \n", - "36 63.081395 0.581395 291 0.846154 ... 0.351852 \n", - "30 63.081395 0.581395 291 0.888889 ... 0.397059 \n", - "22 65.406977 0.581395 291 0.750000 ... 0.393939 \n", - "38 63.372093 0.290698 291 0.785714 ... 0.372549 \n", - "33 63.081395 0.290698 291 0.900000 ... 0.383333 \n", - "18 63.081395 0.000000 291 0.909091 ... 0.444444 \n", - "37 63.081395 0.000000 291 0.846154 ... 0.365385 \n", - "32 62.790698 0.000000 291 0.900000 ... 0.387097 \n", - "23 65.406977 0.000000 291 0.750000 ... 0.400000 \n", - "39 63.372093 0.000000 291 0.785714 ... 0.380000 \n", - "15 63.662791 0.000000 291 1.000000 ... 0.455224 \n", - "14 63.662791 0.000000 291 1.000000 ... 0.457143 \n", - "13 63.662791 0.000000 291 1.000000 ... 0.457746 \n", - "12 63.662791 0.000000 291 1.000000 ... 0.458904 \n", - "17 63.081395 -0.290698 291 0.909091 ... 0.448819 \n", - "16 63.372093 -0.290698 291 1.000000 ... 0.453846 \n", - "35 62.500000 -0.290698 291 0.846154 ... 0.363636 \n", - "34 62.790698 -0.290698 291 0.846154 ... 0.375000 \n", - "31 62.790698 -0.290698 291 0.900000 ... 0.400000 \n", - "28 60.465116 -0.290698 291 0.394737 ... 0.368421 \n", - "19 62.790698 -0.290698 291 0.909091 ... 0.444444 \n", - "26 61.627907 -0.581395 291 0.428571 ... 0.428571 \n", - "29 59.883721 -0.581395 291 0.365854 ... 0.388889 \n", - "8 64.534884 -0.581395 291 0.785714 ... 0.442308 \n", - "3 67.151163 -0.581395 291 0.909091 ... 0.511905 \n", - "6 65.988372 -0.581395 291 0.916667 ... 0.475410 \n", - "7 65.116279 -0.872093 291 0.846154 ... 0.464286 \n", - "21 64.825581 -0.872093 291 0.833333 ... 0.450000 \n", - "27 60.755814 -0.872093 291 0.416667 ... 0.400000 \n", - "25 62.209302 -1.162791 291 0.468750 ... 0.454545 \n", - "5 66.569767 -1.162791 291 0.916667 ... 0.507937 \n", - "9 63.081395 -1.453488 291 0.785714 ... 0.416667 \n", - "24 63.372093 -2.034884 291 0.652174 ... 0.444444 \n", - "\n", - " Old U Recall Old U F1-Score New I Precision New I Recall \\\n", - "0 0.660194 0.523077 1.000000 0.40 \n", - "20 0.262136 0.315789 0.833333 0.50 \n", - "1 0.553398 0.504425 1.000000 0.50 \n", - "11 0.660194 0.531250 1.000000 0.45 \n", - "10 0.660194 0.523077 1.000000 0.40 \n", - "2 0.485437 0.490196 0.909091 0.50 \n", - "4 0.339806 0.402299 0.916667 0.55 \n", - "36 0.184466 0.242038 0.846154 0.55 \n", - "30 0.262136 0.315789 0.900000 0.45 \n", - "22 0.126214 0.191176 0.750000 0.75 \n", - "38 0.184466 0.246753 0.785714 0.55 \n", - "33 0.223301 0.282209 0.846154 0.55 \n", - "18 0.543689 0.489083 0.909091 0.50 \n", - "37 0.184466 0.245161 0.785714 0.55 \n", - "32 0.233010 0.290909 0.900000 0.45 \n", - "23 0.116505 0.180451 0.652174 0.75 \n", - "39 0.184466 0.248366 0.785714 0.55 \n", - "15 0.592233 0.514768 1.000000 0.45 \n", - "14 0.621359 0.526749 1.000000 0.45 \n", - "13 0.631068 0.530612 1.000000 0.45 \n", - "12 0.650485 0.538153 1.000000 0.45 \n", - "17 0.553398 0.495652 0.909091 0.50 \n", - "16 0.572816 0.506438 0.909091 0.50 \n", - "35 0.194175 0.253165 0.846154 0.55 \n", - "34 0.203883 0.264151 0.846154 0.55 \n", - "31 0.252427 0.309524 0.900000 0.45 \n", - "28 0.067961 0.114754 0.365854 0.75 \n", - "19 0.543689 0.489083 0.900000 0.45 \n", - "26 0.087379 0.145161 0.416667 0.75 \n", - "29 0.067961 0.115702 0.333333 0.75 \n", - "8 0.223301 0.296774 0.785714 0.55 \n", - "3 0.417476 0.459893 0.916667 0.55 \n", - "6 0.281553 0.353659 0.846154 0.55 \n", - "7 0.252427 0.327044 0.785714 0.55 \n", - "21 0.174757 0.251748 0.750000 0.60 \n", - "27 0.077670 0.130081 0.394737 0.75 \n", - "25 0.097087 0.160000 0.428571 0.75 \n", - "5 0.310680 0.385542 0.916667 0.55 \n", - "9 0.194175 0.264901 0.687500 0.55 \n", - "24 0.116505 0.184615 0.468750 0.75 \n", - "\n", - " New I F1-Score New U Precision New U Recall New U F1-Score Rank \n", - "0 0.571429 0.463415 0.553398 0.504425 2 \n", - "20 0.625000 0.450000 0.174757 0.251748 0 \n", - "1 0.666667 0.495050 0.485437 0.490196 4 \n", - "11 0.620690 0.458904 0.650485 0.538153 13 \n", - "10 0.571429 0.444444 0.660194 0.531250 12 \n", - "2 0.645161 0.511905 0.417476 0.459893 1 \n", - "4 0.687500 0.507937 0.310680 0.385542 5 \n", - "36 0.666667 0.365385 0.184466 0.245161 6 \n", - "30 0.600000 0.400000 0.252427 0.309524 17 \n", - "22 0.750000 0.400000 0.116505 0.180451 3 \n", - "38 0.647059 0.380000 0.184466 0.248366 8 \n", - "33 0.666667 0.375000 0.203883 0.264151 14 \n", - "18 0.645161 0.444444 0.543689 0.489083 19 \n", - "37 0.647059 0.372549 0.184466 0.246753 7 \n", - "32 0.600000 0.383333 0.223301 0.282209 12 \n", - "23 0.697674 0.444444 0.116505 0.184615 1 \n", - "39 0.647059 0.380000 0.184466 0.248366 9 \n", - "15 0.620690 0.453846 0.572816 0.506438 17 \n", - "14 0.620690 0.455224 0.592233 0.514768 16 \n", - "13 0.620690 0.457143 0.621359 0.526749 15 \n", - "12 0.620690 0.457746 0.631068 0.530612 14 \n", - "17 0.645161 0.444444 0.543689 0.489083 18 \n", - "16 0.645161 0.448819 0.553398 0.495652 9 \n", - "35 0.666667 0.351852 0.184466 0.242038 5 \n", - "34 0.666667 0.363636 0.194175 0.253165 15 \n", - "31 0.600000 0.387097 0.233010 0.290909 11 \n", - "28 0.491803 0.388889 0.067961 0.115702 13 \n", - "19 0.600000 0.444444 0.543689 0.489083 10 \n", - "26 0.535714 0.400000 0.077670 0.130081 4 \n", - "29 0.461538 0.411765 0.067961 0.116667 16 \n", - "8 0.647059 0.416667 0.194175 0.264901 0 \n", - "3 0.687500 0.492958 0.339806 0.402299 3 \n", - "6 0.666667 0.464286 0.252427 0.327044 7 \n", - "7 0.647059 0.442308 0.223301 0.296774 8 \n", - "21 0.666667 0.393939 0.126214 0.191176 2 \n", - "27 0.517241 0.368421 0.067961 0.114754 10 \n", - "25 0.545455 0.428571 0.087379 0.145161 19 \n", - "5 0.687500 0.475410 0.281553 0.353659 6 \n", - "9 0.611111 0.377778 0.165049 0.229730 11 \n", - "24 0.576923 0.454545 0.097087 0.160000 18 \n", - "\n", - "[40 rows x 22 columns]" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "resultsDF.sort_values(by=['Increase'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "utility-globe", - "metadata": {}, - "outputs": [], - "source": [ - "resultsDF.to_csv('../data/retrofitting/masterRetro_Aug20_2021.csv', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "crazy-scene", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv2", - "language": "python", - "name": "kgtkenv2" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "288px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Master P279-Dataset Generation.ipynb b/Master P279-Dataset Generation.ipynb deleted file mode 100644 index 0477d95..0000000 --- a/Master P279-Dataset Generation.ipynb +++ /dev/null @@ -1,5117 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "individual-diamond", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import scipy.stats as stats\n", - "import json\n", - "from tqdm.notebook import tqdm\n", - "import gzip\n", - "from collections import defaultdict" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "necessary-shopper", - "metadata": {}, - "outputs": [], - "source": [ - "# Filepaths\n", - "\n", - "# DWD Files\n", - "DERIVED_IS_COUNTS_FILE = '../source_dataset_files/wikidata-20210215-dwd-v2/dwd_isa_class_count.compact.tsv.gz'\n", - "LABELS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/labels.en.tsv.gz\"\n", - "DESCRIPTIONS_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/descriptions.en.tsv.gz\"\n", - "P279_EDGES_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/derived.P279.tsv.gz\"\n", - "P279STAR_EDGES_FILE = \"../source_dataset_files/wikidata-20210215-dwd-v2/derived.P279star.tsv.gz\"\n", - "CLASS_COUNTS_FILE = \"../data/supplementary_files/class-counts.tsv\"\n", - "CLASS_TRANSITIVE_P279_COUNTS_FILE = \"../data/supplementary_files/class-counts-P279star.tsv\"" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "chubby-vehicle", - "metadata": {}, - "outputs": [], - "source": [ - "P279_CHILD_PAR_INTERM_FILE = \"../data/basis/intermediate_files/P279_ChildPar.labDesc.csv\"\n", - "P279_CHILD_PAR_DISTILBERT_COSSIM_FILE = \"../data/basis/P279_ChildPar.all-distilroberta-v1.csv\"\n", - "P279_CHILD_PAR_CLASSSIM_FILE = \"../data/basis/P279_ChildPar.classSim.csv\"\n", - "\n", - "P279_SIBLINGS_INTERM_FILE = \"../data/basis/intermediate_files/P279_Siblings.all_combinations.csv\"\n", - "P279_SIBLINGS_DISTILBERT_COSSIM_FILE = \"../data/basis/P279_Siblings.all-distilroberta-v1.csv\"\n", - "P279_SIBLINGS_CLASSSIM_FILE = \"../data/basis/P279_Siblings.classSim.csv\"" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "parental-liverpool", - "metadata": {}, - "outputs": [], - "source": [ - "WORDSIM_DF = '../data/evaluation/wordsim353_with_r3.csv'" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "subsequent-phrase", - "metadata": {}, - "outputs": [], - "source": [ - "PROBASE_SOURCE_DIR = \"../source_dataset_files/probase/\"\n", - "PROBASE_INTERM_FILE = \"../data/basis/intermediate_files/probase_WQnodes.csv\"\n", - "PROBASE_FINAL_FILE = '../data/basis/intermediate_files/probase_WQnodes_subset_and_sim.csv'" - ] - }, - { - "cell_type": "markdown", - "id": "joint-wrestling", - "metadata": {}, - "source": [ - "# Utilities" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "respiratory-average", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "71f276d6b5b642609801caf1fa94bb41", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/41845781 [00:00 ../data/supplementary_files/class-counts.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "pressed-influence", - "metadata": {}, - "outputs": [], - "source": [ - "class_counts = defaultdict(int)\n", - "with gzip.open(P279STAR_EDGES_FILE, 'r') as f:\n", - " first_line = True\n", - " for line in tqdm(f):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " class_counts[line[2]] += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "centered-school", - "metadata": {}, - "outputs": [], - "source": [ - "class_counts_df = pd.DataFrame.from_dict(class_counts, orient='index',columns=['class_count'])" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "catholic-criminal", - "metadata": {}, - "outputs": [], - "source": [ - "class_counts_df.reset_index().rename(columns={'index': '0'}).to_csv(CLASS_TRANSITIVE_P279_COUNTS_FILE, sep='\\t', header=None, index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "thorough-murray", - "metadata": {}, - "source": [ - "# P279 Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "threatened-pacific", - "metadata": {}, - "source": [ - "## P279 ChildPar Dataset\n", - "\n", - "Use descriptions wherever available, if not use labels, if not skip rows\n", - "\n", - "**Old Version Details:**\n", - "\n", - "[Wikidata OS File (Wikidata 2021-02-15 DWD version)](https://drive.google.com/drive/folders/168j3OfdVGXMTKcs6VyH8rq_p0n6w0GGj?usp=sharing)\n", - "\n", - "There are 721983 rows in P279 dataset, 606996 unique number of nodes in this dataset, 511841 labels and 299844 descriptions\n", - "\n", - "There are 373463 rows in P279 dataset s.t. both nodes have either a label or a description. There are 373463 rows where both nodes have labels. There are 373463 rows where both nodes have descriptions." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "polyphonic-county", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk filter -i ../data/wikidataos.for.text-embedding.tsv.gz -p \";P279;\" -o ../data/P279_dataset/wikidata-P279.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "silent-liver", - "metadata": {}, - "outputs": [], - "source": [ - "p279DF = pd.read_csv(P279_EDGES_FILE,sep='\\t')\n", - "p279DFNodesSet = set(p279DF.node1.to_list() + p279DF.node2.to_list())\n", - "labelsDF = pd.read_csv(LABELS_FILE, sep='\\t')\n", - "descriptionsDF = pd.read_csv(DESCRIPTIONS_FILE, compression='gzip', sep='\\t')\n", - "labelsDF = labelsDF[labelsDF.node1.apply(lambda p: p in p279DFNodesSet)]\n", - "descriptionsDF = descriptionsDF[descriptionsDF.node1.apply(lambda p: p in p279DFNodesSet)]" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "cubic-taxation", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "There are 3077831 rows in P279 dataset, 2503943 unique number of nodes in this dataset, 2406580 labels and 1369514 descriptions\n" - ] - } - ], - "source": [ - "print(f\"There are {len(p279DF)} rows in P279 dataset, {len(p279DFNodesSet)} unique number of nodes in this dataset, {len(labelsDF)} labels and {len(descriptionsDF)} descriptions\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "damaged-driving", - "metadata": {}, - "outputs": [], - "source": [ - "p279DFNew = p279DF\n", - "temp1 = p279DFNew.set_index('node1').join(labelsDF.set_index('node1'), rsuffix='_label')\n", - "temp1 = temp1[['id','label','node2','node2_label']]\n", - "temp2 = temp1.reset_index().set_index('node2').join(labelsDF.set_index('node1'), rsuffix='_label2')\n", - "temp3 = temp2[['id','node1','label','node2', 'node2_label']].rename(columns={'node2_label': 'node1_label', 'node2':'node2_label'}).reset_index().rename(columns={'index':'node2'})\n", - "temp3 = temp3[['id','node1','node1_label','label','node2','node2_label']]\n", - "temp3['node1_label'] = temp3['node1_label'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "temp3['node2_label'] = temp3['node2_label'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "hierDF = temp3.copy()\n", - "\n", - "p279DFNew = hierDF\n", - "temp1 = p279DFNew.set_index('node1').join(descriptionsDF.set_index('node1'), rsuffix='_desc')\n", - "temp1 = temp1[['id','label','node2','node1_label','node2_label', 'node2_desc']]\n", - "temp2 = temp1.reset_index().set_index('node2').join(descriptionsDF.set_index('node1'), rsuffix='_desc2')\n", - "temp3 = temp2[['id','node1','label','node2', 'node1_label', 'node2_label', 'node2_desc']].rename(columns={'node2_desc': 'node1_desc', 'node2':'node2_desc'}).reset_index().rename(columns={'index':'node2'})\n", - "temp3['node1_desc'] = temp3['node1_desc'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "temp3['node2_desc'] = temp3['node2_desc'].apply(lambda p: p[1:-4] if type(p) == str else None)\n", - "hierDF = temp3.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "dress-yellow", - "metadata": {}, - "outputs": [], - "source": [ - "def combineLabDesc(row, nodeNum):\n", - " if type(row['node'+str(nodeNum)+'_desc']) == str and type(row['node'+str(nodeNum)+'_label']) == str :\n", - " return row['node'+str(nodeNum)+'_label'] + ' ' + row['node'+str(nodeNum)+'_desc']\n", - " else:\n", - " return None\n", - "hierDF['node1_labDesc'] = hierDF.apply(combineLabDesc, axis=1, args=(1,))\n", - "hierDF['node2_labDesc'] = hierDF.apply(combineLabDesc, axis=1, args=(2,))\n", - "hierDF = hierDF[~hierDF['node1_labDesc'].isna()]\n", - "hierDF = hierDF[~hierDF['node2_labDesc'].isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "adaptive-measure", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "There are 1898589 rows in P279 dataset s.t. both nodes have either a label or a description. There are 1898589 rows where both nodes have labels. There are 1898589 rows where both nodes have descriptions.\n" - ] - } - ], - "source": [ - "print(f\"There are {len(hierDF)} rows in P279 dataset s.t. both nodes have either a label or a description. \\\n", - " There are {len(hierDF[(~hierDF.node1_label.isna()) & (~hierDF.node2_label.isna())])} rows where both nodes have labels. \\\n", - " There are {len(hierDF[(~hierDF.node1_desc.isna()) & (~hierDF.node2_desc.isna())])} rows where both nodes have descriptions.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "disturbed-adaptation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDesc
1Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791944 fighter aircraft family by Oberst R. LehmannYF-16F-16initial prototype of the F-16 fighter aircraftYF-16 initial prototype of the F-16 fighter ai...F-16 1944 fighter aircraft family by Oberst R....
2Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791944 fighter aircraft family by Oberst R. LehmannF-16A/B Fighting FalconF-16initial series of the F-16 fighter aircraftF-16A/B Fighting Falcon initial series of the ...F-16 1944 fighter aircraft family by Oberst R....
3Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791944 fighter aircraft family by Oberst R. LehmannF-16C/D Fighting FalconF-16multirole series of the F-16 fighter aircraftF-16C/D Fighting Falcon multirole series of th...F-16 1944 fighter aircraft family by Oberst R....
4Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791944 fighter aircraft family by Oberst R. LehmannF-16E/F Desert FalconF-16export strike fighter series of the F-16 fight...F-16E/F Desert Falcon export strike fighter se...F-16 1944 fighter aircraft family by Oberst R....
5Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791944 fighter aircraft family by Oberst R. LehmannF-16 VISTAF-16experimental aircraftF-16 VISTA experimental aircraftF-16 1944 fighter aircraft family by Oberst R....
\n", - "
" - ], - "text/plain": [ - " node2 id node1 label \\\n", - "1 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "2 Q100026 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 \n", - "3 Q100026 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 \n", - "4 Q100026 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 \n", - "5 Q100026 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 \n", - "\n", - " node2_desc node1_label \\\n", - "1 1944 fighter aircraft family by Oberst R. Lehmann YF-16 \n", - "2 1944 fighter aircraft family by Oberst R. Lehmann F-16A/B Fighting Falcon \n", - "3 1944 fighter aircraft family by Oberst R. Lehmann F-16C/D Fighting Falcon \n", - "4 1944 fighter aircraft family by Oberst R. Lehmann F-16E/F Desert Falcon \n", - "5 1944 fighter aircraft family by Oberst R. Lehmann F-16 VISTA \n", - "\n", - " node2_label node1_desc \\\n", - "1 F-16 initial prototype of the F-16 fighter aircraft \n", - "2 F-16 initial series of the F-16 fighter aircraft \n", - "3 F-16 multirole series of the F-16 fighter aircraft \n", - "4 F-16 export strike fighter series of the F-16 fight... \n", - "5 F-16 experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "1 YF-16 initial prototype of the F-16 fighter ai... \n", - "2 F-16A/B Fighting Falcon initial series of the ... \n", - "3 F-16C/D Fighting Falcon multirole series of th... \n", - "4 F-16E/F Desert Falcon export strike fighter se... \n", - "5 F-16 VISTA experimental aircraft \n", - "\n", - " node2_labDesc \n", - "1 F-16 1944 fighter aircraft family by Oberst R.... \n", - "2 F-16 1944 fighter aircraft family by Oberst R.... \n", - "3 F-16 1944 fighter aircraft family by Oberst R.... \n", - "4 F-16 1944 fighter aircraft family by Oberst R.... \n", - "5 F-16 1944 fighter aircraft family by Oberst R.... " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "markdown", - "id": "plain-jurisdiction", - "metadata": {}, - "source": [ - "### Filter based on transitive P279 counts\n", - "\n", - "6769\n", - "(310053, 303284)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "broken-intermediate", - "metadata": {}, - "outputs": [], - "source": [ - "# hierDF = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "trained-parent", - "metadata": {}, - "outputs": [], - "source": [ - "transitive_P279Counts = pd.read_csv(CLASS_COUNTS_FILE, sep='\\t', header=None)\n", - "transitive_P279Counts = transitive_P279Counts.set_index(0)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "great-engine", - "metadata": {}, - "outputs": [], - "source": [ - "def extract_pairs_with_top_k_class_counts(transitive_P279Counts, k, hierDF):\n", - " transitive_P279Counts = transitive_P279Counts[transitive_P279Counts >= k]\n", - " transitive_P279CountsNeededSet = set(transitive_P279Counts.index.to_list())\n", - " hierDF_transP279_filtered = hierDF[hierDF.node2.apply(lambda p: p in transitive_P279CountsNeededSet)]\n", - "# print(\"No. of pairs with identical desc:\", (hierDF_transP279_filtered.node1_desc == hierDF_transP279_filtered.node2_desc).sum())\n", - " hierDF_transP279_filtered1 = hierDF_transP279_filtered[hierDF_transP279_filtered.node1_desc != hierDF_transP279_filtered.node2_desc]\n", - "# print(len(hierDF_transP279_filtered), len(hierDF_transP279_filtered1))\n", - " hierDF_transP279_filtered1 = hierDF_transP279_filtered1.groupby(\"node2\").apply(lambda g: g if len(g) <= 500 else g.sample(500))\n", - " return hierDF_transP279_filtered1, k, len(hierDF_transP279_filtered1), hierDF_transP279_filtered1.node2.nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "worldwide-designation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(10, 304654, 28511)" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered1, k, cnt, n_pars = extract_pairs_with_top_k_class_counts(transitive_P279Counts, 10, hierDF)\n", - "k, cnt, n_pars" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "medical-hierarchy", - "metadata": {}, - "outputs": [], - "source": [ - "# tempRes = []\n", - "# for k in range(10000,100000,10000):\n", - "# _, k, cnt, n_pars = extract_pairs_with_top_k_class_counts(transitive_P279Counts, k, hierDF)\n", - "# tempRes.append((k, cnt, n_pars))\n", - "# pd.DataFrame(tempRes, columns=['Thresh', 'No. of rows', 'No. of unique parents'])" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "peaceful-protocol", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 28511.000000\n", - "mean 10.685490\n", - "std 28.508339\n", - "min 1.000000\n", - "25% 2.000000\n", - "50% 4.000000\n", - "75% 10.000000\n", - "max 500.000000\n", - "Name: node2, dtype: float64" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered1.node2.value_counts().describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "spiritual-ballot", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered1.to_csv(P279_CHILD_PAR_INTERM_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 145, - "id": "english-alfred", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = pd.read_csv(P279_CHILD_PAR_INTERM_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 146, - "id": "interpreted-institute", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2Unnamed: 1node2.1idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDesc
0Q1000261Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791944 fighter aircraft family by Oberst R. LehmannYF-16F-16initial prototype of the F-16 fighter aircraftYF-16 initial prototype of the F-16 fighter ai...F-16 1944 fighter aircraft family by Oberst R....
1Q1000262Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791944 fighter aircraft family by Oberst R. LehmannF-16A/B Fighting FalconF-16initial series of the F-16 fighter aircraftF-16A/B Fighting Falcon initial series of the ...F-16 1944 fighter aircraft family by Oberst R....
2Q1000263Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791944 fighter aircraft family by Oberst R. LehmannF-16C/D Fighting FalconF-16multirole series of the F-16 fighter aircraftF-16C/D Fighting Falcon multirole series of th...F-16 1944 fighter aircraft family by Oberst R....
3Q1000264Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791944 fighter aircraft family by Oberst R. LehmannF-16E/F Desert FalconF-16export strike fighter series of the F-16 fight...F-16E/F Desert Falcon export strike fighter se...F-16 1944 fighter aircraft family by Oberst R....
4Q1000265Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791944 fighter aircraft family by Oberst R. LehmannF-16 VISTAF-16experimental aircraftF-16 VISTA experimental aircraftF-16 1944 fighter aircraft family by Oberst R....
\n", - "
" - ], - "text/plain": [ - " node2 Unnamed: 1 node2.1 id node1 \\\n", - "0 Q100026 1 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 \n", - "1 Q100026 2 Q100026 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 \n", - "2 Q100026 3 Q100026 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 \n", - "3 Q100026 4 Q100026 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 \n", - "4 Q100026 5 Q100026 Q2029940-P279-Q100026-ceba4380-0 Q2029940 \n", - "\n", - " label node2_desc \\\n", - "0 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "1 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "2 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "3 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "4 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "\n", - " node1_label node2_label \\\n", - "0 YF-16 F-16 \n", - "1 F-16A/B Fighting Falcon F-16 \n", - "2 F-16C/D Fighting Falcon F-16 \n", - "3 F-16E/F Desert Falcon F-16 \n", - "4 F-16 VISTA F-16 \n", - "\n", - " node1_desc \\\n", - "0 initial prototype of the F-16 fighter aircraft \n", - "1 initial series of the F-16 fighter aircraft \n", - "2 multirole series of the F-16 fighter aircraft \n", - "3 export strike fighter series of the F-16 fight... \n", - "4 experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "0 YF-16 initial prototype of the F-16 fighter ai... \n", - "1 F-16A/B Fighting Falcon initial series of the ... \n", - "2 F-16C/D Fighting Falcon multirole series of th... \n", - "3 F-16E/F Desert Falcon export strike fighter se... \n", - "4 F-16 VISTA experimental aircraft \n", - "\n", - " node2_labDesc \n", - "0 F-16 1944 fighter aircraft family by Oberst R.... \n", - "1 F-16 1944 fighter aircraft family by Oberst R.... \n", - "2 F-16 1944 fighter aircraft family by Oberst R.... \n", - "3 F-16 1944 fighter aircraft family by Oberst R.... \n", - "4 F-16 1944 fighter aircraft family by Oberst R.... " - ] - }, - "execution_count": 146, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "id": "committed-diamond", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName, device='cuda:0')\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list(), show_progress_bar=True, batch_size=500)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "id": "alpine-virus", - "metadata": {}, - "outputs": [], - "source": [ - "modelName = 'sentence-transformers/all-distilroberta-v1'" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "funny-asian", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = hierDF.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 150, - "id": "stunning-consolidation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 0)" - ] - }, - "execution_count": 150, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.node1_labDesc.isna().sum(), hierDF.node2_labDesc.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "warming-dinner", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "149.29957628250122 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "103.25607371330261 s\n" - ] - } - ], - "source": [ - "hierDF['node1_emb'] = pd.Series(list(getSentEmbeddings(hierDF.node1_labDesc, modelName)))\n", - "hierDF['node2_emb'] = pd.Series(list(getSentEmbeddings(hierDF.node2_labDesc, modelName)))" - ] - }, - { - "cell_type": "code", - "execution_count": 152, - "id": "noticed-electric", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexnode2Unnamed: 1node2.1idnode1labelnode2_descnode1_labelnode2_labelnode1_descnode1_labDescnode2_labDescnode1_embnode2_emb
00Q1000261Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2791944 fighter aircraft family by Oberst R. LehmannYF-16F-16initial prototype of the F-16 fighter aircraftYF-16 initial prototype of the F-16 fighter ai...F-16 1944 fighter aircraft family by Oberst R....[-0.0003189822, -0.31257084, 0.4071587, 0.4445...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
11Q1000262Q100026Q17372377-P279-Q100026-fd42bd71-0Q17372377P2791944 fighter aircraft family by Oberst R. LehmannF-16A/B Fighting FalconF-16initial series of the F-16 fighter aircraftF-16A/B Fighting Falcon initial series of the ...F-16 1944 fighter aircraft family by Oberst R....[-0.066473946, -0.17350475, 0.24638157, 0.4571...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
22Q1000263Q100026Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2791944 fighter aircraft family by Oberst R. LehmannF-16C/D Fighting FalconF-16multirole series of the F-16 fighter aircraftF-16C/D Fighting Falcon multirole series of th...F-16 1944 fighter aircraft family by Oberst R....[-0.110435985, -0.09184393, 0.24768817, 0.2641...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
33Q1000264Q100026Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2791944 fighter aircraft family by Oberst R. LehmannF-16E/F Desert FalconF-16export strike fighter series of the F-16 fight...F-16E/F Desert Falcon export strike fighter se...F-16 1944 fighter aircraft family by Oberst R....[-0.40679273, -0.026886985, 0.032887716, 0.641...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
44Q1000265Q100026Q2029940-P279-Q100026-ceba4380-0Q2029940P2791944 fighter aircraft family by Oberst R. LehmannF-16 VISTAF-16experimental aircraftF-16 VISTA experimental aircraftF-16 1944 fighter aircraft family by Oberst R....[-0.18904628, 0.10738095, 0.3032565, 0.6507382...[-0.074766316, -0.20337783, 0.23880175, 0.4511...
\n", - "
" - ], - "text/plain": [ - " index node2 Unnamed: 1 node2.1 id \\\n", - "0 0 Q100026 1 Q100026 Q17372279-P279-Q100026-beba8cd1-0 \n", - "1 1 Q100026 2 Q100026 Q17372377-P279-Q100026-fd42bd71-0 \n", - "2 2 Q100026 3 Q100026 Q17372444-P279-Q100026-ca0fc4bd-0 \n", - "3 3 Q100026 4 Q100026 Q17372455-P279-Q100026-c2b1bf36-0 \n", - "4 4 Q100026 5 Q100026 Q2029940-P279-Q100026-ceba4380-0 \n", - "\n", - " node1 label node2_desc \\\n", - "0 Q17372279 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "1 Q17372377 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "2 Q17372444 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "3 Q17372455 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "4 Q2029940 P279 1944 fighter aircraft family by Oberst R. Lehmann \n", - "\n", - " node1_label node2_label \\\n", - "0 YF-16 F-16 \n", - "1 F-16A/B Fighting Falcon F-16 \n", - "2 F-16C/D Fighting Falcon F-16 \n", - "3 F-16E/F Desert Falcon F-16 \n", - "4 F-16 VISTA F-16 \n", - "\n", - " node1_desc \\\n", - "0 initial prototype of the F-16 fighter aircraft \n", - "1 initial series of the F-16 fighter aircraft \n", - "2 multirole series of the F-16 fighter aircraft \n", - "3 export strike fighter series of the F-16 fight... \n", - "4 experimental aircraft \n", - "\n", - " node1_labDesc \\\n", - "0 YF-16 initial prototype of the F-16 fighter ai... \n", - "1 F-16A/B Fighting Falcon initial series of the ... \n", - "2 F-16C/D Fighting Falcon multirole series of th... \n", - "3 F-16E/F Desert Falcon export strike fighter se... \n", - "4 F-16 VISTA experimental aircraft \n", - "\n", - " node2_labDesc \\\n", - "0 F-16 1944 fighter aircraft family by Oberst R.... \n", - "1 F-16 1944 fighter aircraft family by Oberst R.... \n", - "2 F-16 1944 fighter aircraft family by Oberst R.... \n", - "3 F-16 1944 fighter aircraft family by Oberst R.... \n", - "4 F-16 1944 fighter aircraft family by Oberst R.... \n", - "\n", - " node1_emb \\\n", - "0 [-0.0003189822, -0.31257084, 0.4071587, 0.4445... \n", - "1 [-0.066473946, -0.17350475, 0.24638157, 0.4571... \n", - "2 [-0.110435985, -0.09184393, 0.24768817, 0.2641... \n", - "3 [-0.40679273, -0.026886985, 0.032887716, 0.641... \n", - "4 [-0.18904628, 0.10738095, 0.3032565, 0.6507382... \n", - "\n", - " node2_emb \n", - "0 [-0.074766316, -0.20337783, 0.23880175, 0.4511... \n", - "1 [-0.074766316, -0.20337783, 0.23880175, 0.4511... \n", - "2 [-0.074766316, -0.20337783, 0.23880175, 0.4511... \n", - "3 [-0.074766316, -0.20337783, 0.23880175, 0.4511... \n", - "4 [-0.074766316, -0.20337783, 0.23880175, 0.4511... " - ] - }, - "execution_count": 152, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 153, - "id": "surrounded-thinking", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 0)" - ] - }, - "execution_count": 153, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF.node1_emb.isna().sum(), hierDF.node2_emb.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "id": "frozen-console", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF['similarity_value'] = hierDF.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "id": "optimum-sewing", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF[['id', 'node1', 'label', 'node2', 'similarity_value']].to_csv(P279_CHILD_PAR_DISTILBERT_COSSIM_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "id": "selective-nashville", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 304654.000000\n", - "mean 0.499092\n", - "std 0.186887\n", - "min -0.130950\n", - "25% 0.371610\n", - "50% 0.499928\n", - "75% 0.626436\n", - "max 0.989182\n", - "Name: similarity_value, dtype: float64" - ] - }, - "execution_count": 168, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF['similarity_value'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "interior-treat", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ba6879c669da4812919bee809747ece9", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Batches: 0%| | 0/747 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2similarity_value
0Q17372279-P279-Q100026-beba8cd1-0Q17372279P279Q1000260.592530
1Q17372377-P279-Q100026-fd42bd71-0Q17372377P279Q1000260.660948
2Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P279Q1000260.634662
3Q17372455-P279-Q100026-c2b1bf36-0Q17372455P279Q1000260.552555
4Q2029940-P279-Q100026-ceba4380-0Q2029940P279Q1000260.504576
\n", - "" - ], - "text/plain": [ - " id node1 label node2 \\\n", - "0 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 Q100026 \n", - "1 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 Q100026 \n", - "2 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 Q100026 \n", - "3 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 Q100026 \n", - "4 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 Q100026 \n", - "\n", - " similarity_value \n", - "0 0.592530 \n", - "1 0.660948 \n", - "2 0.634662 \n", - "3 0.552555 \n", - "4 0.504576 " - ] - }, - "execution_count": 169, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered = pd.read_csv(P279_CHILD_PAR_DISTILBERT_COSSIM_FILE)\n", - "hierDF_transP279_filtered.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "id": "normal-playback", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_left = hierDF_transP279_filtered.set_index('node2')\n", - "hierDF_transP279_filtered_right = hierDF_transP279_filtered.copy().set_index('node2')" - ] - }, - { - "cell_type": "code", - "execution_count": 171, - "id": "interpreted-elimination", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 2.04 s, sys: 684 ms, total: 2.72 s\n", - "Wall time: 2.72 s\n" - ] - } - ], - "source": [ - "%%time\n", - "hierDF_transP279_filtered_sibs = hierDF_transP279_filtered_left.join(hierDF_transP279_filtered_right, rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 172, - "id": "consolidated-hampshire", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "26426178" - ] - }, - "execution_count": 172, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_transP279_filtered_sibs)" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "id": "blessed-microwave", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelsimilarity_valueid_rightnode1_rightlabel_rightsimilarity_value_right
node2
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.592530
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372377-P279-Q100026-fd42bd71-0Q17372377P2790.660948
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372444-P279-Q100026-ca0fc4bd-0Q17372444P2790.634662
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372455-P279-Q100026-c2b1bf36-0Q17372455P2790.552555
Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q2029940-P279-Q100026-ceba4380-0Q2029940P2790.504576
\n", - "
" - ], - "text/plain": [ - " id node1 label similarity_value \\\n", - "node2 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 0.59253 \n", - "\n", - " id_right node1_right label_right \\\n", - "node2 \n", - "Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "Q100026 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 P279 \n", - "Q100026 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 P279 \n", - "Q100026 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 P279 \n", - "Q100026 Q2029940-P279-Q100026-ceba4380-0 Q2029940 P279 \n", - "\n", - " similarity_value_right \n", - "node2 \n", - "Q100026 0.592530 \n", - "Q100026 0.660948 \n", - "Q100026 0.634662 \n", - "Q100026 0.552555 \n", - "Q100026 0.504576 " - ] - }, - "execution_count": 173, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 175, - "id": "compliant-measure", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs.drop(columns=['label_right']).reset_index().rename(columns={'node2': 'par_node', 'node1_right': 'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 176, - "id": "anticipated-occasion", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
par_nodeidnode1labelsimilarity_valueid_rightnode2similarity_value_right
0Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372279-P279-Q100026-beba8cd1-0Q173722790.592530
1Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372377-P279-Q100026-fd42bd71-0Q173723770.660948
2Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372444-P279-Q100026-ca0fc4bd-0Q173724440.634662
3Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q17372455-P279-Q100026-c2b1bf36-0Q173724550.552555
4Q100026Q17372279-P279-Q100026-beba8cd1-0Q17372279P2790.59253Q2029940-P279-Q100026-ceba4380-0Q20299400.504576
\n", - "
" - ], - "text/plain": [ - " par_node id node1 label \\\n", - "0 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "1 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "2 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "3 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "4 Q100026 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 P279 \n", - "\n", - " similarity_value id_right node2 \\\n", - "0 0.59253 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 \n", - "1 0.59253 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 \n", - "2 0.59253 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 \n", - "3 0.59253 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 \n", - "4 0.59253 Q2029940-P279-Q100026-ceba4380-0 Q2029940 \n", - "\n", - " similarity_value_right \n", - "0 0.592530 \n", - "1 0.660948 \n", - "2 0.634662 \n", - "3 0.552555 \n", - "4 0.504576 " - ] - }, - "execution_count": 176, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "steady-jacket", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "26426178" - ] - }, - "execution_count": 177, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_transP279_filtered_sibs1)" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "id": "italian-slovak", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs1[hierDF_transP279_filtered_sibs1.node1 != hierDF_transP279_filtered_sibs1.node2]" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "id": "digital-oxygen", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "26121338" - ] - }, - "execution_count": 179, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF_transP279_filtered_sibs1)" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "fewer-rebel", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1.to_csv(P279_SIBLINGS_INTERM_FILE, index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "failing-accent", - "metadata": {}, - "source": [ - "### Add labels + descs" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "id": "controlled-width", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.utils.random import sample_without_replacement\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 193, - "id": "prompt-grade", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1000000\n" - ] - } - ], - "source": [ - "hierDF_transP279_filtered_sibs = pd.read_csv(P279_SIBLINGS_INTERM_FILE)\n", - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs.iloc[sample_without_replacement(len(hierDF_transP279_filtered_sibs), 1000000, random_state=13)]\n", - "hierDF_transP279_filtered_sibs1 = hierDF_transP279_filtered_sibs1.reset_index()\n", - "print(len(hierDF_transP279_filtered_sibs1))\n", - "labelsDF = pd.read_csv(LABELS_FILE, compression='gzip', sep='\\t')\n", - "hierDF_transP279_filtered_set = set(hierDF_transP279_filtered_sibs1.node1.to_list() + hierDF_transP279_filtered_sibs1.node2.to_list() + hierDF_transP279_filtered_sibs1.par_node.to_list())\n", - "labelsDF = labelsDF[labelsDF.node1.apply(lambda p: p in hierDF_transP279_filtered_set)]\n", - "labelsDict = {row['node1']: row['node2'] for _, row in labelsDF.iterrows() if row['node1'] in hierDF_transP279_filtered_set}\n", - "descriptionsDF = pd.read_csv(DESCRIPTIONS_FILE, compression='gzip', sep='\\t')\n", - "descriptionsDF = descriptionsDF[descriptionsDF.node1.apply(lambda p: p in hierDF_transP279_filtered_set)]\n", - "descDict = {row['node1']: row['node2'] for _, row in descriptionsDF.iterrows() if row['node1'] in hierDF_transP279_filtered_set}" - ] - }, - { - "cell_type": "code", - "execution_count": 194, - "id": "american-porter", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered_sibs1['node1_label'] = hierDF_transP279_filtered_sibs1.node1.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else None)\n", - "hierDF_transP279_filtered_sibs1['node2_label'] = hierDF_transP279_filtered_sibs1.node2.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else None)\n", - "hierDF_transP279_filtered_sibs1['par_label'] = hierDF_transP279_filtered_sibs1.par_node.apply(lambda p: labelsDict[p][1:-4] if p in labelsDict else None)\n", - "hierDF_transP279_filtered_sibs1['node1_desc'] = hierDF_transP279_filtered_sibs1.node1.apply(lambda p: descDict[p][1:-4] if p in descDict else None)\n", - "hierDF_transP279_filtered_sibs1['node2_desc'] = hierDF_transP279_filtered_sibs1.node2.apply(lambda p: descDict[p][1:-4] if p in descDict else None)\n", - "hierDF_transP279_filtered_sibs1['node1_sent'] = hierDF_transP279_filtered_sibs1.apply(lambda p: p['node1_label'] + ' ' + p['node1_desc'] + ' is ' + p['par_label'],axis=1)\n", - "hierDF_transP279_filtered_sibs1['node2_sent'] = hierDF_transP279_filtered_sibs1.apply(lambda p: p['node2_label'] + ' ' + p['node2_desc'] + ' is ' + p['par_label'],axis=1)\n", - "hierDF_transP279_filtered_sibs2 = hierDF_transP279_filtered_sibs1[hierDF_transP279_filtered_sibs1.node1_desc != hierDF_transP279_filtered_sibs1.node2_desc]" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "id": "official-separation", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset reduced from 1000000 to 785418 by eliminating rows where node1_desc == node2_desc\n" - ] - } - ], - "source": [ - "print(f\"Dataset reduced from {len(hierDF_transP279_filtered_sibs1)} to {len(hierDF_transP279_filtered_sibs2)} by eliminating rows where node1_desc == node2_desc\")" - ] - }, - { - "cell_type": "code", - "execution_count": 196, - "id": "weighted-mirror", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexpar_nodeidnode1labelsimilarity_valueid_rightnode2similarity_value_rightnode1_labelnode2_labelpar_labelnode1_descnode2_descnode1_sentnode2_sent
024998287Q89Q96627253-P279-Q89-51483924-0Q96627253P2790.460166Q595003-P279-Q89-ddc59387-0Q5950030.553182Sevillana (manzana)Calville Blanc d\\'hiverappleapple cultivarapple cultivarSevillana (manzana) apple cultivar is appleCalville Blanc d\\'hiver apple cultivar is apple
16348351Q17589470Q56942-P279-Q17589470-d0932570-0Q56942P2790.527086Q69974281-P279-Q17589470-ed5eb339-0Q699742810.466616Wii UGamatic 7600home video game consoleeight-generation home video game console by Ni...Pong console. The same of Otron Gamatic 7600Wii U eight-generation home video game console...Gamatic 7600 Pong console. The same of Otron G...
23244723Q13357858Q63845311-P279-Q13357858-c40a679c-0Q63845311P2790.695520Q79132633-P279-Q13357858-4ccf52ce-0Q791326330.6797672013 World Senior Badminton Championships O35Slovak Badminton Championships U17badminton tournamentbadminton championshipsbadminton championships2013 World Senior Badminton Championships O35 ...Slovak Badminton Championships U17 badminton c...
35923963Q174736Q583164-P279-Q174736-262a2fe0-0Q583164P2790.459580Q2692256-P279-Q174736-e1333ac9-0Q26922560.592024Project 30bisBagley-class destroyerdestroyer1949 Soviet destroyer classclass of U.S. destroyersProject 30bis 1949 Soviet destroyer class is d...Bagley-class destroyer class of U.S. destroyer...
410867070Q215627Q19840821-P279-Q215627-eb7ec03a-0Q19840821P2790.201813Q40554819-P279-Q215627-95d720c4-0Q405548190.104633SingaporeansSicilianspersoncitizens or residents of Singaporeethnic group indigenous to the island of Sicil...Singaporeans citizens or residents of Singapor...Sicilians ethnic group indigenous to the islan...
...................................................
99999515478058Q3382119Q75086913-P279-Q3382119-a9ff163a-0Q75086913P2790.769255Q75828417-P279-Q3382119-59b8950c-0Q758284170.621310Sub-prefect of Nogent-le-RotrouSub-prefect of Pont-Audemersub-prefectFrench official positionformer French official position (1800-1926)Sub-prefect of Nogent-le-Rotrou French officia...Sub-prefect of Pont-Audemer former French offi...
99999623394433Q785745Q23022056-P279-Q785745-f48ca89b-0Q23022056P2790.405016Q3511974-P279-Q785745-42da354d-0Q35119740.306730Tasmanian Government Railways J classAlsace-Lorraine E 6tank locomotiveclass of 1 Australian 2-6-4-0T locomotiveclass of 13 German (later French) metre-gauge ...Tasmanian Government Railways J class class of...Alsace-Lorraine E 6 class of 13 German (later ...
99999719035228Q483373Q682971-P279-Q483373-6ff4adf5-0Q682971P2790.314112Q4598091-P279-Q483373-fd15b986-0Q45980910.213652Rhaetian Railway ABe 4/16CTA 2000 serieselectric multiple unitmultiple unitclass of Chicago Transit Authority carsRhaetian Railway ABe 4/16 multiple unit is ele...CTA 2000 series class of Chicago Transit Autho...
99999820618370Q625151Q841350-P279-Q625151-bd2c0728-0Q841350P2790.459560Q463577-P279-Q625151-4cfe245b-0Q4635770.466203OSE class 120BLS Re 4/4electric locomotiveclass of Greek electric locomotivesclass of 35 Swiss electric locomotiesOSE class 120 class of Greek electric locomoti...BLS Re 4/4 class of 35 Swiss electric locomoti...
9999992023217Q11513337Q13382122-P279-Q11513337-2d44cd4f-0Q13382122P2790.559249Q13854733-P279-Q11513337-8c2aca91-0Q138547330.626328high jumpersteeplechase runnerathletics competitorsportsperson taking part in high jump competit...sportsperson taking part in steeplechasing com...high jumper sportsperson taking part in high j...steeplechase runner sportsperson taking part i...
\n", - "

1000000 rows × 16 columns

\n", - "
" - ], - "text/plain": [ - " index par_node id node1 \\\n", - "0 24998287 Q89 Q96627253-P279-Q89-51483924-0 Q96627253 \n", - "1 6348351 Q17589470 Q56942-P279-Q17589470-d0932570-0 Q56942 \n", - "2 3244723 Q13357858 Q63845311-P279-Q13357858-c40a679c-0 Q63845311 \n", - "3 5923963 Q174736 Q583164-P279-Q174736-262a2fe0-0 Q583164 \n", - "4 10867070 Q215627 Q19840821-P279-Q215627-eb7ec03a-0 Q19840821 \n", - "... ... ... ... ... \n", - "999995 15478058 Q3382119 Q75086913-P279-Q3382119-a9ff163a-0 Q75086913 \n", - "999996 23394433 Q785745 Q23022056-P279-Q785745-f48ca89b-0 Q23022056 \n", - "999997 19035228 Q483373 Q682971-P279-Q483373-6ff4adf5-0 Q682971 \n", - "999998 20618370 Q625151 Q841350-P279-Q625151-bd2c0728-0 Q841350 \n", - "999999 2023217 Q11513337 Q13382122-P279-Q11513337-2d44cd4f-0 Q13382122 \n", - "\n", - " label similarity_value id_right \\\n", - "0 P279 0.460166 Q595003-P279-Q89-ddc59387-0 \n", - "1 P279 0.527086 Q69974281-P279-Q17589470-ed5eb339-0 \n", - "2 P279 0.695520 Q79132633-P279-Q13357858-4ccf52ce-0 \n", - "3 P279 0.459580 Q2692256-P279-Q174736-e1333ac9-0 \n", - "4 P279 0.201813 Q40554819-P279-Q215627-95d720c4-0 \n", - "... ... ... ... \n", - "999995 P279 0.769255 Q75828417-P279-Q3382119-59b8950c-0 \n", - "999996 P279 0.405016 Q3511974-P279-Q785745-42da354d-0 \n", - "999997 P279 0.314112 Q4598091-P279-Q483373-fd15b986-0 \n", - "999998 P279 0.459560 Q463577-P279-Q625151-4cfe245b-0 \n", - "999999 P279 0.559249 Q13854733-P279-Q11513337-8c2aca91-0 \n", - "\n", - " node2 similarity_value_right \\\n", - "0 Q595003 0.553182 \n", - "1 Q69974281 0.466616 \n", - "2 Q79132633 0.679767 \n", - "3 Q2692256 0.592024 \n", - "4 Q40554819 0.104633 \n", - "... ... ... \n", - "999995 Q75828417 0.621310 \n", - "999996 Q3511974 0.306730 \n", - "999997 Q4598091 0.213652 \n", - "999998 Q463577 0.466203 \n", - "999999 Q13854733 0.626328 \n", - "\n", - " node1_label \\\n", - "0 Sevillana (manzana) \n", - "1 Wii U \n", - "2 2013 World Senior Badminton Championships O35 \n", - "3 Project 30bis \n", - "4 Singaporeans \n", - "... ... \n", - "999995 Sub-prefect of Nogent-le-Rotrou \n", - "999996 Tasmanian Government Railways J class \n", - "999997 Rhaetian Railway ABe 4/16 \n", - "999998 OSE class 120 \n", - "999999 high jumper \n", - "\n", - " node2_label par_label \\\n", - "0 Calville Blanc d\\'hiver apple \n", - "1 Gamatic 7600 home video game console \n", - "2 Slovak Badminton Championships U17 badminton tournament \n", - "3 Bagley-class destroyer destroyer \n", - "4 Sicilians person \n", - "... ... ... \n", - "999995 Sub-prefect of Pont-Audemer sub-prefect \n", - "999996 Alsace-Lorraine E 6 tank locomotive \n", - "999997 CTA 2000 series electric multiple unit \n", - "999998 BLS Re 4/4 electric locomotive \n", - "999999 steeplechase runner athletics competitor \n", - "\n", - " node1_desc \\\n", - "0 apple cultivar \n", - "1 eight-generation home video game console by Ni... \n", - "2 badminton championships \n", - "3 1949 Soviet destroyer class \n", - "4 citizens or residents of Singapore \n", - "... ... \n", - "999995 French official position \n", - "999996 class of 1 Australian 2-6-4-0T locomotive \n", - "999997 multiple unit \n", - "999998 class of Greek electric locomotives \n", - "999999 sportsperson taking part in high jump competit... \n", - "\n", - " node2_desc \\\n", - "0 apple cultivar \n", - "1 Pong console. The same of Otron Gamatic 7600 \n", - "2 badminton championships \n", - "3 class of U.S. destroyers \n", - "4 ethnic group indigenous to the island of Sicil... \n", - "... ... \n", - "999995 former French official position (1800-1926) \n", - "999996 class of 13 German (later French) metre-gauge ... \n", - "999997 class of Chicago Transit Authority cars \n", - "999998 class of 35 Swiss electric locomoties \n", - "999999 sportsperson taking part in steeplechasing com... \n", - "\n", - " node1_sent \\\n", - "0 Sevillana (manzana) apple cultivar is apple \n", - "1 Wii U eight-generation home video game console... \n", - "2 2013 World Senior Badminton Championships O35 ... \n", - "3 Project 30bis 1949 Soviet destroyer class is d... \n", - "4 Singaporeans citizens or residents of Singapor... \n", - "... ... \n", - "999995 Sub-prefect of Nogent-le-Rotrou French officia... \n", - "999996 Tasmanian Government Railways J class class of... \n", - "999997 Rhaetian Railway ABe 4/16 multiple unit is ele... \n", - "999998 OSE class 120 class of Greek electric locomoti... \n", - "999999 high jumper sportsperson taking part in high j... \n", - "\n", - " node2_sent \n", - "0 Calville Blanc d\\'hiver apple cultivar is apple \n", - "1 Gamatic 7600 Pong console. The same of Otron G... \n", - "2 Slovak Badminton Championships U17 badminton c... \n", - "3 Bagley-class destroyer class of U.S. destroyer... \n", - "4 Sicilians ethnic group indigenous to the islan... \n", - "... ... \n", - "999995 Sub-prefect of Pont-Audemer former French offi... \n", - "999996 Alsace-Lorraine E 6 class of 13 German (later ... \n", - "999997 CTA 2000 series class of Chicago Transit Autho... \n", - "999998 BLS Re 4/4 class of 35 Swiss electric locomoti... \n", - "999999 steeplechase runner sportsperson taking part i... \n", - "\n", - "[1000000 rows x 16 columns]" - ] - }, - "execution_count": 196, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered_sibs1" - ] - }, - { - "cell_type": "code", - "execution_count": 197, - "id": "third-canon", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception when trying to download https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip. Response 404\n", - "SentenceTransformer-Model https://sbert.net/models/sentence-transformers/all-distilroberta-v1.zip not found. Try to create it from scratch\n", - "Try to create Transformer Model sentence-transformers/all-distilroberta-v1 with mean pooling\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ff153c8a9ba8458a8c4edf70cee2648d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Batches: 0%| | 0/786 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1_labelnode2_labelno_of_relations
0factorage35167
1free rich company datumsize33222
2free rich company datumrevenue33185
3statecalifornia18062
4supplementmsm glucosamine sulfate15942
\n", - "" - ], - "text/plain": [ - " node1_label node2_label no_of_relations\n", - "0 factor age 35167\n", - "1 free rich company datum size 33222\n", - "2 free rich company datum revenue 33185\n", - "3 state california 18062\n", - "4 supplement msm glucosamine sulfate 15942" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF = pd.read_csv(PROBASE_SOURCE_DIR + 'data-concept/data-concept-instance-relations.txt',header=None, sep='\\t')\n", - "probDF.columns=['node1_label', 'node2_label', 'no_of_relations']\n", - "probDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "multiple-official", - "metadata": {}, - "outputs": [], - "source": [ - "probDF['node1'] = probDF.node1_label.apply(lambda p: labels_to_qnodes_dict[p] if p in labels_to_qnodes_dict else None)\n", - "probDF['node2'] = probDF.node2_label.apply(lambda p: labels_to_qnodes_dict[p] if p in labels_to_qnodes_dict else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "front-bryan", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "acc4b8e178af4e5ebb4358c8d92fb7b4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/33377320 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1_labelnode2_labelno_of_relationsnode1node2
0factorage35167Q103858669Q100343219
1free rich company datumsize33222NoneQ322481
2free rich company datumrevenue33185NoneQ850210
3statecalifornia18062P1310None
4supplementmsm glucosamine sulfate15942Q2915731None
..................
33377315popular legacy datum structurebinary search tree1NoneNone
33377316norwegian foodlefse1NoneNone
33377317freeze skillnew fot1NoneNone
33377318enhanced enforcement initiativemonthly impact inspections of problem mine1NoneNone
33377319enhanced enforcement initiativepattern of violation notification1NoneNone
\n", - "

33377320 rows × 5 columns

\n", - "" - ], - "text/plain": [ - " node1_label \\\n", - "0 factor \n", - "1 free rich company datum \n", - "2 free rich company datum \n", - "3 state \n", - "4 supplement \n", - "... ... \n", - "33377315 popular legacy datum structure \n", - "33377316 norwegian food \n", - "33377317 freeze skill \n", - "33377318 enhanced enforcement initiative \n", - "33377319 enhanced enforcement initiative \n", - "\n", - " node2_label no_of_relations \\\n", - "0 age 35167 \n", - "1 size 33222 \n", - "2 revenue 33185 \n", - "3 california 18062 \n", - "4 msm glucosamine sulfate 15942 \n", - "... ... ... \n", - "33377315 binary search tree 1 \n", - "33377316 lefse 1 \n", - "33377317 new fot 1 \n", - "33377318 monthly impact inspections of problem mine 1 \n", - "33377319 pattern of violation notification 1 \n", - "\n", - " node1 node2 \n", - "0 Q103858669 Q100343219 \n", - "1 None Q322481 \n", - "2 None Q850210 \n", - "3 P1310 None \n", - "4 Q2915731 None \n", - "... ... ... \n", - "33377315 None None \n", - "33377316 None None \n", - "33377317 None None \n", - "33377318 None None \n", - "33377319 None None \n", - "\n", - "[33377320 rows x 5 columns]" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF1" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "tribal-teens", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "33377320" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(probDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "capable-charm", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "955210" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "((~probDF1.node1.isna()) & (~probDF1.node2.isna())).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "southwest-fortune", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "factor 364111\n", - "feature 203549\n", - "issue 201986\n", - "product 172106\n", - "item 158829\n", - " ... \n", - "non opec supplier 1\n", - "proactive industry group 1\n", - "car s important information 1\n", - "mesofronts 1\n", - "bucket related offer 1\n", - "Name: node1_label, Length: 5376524, dtype: int64" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF1.node1_label.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "aggressive-richardson", - "metadata": {}, - "outputs": [], - "source": [ - "probDF1.to_csv(PROBASE_INTERM_FILE,index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "received-unemployment", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes = pd.read_csv(PROBASE_INTERM_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "amino-sarah", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = probDF_Qnodes_DF_WQnodes[(~probDF_Qnodes_DF_WQnodes.node1.isna()) & (~probDF_Qnodes_DF_WQnodes.node2.isna())]" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "hindu-roberts", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 955210.000000\n", - "mean 10.028577\n", - "std 85.410631\n", - "min 1.000000\n", - "25% 1.000000\n", - "50% 2.000000\n", - "75% 5.000000\n", - "max 35167.000000\n", - "Name: no_of_relations, dtype: float64" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['no_of_relations'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "contained-tamil", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " probDF_Qnodes_DF_WQnodes1_subset['similarity_value'] = probDF_Qnodes_DF_WQnodes1_subset['no_of_relations'].apply(np.log10) / np.log10(maxNR)\n" - ] - }, - { - "data": { - "text/plain": [ - "count 955210.000000\n", - "mean 0.091717\n", - "std 0.112667\n", - "min 0.000000\n", - "25% 0.000000\n", - "50% 0.066217\n", - "75% 0.153750\n", - "max 1.000000\n", - "Name: similarity_value, dtype: float64" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "maxNR = probDF_Qnodes_DF_WQnodes1_subset['no_of_relations'].max()\n", - "probDF_Qnodes_DF_WQnodes1_subset['similarity_value'] = probDF_Qnodes_DF_WQnodes1_subset['no_of_relations'].apply(np.log10) / np.log10(maxNR)\n", - "probDF_Qnodes_DF_WQnodes1_subset.similarity_value.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "coastal-composition", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset.to_csv(PROBASE_FINAL_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "polyphonic-louisiana", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "neither-consumer", - "metadata": {}, - "source": [ - "# Class Similarity Datasets\n", - "\n", - "`zcat derived.dwd_isa_class_count.compact.tsv.gz | cut -f 3 | tail -n +2 | sed -e 's/|/\\n/g' -e 's/:/\\t/g' | sort | uniq > class-counts.tsv`" - ] - }, - { - "cell_type": "code", - "execution_count": 201, - "id": "short-heritage", - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "from tqdm.notebook import tqdm\n", - "import json\n", - "from joblib import Parallel, delayed\n", - "import sys\n", - "\n", - "hierDF_transP279_filtered2_class_arr = []\n", - "\n", - "def fetchClassSim(row, similarity_type):\n", - " resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=\"+similarity_type)\n", - " try:\n", - " row['similarity_value'] = float(resp.json()['similarity']) if resp else -1\n", - " except Exception as exc:\n", - " print(exc)\n", - " print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - " row['similarity_value'] = None\n", - " return row" - ] - }, - { - "cell_type": "code", - "execution_count": 200, - "id": "interested-boxing", - "metadata": {}, - "outputs": [], - "source": [ - "P279childPar_class = pd.read_csv(P279_CHILD_PAR_DISTILBERT_COSSIM_FILE)" - ] - }, - { - "cell_type": "code", - "execution_count": 205, - "id": "alternate-trance", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e5667a15f08d470ca3907d5200ca13e7", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/304654 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpandas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mP279childPar_class_new\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mP279childPar_class\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprogress_apply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfetchClassSim\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'class'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/tqdm/std.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(df, func, *args, **kwargs)\u001b[0m\n\u001b[1;32m 808\u001b[0m \u001b[0;31m# on the df using our wrapper (which provides bar updating)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 809\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 810\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdf_function\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwrapper\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 811\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 812\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, func, axis, raw, result_type, args, **kwds)\u001b[0m\n\u001b[1;32m 7763\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7764\u001b[0m )\n\u001b[0;32m-> 7765\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7766\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7767\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapplymap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mna_action\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mDataFrame\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mget_result\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 183\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_raw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 184\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 185\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 186\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapply_empty_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mapply_standard\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 276\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres_index\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_series_generator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 277\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 278\u001b[0m \u001b[0;31m# wrap results\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mapply_series_generator\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 288\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseries_gen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 289\u001b[0m \u001b[0;31m# ignore SettingWithCopy here in case the user mutates\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 290\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 291\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mABCSeries\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 292\u001b[0m \u001b[0;31m# If we have a view on v, we need to make a copy because\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mf\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 110\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 111\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 112\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/tqdm/std.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 803\u001b[0m \u001b[0;31m# take a fast or slow code path; so stop when t.total==t.n\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 804\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 805\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 806\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 807\u001b[0m \u001b[0;31m# Apply the provided function (in **kwargs)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36mfetchClassSim\u001b[0;34m(row, similarity_type)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfetchClassSim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msimilarity_type\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mresp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"https://kgtk.isi.edu/similarity_api?q1=\"\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'node1'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m\"&q2=\"\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'node2'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m\"&embedding_type=\"\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0msimilarity_type\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mrow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'similarity_value'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjson\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'similarity'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mresp\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/api.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 75\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'allow_redirects'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 76\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'get'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 77\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/api.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0;31m# cases, and look like a memory leak in others.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0msessions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSession\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 61\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 540\u001b[0m }\n\u001b[1;32m 541\u001b[0m \u001b[0msend_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msettings\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 542\u001b[0;31m \u001b[0mresp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0msend_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 543\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 544\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 653\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 654\u001b[0m \u001b[0;31m# Send the request\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 655\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0madapter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 656\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 657\u001b[0m \u001b[0;31m# Total elapsed time of the request (approximately)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 437\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 438\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mchunked\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 439\u001b[0;31m resp = conn.urlopen(\n\u001b[0m\u001b[1;32m 440\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 441\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 697\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 698\u001b[0m \u001b[0;31m# Make the request on the httplib connection object.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 699\u001b[0;31m httplib_response = self._make_request(\n\u001b[0m\u001b[1;32m 700\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 701\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_make_request\u001b[0;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001b[0m\n\u001b[1;32m 380\u001b[0m \u001b[0;31m# Trigger any extra validation we need to do.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 381\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 382\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_conn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 383\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mSocketTimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBaseSSLError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 384\u001b[0m \u001b[0;31m# Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;31m# Force connect early to allow us to validate the connection.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1009\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"sock\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# AppEngine might not have `.sock`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1010\u001b[0;31m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1011\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1012\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_verified\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/connection.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 409\u001b[0m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_default_certs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 411\u001b[0;31m self.sock = ssl_wrap_socket(\n\u001b[0m\u001b[1;32m 412\u001b[0m \u001b[0msock\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 413\u001b[0m \u001b[0mkeyfile\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkey_file\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/urllib3/util/ssl_.py\u001b[0m in \u001b[0;36mssl_wrap_socket\u001b[0;34m(sock, keyfile, certfile, cert_reqs, ca_certs, server_hostname, ssl_version, ciphers, ssl_context, ca_cert_dir, key_password, ca_cert_data, tls_in_tls)\u001b[0m\n\u001b[1;32m 379\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mca_certs\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mca_cert_dir\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mca_cert_data\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 380\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 381\u001b[0;31m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_verify_locations\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mca_certs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mca_cert_dir\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mca_cert_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 382\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mIOError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mOSError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 383\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mSSLError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "tqdm.pandas()\n", - "P279childPar_class_new = P279childPar_class.progress_apply(fetchClassSim, axis=1, args=('class',))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "adolescent-nurse", - "metadata": {}, - "outputs": [], - "source": [ - "P279childPar_class_new.to_csv(P279_CHILD_PAR_CLASSSIM_FILE, index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "warming-vertical", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 202, - "id": "imported-mounting", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c0f3c043918e4634a2dc5bdc7f767c7a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/304654 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mP279childPar_class_arr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParallel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_jobs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdelayed\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfetchClassSim\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'class'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mP279childPar_class\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterrows\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtotal\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mP279childPar_class\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/joblib/parallel.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, iterable)\u001b[0m\n\u001b[1;32m 1052\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1053\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_backend\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieval_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1054\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1055\u001b[0m \u001b[0;31m# Make sure that we get a last message telling us we are done\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1056\u001b[0m \u001b[0melapsed_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_start_time\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/joblib/parallel.py\u001b[0m in \u001b[0;36mretrieve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 931\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 932\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_backend\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'supports_timeout'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 933\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 934\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 935\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/joblib/_parallel_backends.py\u001b[0m in \u001b[0;36mwrap_future_result\u001b[0;34m(future, timeout)\u001b[0m\n\u001b[1;32m 540\u001b[0m AsyncResults.get from multiprocessing.\"\"\"\n\u001b[1;32m 541\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 542\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfuture\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 543\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mCfTimeoutError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 544\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTimeoutError\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/concurrent/futures/_base.py\u001b[0m in \u001b[0;36mresult\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 432\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__get_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 434\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_condition\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 435\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_state\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mCANCELLED\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mCANCELLED_AND_NOTIFIED\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/threading.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 300\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# restore state no matter what (e.g., KeyboardInterrupt)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 301\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 302\u001b[0;31m \u001b[0mwaiter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macquire\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 303\u001b[0m \u001b[0mgotit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 304\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "P279childPar_class_arr = Parallel(n_jobs=5)(delayed(fetchClassSim)(row, 'class') for _, row in tqdm(P279childPar_class.iterrows(), total=len(P279childPar_class)))\n", - " " - ] - }, - { - "cell_type": "markdown", - "id": "spread-snapshot", - "metadata": {}, - "source": [ - "## ChildPar" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "supposed-newport", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2 = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "reliable-publisher", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2[['node1', 'node2']].rename(columns={'node1':'q1', 'node2':'q2'}).to_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_min_cols_FOR_CLASS.tsv', sep='\\t', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 212, - "id": "fifty-garden", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "21f6e6799b7d425fa5c2d3d79d6ae2dc", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "215bbc5968f94456a3a50e8d182f06d5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "class_dict = {}\n", - "hierDF_transP279_filtered = pd.read_csv(P279_CHILD_PAR_DISTILBERT_COSSIM_FILE)\n", - "p279QnodesList = set(hierDF_transP279_filtered.node1.to_list() + hierDF_transP279_filtered.node2.to_list())\n", - "with gzip.open(DERIVED_IS_COUNTS_FILE) as class_file:\n", - " for line in tqdm(class_file):\n", - " line = line.decode('utf-8').strip().split('\\t')\n", - " if line[0] in p279QnodesList:\n", - " class_dict[line[0]] = line[2].strip()\n", - "all_class_count_dict = {}\n", - "with open(CLASS_COUNTS_FILE) as class_file:\n", - " for line in tqdm(class_file):\n", - " line = line.split('\\t')\n", - " if line[0] in p279QnodesList:\n", - " all_class_count_dict[line[0]] = line[1].strip()\n", - "\n", - "\n", - "class SemanticSimilarity(object):\n", - " def __init__(self):\n", - "# self.config = config\n", - "# self.embeddings_type = ['class']\n", - " self.N = float(52546967)\n", - " self.all_class_count_dict = all_class_count_dict\n", - " \n", - " def get_qnode_details(self, qnodes: list):\n", - " global class_dict\n", - " qnodes_dict = {}\n", - " qnodes_dict[qnodes[0]] = class_dict.get(qnodes[0],'')\n", - " qnodes_dict[qnodes[1]] = class_dict.get(qnodes[1],'')\n", - " return qnodes_dict\n", - " \n", - " def compute_class_similarity(self, q1, q2):\n", - " qnodes_dict = self.get_qnode_details([q1, q2])\n", - "# print(qnodes_dict)\n", - " feature_dict, feature_count_dict = self.build_qnode_feature_dict(qnodes_dict)\n", - "# print(feature_dict, feature_count_dict)\n", - " normalized_classes_idf = self.normalize_idf_classes(feature_dict, feature_count_dict)\n", - " if q1 in feature_dict and q2 in feature_dict:\n", - " q1_cl = set(feature_dict[q1])\n", - " q2_cl = set(feature_dict[q2])\n", - " q1_q2_intersection = q1_cl.intersection(q2_cl)\n", - "\n", - " _similarity = sum([normalized_classes_idf.get(c) for c in q1_q2_intersection])\n", - " return {\n", - " 'similarity': _similarity\n", - " }\n", - " return {\n", - " 'similarity': None\n", - " }\n", - "\n", - " def build_qnode_feature_dict(self, qnodes_dict: dict) -> (dict, dict):\n", - " feature_dict = {}\n", - " feature_count_dict = {}\n", - "\n", - " for qnode in qnodes_dict:\n", - " feature_val = []\n", - " \n", - " if '|' in qnodes_dict[qnode]:\n", - " cl = qnodes_dict[qnode].split(\"|\")\n", - "\n", - " for c in cl:\n", - " vals = c.split(\":\")\n", - " feature_val.append(vals[0])\n", - " feature_count_dict[vals[0]] = float(vals[1])\n", - " if qnode not in feature_val:\n", - " feature_val.append(qnode)\n", - " if qnode not in feature_count_dict:\n", - " feature_count_dict[qnode] = float(self.all_class_count_dict.get(qnode, 1.0))\n", - " feature_dict[qnode] = feature_val\n", - "\n", - " return feature_dict, feature_count_dict\n", - "\n", - " def normalize_idf_classes(self, feature_dict, feature_count_dict):\n", - "\n", - " classes_count = {}\n", - " for qnode in feature_dict:\n", - "\n", - " classes = feature_dict[qnode]\n", - " for c in classes:\n", - " if c not in classes_count:\n", - " classes_count[c] = 0\n", - " classes_count[c] += 1\n", - "\n", - " classes_idf = self.calculate_idf_features(feature_count_dict)\n", - "\n", - " # multiply class count with idf\n", - " for c in classes_idf:\n", - " classes_idf[c] = classes_count[c] * classes_idf[c]\n", - "\n", - " # normalize the idf scores so that they sum to 1\n", - " classes_idf_sum = sum([classes_idf[x] for x in classes_idf])\n", - " for c in classes_idf:\n", - " classes_idf[c] = classes_idf[c] / classes_idf_sum\n", - "\n", - " return classes_idf\n", - "\n", - " def calculate_idf_features(self, feature_count_dict):\n", - " _ = {}\n", - " for c in feature_count_dict:\n", - " _[c] = math.log(self.N / feature_count_dict[c])\n", - " return _" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "streaming-match", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "flying-perception", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# from tqdm.notebook import tqdm\n", - "# import json\n", - "# from joblib import Parallel, delayed\n", - "# import sys\n", - "\n", - "# hierDF_transP279_filtered2_class_arr = []\n", - "\n", - "# def fetchClassSim(row):\n", - "# resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\")\n", - "# try:\n", - "# row['classSim'] = float(resp.json()['similarity']) if resp else -1\n", - "# except Exception as exc:\n", - "# print(exc)\n", - "# print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - "# row['classSim'] = None\n", - "# row['Resp_code'] = resp\n", - "# return row\n", - "\n", - "# hierDF_transP279_filtered2_class_arr = Parallel(n_jobs=5)(delayed(fetchClassSim)(row) for _, row in tqdm(hierDF_transP279_filtered2.iloc[:100].iterrows(), total=len(hierDF_transP279_filtered2)))\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "empirical-suspect", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2_class_arr" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "helpful-medline", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2_class = pd.DataFrame(hierDF_transP279_filtered2_class_arr)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "activated-excuse", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: []\n", - "Index: []" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "baking-input", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "302108" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.classSim.isna().sum()" - ] - }, - { - "cell_type": "markdown", - "id": "cognitive-decade", - "metadata": {}, - "source": [ - "## Siblings" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "pacific-warehouse", - "metadata": {}, - "outputs": [], - "source": [ - "P279_3M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')\n", - "P279_10M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outdoor-sense", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# from tqdm.notebook import tqdm\n", - "# import json\n", - "# from joblib import Parallel, delayed\n", - "\n", - "# P279_3M_data_class_arr = []\n", - "\n", - "# def fetchClassSim(row):\n", - "# try:\n", - "# resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - "# row['classSim'] = float(resp) if resp else -1\n", - "# except:\n", - "# print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - "# row['classSim'] = None\n", - "# return row\n", - "\n", - "# P279_3M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_3M_data.iterrows(), total=len(P279_3M_data)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "handy-coral", - "metadata": {}, - "outputs": [], - "source": [ - "# import requests\n", - "# from tqdm.notebook import tqdm\n", - "# import json\n", - "# from joblib import Parallel, delayed\n", - "\n", - "# P279_10M_data_class_arr = []\n", - "\n", - "# def fetchClassSim(row):\n", - "# try:\n", - "# resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - "# row['classSim'] = float(resp) if resp else -1\n", - "# except:\n", - "# print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - "# row['classSim'] = None\n", - "# return row\n", - "\n", - "# P279_10M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_10M_data.iterrows(), total=len(P279_10M_data)))" - ] - }, - { - "cell_type": "markdown", - "id": "wired-treatment", - "metadata": {}, - "source": [ - "# JC Similarity Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "textile-productivity", - "metadata": {}, - "source": [ - "## ChildPar" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "aggregate-tiger", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2 = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_filtered.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "cardiac-fence", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "978c7892341342029d881b0bf31a6f66", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/303284 [00:00\n", - " Name: 0, dtype: object,\n", - " Unnamed: 0 1\n", - " id Q17372377-P279-Q100026-fd42bd71-0\n", - " node1 Q17372377\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.700515\n", - " classSim 0.94674\n", - " Resp_code \n", - " Name: 1, dtype: object,\n", - " Unnamed: 0 2\n", - " id Q17372444-P279-Q100026-ca0fc4bd-0\n", - " node1 Q17372444\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.683245\n", - " classSim 0.946647\n", - " Resp_code \n", - " Name: 2, dtype: object,\n", - " Unnamed: 0 3\n", - " id Q17372455-P279-Q100026-c2b1bf36-0\n", - " node1 Q17372455\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.689516\n", - " classSim 0.943256\n", - " Resp_code \n", - " Name: 3, dtype: object,\n", - " Unnamed: 0 4\n", - " id Q2029940-P279-Q100026-ceba4380-0\n", - " node1 Q2029940\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.603161\n", - " classSim 0.809487\n", - " Resp_code \n", - " Name: 4, dtype: object,\n", - " Unnamed: 0 5\n", - " id Q209480-P279-Q100026-a218e96b-0\n", - " node1 Q209480\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.61352\n", - " classSim 0.975716\n", - " Resp_code \n", - " Name: 5, dtype: object,\n", - " Unnamed: 0 6\n", - " id Q77929250-P279-Q100026-964ec021-0\n", - " node1 Q77929250\n", - " label P279\n", - " node2 Q100026\n", - " bert2SentSim 0.76767\n", - " classSim 0.961308\n", - " Resp_code \n", - " Name: 6, dtype: object,\n", - " Unnamed: 0 7\n", - " id Q1087043-P279-Q1000371-945e7797-0\n", - " node1 Q1087043\n", - " label P279\n", - " node2 Q1000371\n", - " bert2SentSim 0.699843\n", - " classSim 0.671266\n", - " Resp_code \n", - " Name: 7, dtype: object,\n", - " Unnamed: 0 8\n", - " id Q384656-P279-Q100047-6147b9a8-0\n", - " node1 Q384656\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 8, dtype: object,\n", - " Unnamed: 0 9\n", - " id Q471089-P279-Q100047-473b504b-0\n", - " node1 Q471089\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.679593\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 9, dtype: object,\n", - " Unnamed: 0 10\n", - " id Q471094-P279-Q100047-14b1b1df-0\n", - " node1 Q471094\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 10, dtype: object,\n", - " Unnamed: 0 11\n", - " id Q471102-P279-Q100047-886a847c-0\n", - " node1 Q471102\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 11, dtype: object,\n", - " Unnamed: 0 12\n", - " id Q471127-P279-Q100047-6738fc46-0\n", - " node1 Q471127\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 12, dtype: object,\n", - " Unnamed: 0 13\n", - " id Q471144-P279-Q100047-766e1fa3-0\n", - " node1 Q471144\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.811462\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 13, dtype: object,\n", - " Unnamed: 0 14\n", - " id Q471158-P279-Q100047-7955aa40-0\n", - " node1 Q471158\n", - " label P279\n", - " node2 Q100047\n", - " bert2SentSim 0.681549\n", - " classSim 0.943953\n", - " Resp_code \n", - " Name: 14, dtype: object,\n", - " Unnamed: 0 15\n", - " id Q100052562-P279-Q100052008-1a4fa432-0\n", - " node1 Q100052562\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.515993\n", - " classSim 0.913344\n", - " Resp_code \n", - " Name: 15, dtype: object,\n", - " Unnamed: 0 16\n", - " id Q100052791-P279-Q100052008-1d15b1ae-0\n", - " node1 Q100052791\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.478483\n", - " classSim 0.907455\n", - " Resp_code \n", - " Name: 16, dtype: object,\n", - " Unnamed: 0 17\n", - " id Q100119502-P279-Q100052008-d2c330a4-0\n", - " node1 Q100119502\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.51221\n", - " classSim 0.913229\n", - " Resp_code \n", - " Name: 17, dtype: object,\n", - " Unnamed: 0 18\n", - " id Q88594442-P279-Q100052008-badba21b-0\n", - " node1 Q88594442\n", - " label P279\n", - " node2 Q100052008\n", - " bert2SentSim 0.424672\n", - " classSim 0.91916\n", - " Resp_code \n", - " Name: 18, dtype: object,\n", - " Unnamed: 0 19\n", - " id Q1133024-P279-Q1000660-6d8a1a17-0\n", - " node1 Q1133024\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.556017\n", - " classSim 0.96031\n", - " Resp_code \n", - " Name: 19, dtype: object,\n", - " Unnamed: 0 20\n", - " id Q1231309-P279-Q1000660-656bad41-0\n", - " node1 Q1231309\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.473025\n", - " classSim 0.987153\n", - " Resp_code \n", - " Name: 20, dtype: object,\n", - " Unnamed: 0 21\n", - " id Q1892554-P279-Q1000660-b60addd4-0\n", - " node1 Q1892554\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.710084\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 21, dtype: object,\n", - " Unnamed: 0 22\n", - " id Q2835946-P279-Q1000660-ff0a5cf9-0\n", - " node1 Q2835946\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.69158\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 22, dtype: object,\n", - " Unnamed: 0 23\n", - " id Q3413373-P279-Q1000660-9d565f5e-0\n", - " node1 Q3413373\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.676028\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 23, dtype: object,\n", - " Unnamed: 0 24\n", - " id Q5611316-P279-Q1000660-6b051008-0\n", - " node1 Q5611316\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.652025\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 24, dtype: object,\n", - " Unnamed: 0 25\n", - " id Q649977-P279-Q1000660-cc4475c9-0\n", - " node1 Q649977\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.548393\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 25, dtype: object,\n", - " Unnamed: 0 26\n", - " id Q7269432-P279-Q1000660-8976e0ff-0\n", - " node1 Q7269432\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.439381\n", - " classSim 0.989483\n", - " Resp_code \n", - " Name: 26, dtype: object,\n", - " Unnamed: 0 27\n", - " id Q844980-P279-Q1000660-5f020e98-0\n", - " node1 Q844980\n", - " label P279\n", - " node2 Q1000660\n", - " bert2SentSim 0.678084\n", - " classSim 0.986632\n", - " Resp_code \n", - " Name: 27, dtype: object,\n", - " Unnamed: 0 28\n", - " id Q1051606-P279-Q1000809-995e5221-0\n", - " node1 Q1051606\n", - " label P279\n", - " node2 Q1000809\n", - " bert2SentSim 0.740599\n", - " classSim 0.912943\n", - " Resp_code \n", - " Name: 28, dtype: object,\n", - " Unnamed: 0 29\n", - " id Q4984171-P279-Q1000809-95749f41-0\n", - " node1 Q4984171\n", - " label P279\n", - " node2 Q1000809\n", - " bert2SentSim 0.808338\n", - " classSim 0.957835\n", - " Resp_code \n", - " Name: 29, dtype: object,\n", - " Unnamed: 0 30\n", - " id Q2047562-P279-Q1001041-45feee81-0\n", - " node1 Q2047562\n", - " label P279\n", - " node2 Q1001041\n", - " bert2SentSim 0.359032\n", - " classSim 0.707243\n", - " Resp_code \n", - " Name: 30, dtype: object,\n", - " Unnamed: 0 31\n", - " id Q8069073-P279-Q1001041-3f13f5bb-0\n", - " node1 Q8069073\n", - " label P279\n", - " node2 Q1001041\n", - " bert2SentSim 0.769952\n", - " classSim 0.849692\n", - " Resp_code \n", - " Name: 31, dtype: object,\n", - " Unnamed: 0 32\n", - " id Q1070955-P279-Q1001051-5df03dac-0\n", - " node1 Q1070955\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.800508\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 32, dtype: object,\n", - " Unnamed: 0 33\n", - " id Q1153367-P279-Q1001051-34783d55-0\n", - " node1 Q1153367\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.837581\n", - " classSim 0.876525\n", - " Resp_code \n", - " Name: 33, dtype: object,\n", - " Unnamed: 0 34\n", - " id Q1958065-P279-Q1001051-d6eb5968-0\n", - " node1 Q1958065\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.848892\n", - " classSim 0.707989\n", - " Resp_code \n", - " Name: 34, dtype: object,\n", - " Unnamed: 0 35\n", - " id Q209680-P279-Q1001051-072eeb1b-0\n", - " node1 Q209680\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.656872\n", - " classSim 0.724838\n", - " Resp_code \n", - " Name: 35, dtype: object,\n", - " Unnamed: 0 36\n", - " id Q2986204-P279-Q1001051-7b21695a-0\n", - " node1 Q2986204\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.816212\n", - " classSim 0.796208\n", - " Resp_code \n", - " Name: 36, dtype: object,\n", - " Unnamed: 0 37\n", - " id Q385530-P279-Q1001051-17db3704-0\n", - " node1 Q385530\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.75061\n", - " classSim 0.780191\n", - " Resp_code \n", - " Name: 37, dtype: object,\n", - " Unnamed: 0 38\n", - " id Q41795401-P279-Q1001051-5747dcc4-0\n", - " node1 Q41795401\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.787191\n", - " classSim 0.88381\n", - " Resp_code \n", - " Name: 38, dtype: object,\n", - " Unnamed: 0 39\n", - " id Q612405-P279-Q1001051-bb6fa17c-0\n", - " node1 Q612405\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.72366\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 39, dtype: object,\n", - " Unnamed: 0 40\n", - " id Q668439-P279-Q1001051-bbba9ea3-0\n", - " node1 Q668439\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.698926\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 40, dtype: object,\n", - " Unnamed: 0 41\n", - " id Q7133779-P279-Q1001051-4fc71627-0\n", - " node1 Q7133779\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.576617\n", - " classSim 0.86936\n", - " Resp_code \n", - " Name: 41, dtype: object,\n", - " Unnamed: 0 42\n", - " id Q7630946-P279-Q1001051-2e78f5b5-0\n", - " node1 Q7630946\n", - " label P279\n", - " node2 Q1001051\n", - " bert2SentSim 0.632298\n", - " classSim 0.796208\n", - " Resp_code \n", - " Name: 42, dtype: object,\n", - " Unnamed: 0 43\n", - " id Q1056352-P279-Q1001059-c1976180-0\n", - " node1 Q1056352\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.717131\n", - " classSim 0.886053\n", - " Resp_code \n", - " Name: 43, dtype: object,\n", - " Unnamed: 0 44\n", - " id Q2123051-P279-Q1001059-18b4564b-0\n", - " node1 Q2123051\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.606046\n", - " classSim 0.465094\n", - " Resp_code \n", - " Name: 44, dtype: object,\n", - " Unnamed: 0 45\n", - " id Q444278-P279-Q1001059-0c74af28-0\n", - " node1 Q444278\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.481163\n", - " classSim 0.881922\n", - " Resp_code \n", - " Name: 45, dtype: object,\n", - " Unnamed: 0 46\n", - " id Q7240696-P279-Q1001059-31dfa177-0\n", - " node1 Q7240696\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.752948\n", - " classSim 0.881922\n", - " Resp_code \n", - " Name: 46, dtype: object,\n", - " Unnamed: 0 47\n", - " id Q85776190-P279-Q1001059-b7a4aad6-0\n", - " node1 Q85776190\n", - " label P279\n", - " node2 Q1001059\n", - " bert2SentSim 0.747289\n", - " classSim 0.53963\n", - " Resp_code \n", - " Name: 47, dtype: object,\n", - " Unnamed: 0 48\n", - " id Q100052008-P279-Q100116222-d1597eca-0\n", - " node1 Q100052008\n", - " label P279\n", - " node2 Q100116222\n", - " bert2SentSim 0.725062\n", - " classSim 0.909364\n", - " Resp_code \n", - " Name: 48, dtype: object,\n", - " Unnamed: 0 49\n", - " id Q27303706-P279-Q100116222-526530c6-0\n", - " node1 Q27303706\n", - " label P279\n", - " node2 Q100116222\n", - " bert2SentSim 0.537653\n", - " classSim 0.917887\n", - " Resp_code \n", - " Name: 49, dtype: object,\n", - " Unnamed: 0 50\n", - " id Q99565932-P279-Q100116222-139f958c-0\n", - " node1 Q99565932\n", - " label P279\n", - " node2 Q100116222\n", - " bert2SentSim 0.691907\n", - " classSim 0.892978\n", - " Resp_code \n", - " Name: 50, dtype: object,\n", - " Unnamed: 0 51\n", - " id Q1416523-P279-Q1001329-2b6d0c1e-0\n", - " node1 Q1416523\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.160931\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 51, dtype: object,\n", - " Unnamed: 0 52\n", - " id Q2963918-P279-Q1001329-c85a352f-0\n", - " node1 Q2963918\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.469497\n", - " classSim 0.878703\n", - " Resp_code \n", - " Name: 52, dtype: object,\n", - " Unnamed: 0 53\n", - " id Q56756850-P279-Q1001329-6cb334b1-0\n", - " node1 Q56756850\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.412103\n", - " classSim 0.363595\n", - " Resp_code \n", - " Name: 53, dtype: object,\n", - " Unnamed: 0 54\n", - " id Q60782200-P279-Q1001329-0b4da903-0\n", - " node1 Q60782200\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.239958\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 54, dtype: object,\n", - " Unnamed: 0 55\n", - " id Q78841106-P279-Q1001329-d474c822-0\n", - " node1 Q78841106\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.496099\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 55, dtype: object,\n", - " Unnamed: 0 56\n", - " id Q798863-P279-Q1001329-c284c2ec-0\n", - " node1 Q798863\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.597623\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 56, dtype: object,\n", - " Unnamed: 0 57\n", - " id Q96337569-P279-Q1001329-b8b30fb9-0\n", - " node1 Q96337569\n", - " label P279\n", - " node2 Q1001329\n", - " bert2SentSim 0.210435\n", - " classSim 0.871646\n", - " Resp_code \n", - " Name: 57, dtype: object,\n", - " Unnamed: 0 58\n", - " id Q3403683-P279-Q100135295-fd0a0a92-0\n", - " node1 Q3403683\n", - " label P279\n", - " node2 Q100135295\n", - " bert2SentSim 0.371629\n", - " classSim 0.811291\n", - " Resp_code \n", - " Name: 58, dtype: object,\n", - " Unnamed: 0 59\n", - " id Q100095237-P279-Q100136951-a7f6f753-0\n", - " node1 Q100095237\n", - " label P279\n", - " node2 Q100136951\n", - " bert2SentSim 0.883361\n", - " classSim 0.909817\n", - " Resp_code \n", - " Name: 59, dtype: object,\n", - " Unnamed: 0 60\n", - " id Q100136066-P279-Q100136951-1e2368cd-0\n", - " node1 Q100136066\n", - " label P279\n", - " node2 Q100136951\n", - " bert2SentSim 0.883361\n", - " classSim 0.843155\n", - " Resp_code \n", - " Name: 60, dtype: object,\n", - " Unnamed: 0 61\n", - " id Q235041-P279-Q100136951-07d30679-0\n", - " node1 Q235041\n", - " label P279\n", - " node2 Q100136951\n", - " bert2SentSim 0.607752\n", - " classSim 0.719618\n", - " Resp_code \n", - " Name: 61, dtype: object,\n", - " Unnamed: 0 62\n", - " id Q22006653-P279-Q1001378-98eddb62-0\n", - " node1 Q22006653\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.366579\n", - " classSim 0.5263\n", - " Resp_code \n", - " Name: 62, dtype: object,\n", - " Unnamed: 0 63\n", - " id Q2895476-P279-Q1001378-9d15228e-0\n", - " node1 Q2895476\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.682378\n", - " classSim 0.75066\n", - " Resp_code \n", - " Name: 63, dtype: object,\n", - " Unnamed: 0 64\n", - " id Q2918907-P279-Q1001378-39c09697-0\n", - " node1 Q2918907\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.813292\n", - " classSim 0.775328\n", - " Resp_code \n", - " Name: 64, dtype: object,\n", - " Unnamed: 0 65\n", - " id Q3516833-P279-Q1001378-30384a7c-0\n", - " node1 Q3516833\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.684669\n", - " classSim 0.916831\n", - " Resp_code \n", - " Name: 65, dtype: object,\n", - " Unnamed: 0 66\n", - " id Q4129855-P279-Q1001378-3ad464f7-0\n", - " node1 Q4129855\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.740775\n", - " classSim 0.905545\n", - " Resp_code \n", - " Name: 66, dtype: object,\n", - " Unnamed: 0 67\n", - " id Q5197004-P279-Q1001378-513f9939-0\n", - " node1 Q5197004\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.642596\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 67, dtype: object,\n", - " Unnamed: 0 68\n", - " id Q7237336-P279-Q1001378-55e73e1a-0\n", - " node1 Q7237336\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.58928\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 68, dtype: object,\n", - " Unnamed: 0 69\n", - " id Q738160-P279-Q1001378-b69af0cb-0\n", - " node1 Q738160\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.813292\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 69, dtype: object,\n", - " Unnamed: 0 70\n", - " id Q8317-P279-Q1001378-a56c669f-0\n", - " node1 Q8317\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.636886\n", - " classSim 0.541961\n", - " Resp_code \n", - " Name: 70, dtype: object,\n", - " Unnamed: 0 71\n", - " id Q86908314-P279-Q1001378-7a81e91b-0\n", - " node1 Q86908314\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.421366\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 71, dtype: object,\n", - " Unnamed: 0 72\n", - " id Q86910224-P279-Q1001378-b427331c-0\n", - " node1 Q86910224\n", - " label P279\n", - " node2 Q1001378\n", - " bert2SentSim 0.584772\n", - " classSim 0.892815\n", - " Resp_code \n", - " Name: 72, dtype: object,\n", - " Unnamed: 0 73\n", - " id Q100148346-P279-Q100148352-003654ac-0\n", - " node1 Q100148346\n", - " label P279\n", - " node2 Q100148352\n", - " bert2SentSim 0.872339\n", - " classSim 0.951283\n", - " Resp_code \n", - " Name: 73, dtype: object,\n", - " Unnamed: 0 74\n", - " id Q27147769-P279-Q100148352-8254b7c4-0\n", - " node1 Q27147769\n", - " label P279\n", - " node2 Q100148352\n", - " bert2SentSim 0.886007\n", - " classSim 0.924902\n", - " Resp_code \n", - " Name: 74, dtype: object,\n", - " Unnamed: 0 75\n", - " id Q14747611-P279-Q100159-567e45a7-0\n", - " node1 Q14747611\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.50114\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 75, dtype: object,\n", - " Unnamed: 0 76\n", - " id Q17089549-P279-Q100159-3247e0d4-0\n", - " node1 Q17089549\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.705335\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 76, dtype: object,\n", - " Unnamed: 0 77\n", - " id Q18923049-P279-Q100159-04db261f-0\n", - " node1 Q18923049\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.861815\n", - " classSim 0.719858\n", - " Resp_code \n", - " Name: 77, dtype: object,\n", - " Unnamed: 0 78\n", - " id Q2056084-P279-Q100159-94d1b7b8-0\n", - " node1 Q2056084\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.782052\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 78, dtype: object,\n", - " Unnamed: 0 79\n", - " id Q5097845-P279-Q100159-c2bd0b24-0\n", - " node1 Q5097845\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.551256\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 79, dtype: object,\n", - " Unnamed: 0 80\n", - " id Q6061403-P279-Q100159-d5101564-0\n", - " node1 Q6061403\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.565718\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 80, dtype: object,\n", - " Unnamed: 0 81\n", - " id Q652653-P279-Q100159-bd6c5d3a-0\n", - " node1 Q652653\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.501037\n", - " classSim 0.837687\n", - " Resp_code \n", - " Name: 81, dtype: object,\n", - " Unnamed: 0 82\n", - " id Q66293226-P279-Q100159-ad4b8016-0\n", - " node1 Q66293226\n", - " label P279\n", - " node2 Q100159\n", - " bert2SentSim 0.8089\n", - " classSim 0.866312\n", - " Resp_code \n", - " Name: 82, dtype: object,\n", - " Unnamed: 0 83\n", - " id Q100166380-P279-Q100166391-4684ea65-0\n", - " node1 Q100166380\n", - " label P279\n", - " node2 Q100166391\n", - " bert2SentSim 0.752609\n", - " classSim 0.799499\n", - " Resp_code \n", - " Name: 83, dtype: object,\n", - " Unnamed: 0 84\n", - " id Q244326-P279-Q100166391-35359099-0\n", - " node1 Q244326\n", - " label P279\n", - " node2 Q100166391\n", - " bert2SentSim 0.522545\n", - " classSim 0.470975\n", - " Resp_code \n", - " Name: 84, dtype: object,\n", - " Unnamed: 0 85\n", - " id Q40551-P279-Q100166391-7242baf9-0\n", - " node1 Q40551\n", - " label P279\n", - " node2 Q100166391\n", - " bert2SentSim 0.74986\n", - " classSim 0.781795\n", - " Resp_code \n", - " Name: 85, dtype: object,\n", - " Unnamed: 0 86\n", - " id Q102108504-P279-Q100171002-7ccf3934-0\n", - " node1 Q102108504\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.680867\n", - " classSim None\n", - " Resp_code \n", - " Name: 86, dtype: object,\n", - " Unnamed: 0 87\n", - " id Q1150647-P279-Q100171002-fb1cad26-0\n", - " node1 Q1150647\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.664551\n", - " classSim 0.795416\n", - " Resp_code \n", - " Name: 87, dtype: object,\n", - " Unnamed: 0 88\n", - " id Q1503443-P279-Q100171002-8282ae74-0\n", - " node1 Q1503443\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.748802\n", - " classSim 0.822611\n", - " Resp_code \n", - " Name: 88, dtype: object,\n", - " Unnamed: 0 89\n", - " id Q2616305-P279-Q100171002-49dc8346-0\n", - " node1 Q2616305\n", - " label P279\n", - " node2 Q100171002\n", - " bert2SentSim 0.646817\n", - " classSim 0.887266\n", - " Resp_code \n", - " Name: 89, dtype: object,\n", - " Unnamed: 0 90\n", - " id Q24050179-P279-Q100195948-90966900-0\n", - " node1 Q24050179\n", - " label P279\n", - " node2 Q100195948\n", - " bert2SentSim 0.652214\n", - " classSim 0.698738\n", - " Resp_code \n", - " Name: 90, dtype: object,\n", - " Unnamed: 0 91\n", - " id Q29479539-P279-Q100195948-e222789a-0\n", - " node1 Q29479539\n", - " label P279\n", - " node2 Q100195948\n", - " bert2SentSim 0.689148\n", - " classSim 0.681145\n", - " Resp_code \n", - " Name: 91, dtype: object,\n", - " Unnamed: 0 92\n", - " id Q308859-P279-Q100195948-a5841742-0\n", - " node1 Q308859\n", - " label P279\n", - " node2 Q100195948\n", - " bert2SentSim 0.750328\n", - " classSim 0.279686\n", - " Resp_code \n", - " Name: 92, dtype: object,\n", - " Unnamed: 0 93\n", - " id Q100251305-P279-Q100251275-02ddd08e-0\n", - " node1 Q100251305\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.486286\n", - " classSim 0.94603\n", - " Resp_code \n", - " Name: 93, dtype: object,\n", - " Unnamed: 0 94\n", - " id Q100251705-P279-Q100251275-fa0c89c7-0\n", - " node1 Q100251705\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.370606\n", - " classSim 0.94603\n", - " Resp_code \n", - " Name: 94, dtype: object,\n", - " Unnamed: 0 95\n", - " id Q16007968-P279-Q100251275-318d5598-0\n", - " node1 Q16007968\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.478886\n", - " classSim 0.9303\n", - " Resp_code \n", - " Name: 95, dtype: object,\n", - " Unnamed: 0 96\n", - " id Q3310017-P279-Q100251275-772909ea-0\n", - " node1 Q3310017\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.57202\n", - " classSim 0.929488\n", - " Resp_code \n", - " Name: 96, dtype: object,\n", - " Unnamed: 0 97\n", - " id Q4855428-P279-Q100251275-fbf2100a-0\n", - " node1 Q4855428\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.545835\n", - " classSim 0.931676\n", - " Resp_code \n", - " Name: 97, dtype: object,\n", - " Unnamed: 0 98\n", - " id Q862086-P279-Q100251275-faf57342-0\n", - " node1 Q862086\n", - " label P279\n", - " node2 Q100251275\n", - " bert2SentSim 0.630551\n", - " classSim 0.948207\n", - " Resp_code \n", - " Name: 98, dtype: object,\n", - " Unnamed: 0 99\n", - " id Q15209696-P279-Q100257358-c4b60f40-0\n", - " node1 Q15209696\n", - " label P279\n", - " node2 Q100257358\n", - " bert2SentSim 0.484455\n", - " classSim 0.610338\n", - " Resp_code \n", - " Name: 99, dtype: object]" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class_arr" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "worth-croatia", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF_transP279_filtered2_class = pd.DataFrame(hierDF_transP279_filtered2_class_arr)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "changing-burning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: []\n", - "Index: []" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "portuguese-practitioner", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "302108" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF_transP279_filtered2_class.classSim.isna().sum()" - ] - }, - { - "cell_type": "markdown", - "id": "breathing-bicycle", - "metadata": {}, - "source": [ - "## Siblings" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "historic-maria", - "metadata": {}, - "outputs": [], - "source": [ - "P279_3M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')\n", - "P279_10M_data = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "spanish-killer", - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "from tqdm.notebook import tqdm\n", - "import json\n", - "from joblib import Parallel, delayed\n", - "\n", - "P279_3M_data_class_arr = []\n", - "\n", - "def fetchClassSim(row):\n", - " try:\n", - " resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['classSim'] = float(resp) if resp else -1\n", - " except:\n", - " print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - " row['classSim'] = None\n", - " return row\n", - "\n", - "P279_3M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_3M_data.iterrows(), total=len(P279_3M_data)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "collectible-modern", - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "from tqdm.notebook import tqdm\n", - "import json\n", - "from joblib import Parallel, delayed\n", - "\n", - "P279_10M_data_class_arr = []\n", - "\n", - "def fetchClassSim(row):\n", - " try:\n", - " resp = requests.get(\"https://kgtk.isi.edu/similarity_api?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['classSim'] = float(resp) if resp else -1\n", - " except:\n", - " print(f\"Resp not found for {row['node1']}, {row['node2']}\")\n", - " row['classSim'] = None\n", - " return row\n", - "\n", - "P279_10M_data_class_arr = Parallel(n_jobs=20)(delayed(fetchClassSim)(row) for _, row in tqdm(P279_10M_data.iterrows(), total=len(P279_10M_data)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "removable-watershed", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fossil-psychiatry", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "rapid-drink", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "liquid-symphony", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "intellectual-rainbow", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "integrated-intention", - "metadata": {}, - "source": [ - "# Wiki-CS" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "functioning-scholarship", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import os\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from matplotlib import pyplot" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "unique-weekend", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF = pd.read_csv('../data/wikidata-cs-20200504.tsv',sep='\\t')\n", - "mapper1 = {'/r/DistinctFrom': 'distinctness',\n", - " '/r/Antonym': 'antonymy',\n", - " '/r/Synonym': 'synonymy',\n", - " '/r/SimilarTo': 'similarity',\n", - " '/r/DerivedFrom': 'derivation',\n", - " '/r/IsA': 'inheritance',\n", - " '/r/PartOf': 'meronymy',\n", - " '/r/MadeOf': 'material',\n", - " '/r/CreatedBy': 'attribution',\n", - " '/r/UsedFor': 'utility',\n", - " '/r/HasProperty': 'properties',\n", - " '/r/Causes': 'causation',\n", - " '/r/HasPrerequisite': 'ordering',\n", - " '/r/HasContext': 'context',\n", - " '/r/RelatedTo': 'other'}\n", - "\n", - "wikiDF['dim'] = wikiDF['relation'].apply(lambda p: mapper1[p])\n", - "wikiDF['category'] = wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' or p == 'similarity' else 'M')\n", - "wikiDF['dim'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "located-swaziland", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' else 'M').value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sharing-scientist", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF[wikiDF.apply(lambda p: p['node1'].startswith('Q') and p['node2'].startswith('Q'), axis=1)]\n", - "wikiDF1.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fewer-place", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF1.rename(columns={'node1':'word1_kg_id', 'node2':'word2_kg_id'})\n", - "wikiDF1[['word1_kg_id', 'word2_kg_id', 'category', 'node1;label', 'node2;label']].to_csv('../data/wikidata-cs_categorized.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "better-planet", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "enhanced-insured", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF = pd.read_csv('../data/wikidata-cs_categorized.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "complex-character", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 100110\n", - "I 1415\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "exciting-anderson", - "metadata": {}, - "outputs": [], - "source": [ - "I_set_size = len(wikiDF[wikiDF.category == 'I'])\n", - "M_sampled_set = wikiDF[wikiDF.category == 'M'].sample(I_set_size, random_state=13)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "thrown-graham", - "metadata": {}, - "outputs": [], - "source": [ - "from itertools import combinations\n", - "\n", - "def find_relation_mapping(mainset, subset, needed_size):\n", - " nodes = set([row['word1_kg_id'] for _,row in subset.iterrows()] \n", - " + [row['word2_kg_id'] for _,row in subset.iterrows()])\n", - " node_label_mappings = {row['word1_kg_id']: row['node1;label'] for _, row in subset.iterrows()}.update(\n", - " {row['word2_kg_id']: row['node2;label'] for _, row in subset.iterrows()}\n", - " )\n", - " mainset_pairs = set([(row['word1_kg_id'], row['word2_kg_id']) for _,row in mainset.iterrows()])\n", - "\n", - " all_pairs = set([pair for pair in list(combinations(list(nodes), 2))[10*needed_size]])\n", - " \n", - " removed_pairs = set()\n", - " \n", - " first_line = True\n", - " with gzip.open('../data/wikidata-20210215-dwd/claims.tsv.gz', 'r') as claims_file:\n", - " for line in tqdm(claims_file,total=98482585):\n", - " if first_line:\n", - " first_line = False\n", - " continue\n", - " line = line.decode(\"utf-8\").strip().split('\\t')\n", - " curr_pair = (line[1], line[3])\n", - " if curr_pair in all_pairs:\n", - " removed_pairs.add(curr_pair)\n", - " newDF = []\n", - " for pair in all_pairs - removed_pairs - mainset_pairs:\n", - " try:\n", - " if pair[0] is None or pair[1] is None:\n", - " continue\n", - " newDF.append(pair[0], pair[1], 'U', node_label_mappings[pair[0]], node_label_mappings[pair[1]])\n", - " except:\n", - " print(pair)\n", - " return pd.DataFrame(newDF, columns=subset.columns)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "immune-jesus", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3df524d9d4fd47e6864fe57299e1f8e5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/98482585 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDnode1node1_labelnode2node2_labelrelation_typeP_SimP_DimH_SimH_Dim...S_SimS_DimN_SimN_DimF_SimF_DimJ_SimJ_DimAverageStdDev
01Q48842375Asian Women's Softball ChampionshipQ1079023championshipparent/child2i2I...2i2I2I3I2.1428570.377964
12Q8001434Wildlife of South AfricaQ104021faunaparent/child2i2I...2i3H2I3I2.2857140.487950
23Q40189366interstellar radiation fieldQ11379energyparent/child3i3I...2i3H3D3I2.7142860.487950
34Q2162453traditional political partyQ7278political partyparent/child1NaN2I...2i2I2I2I1.7142860.487950
45Q6786579materials physicsQ413physicsparent/child2i2I...2i3H2I2H2.1428570.377964
\n", - "

5 rows × 22 columns

\n", - "" - ], - "text/plain": [ - " ID node1 node1_label node2 \\\n", - "0 1 Q48842375 Asian Women's Softball Championship Q1079023 \n", - "1 2 Q8001434 Wildlife of South Africa Q104021 \n", - "2 3 Q40189366 interstellar radiation field Q11379 \n", - "3 4 Q2162453 traditional political party Q7278 \n", - "4 5 Q6786579 materials physics Q413 \n", - "\n", - " node2_label relation_type P_Sim P_Dim H_Sim H_Dim ... S_Sim S_Dim \\\n", - "0 championship parent/child 2 i 2 I ... 2 i \n", - "1 fauna parent/child 2 i 2 I ... 2 i \n", - "2 energy parent/child 3 i 3 I ... 2 i \n", - "3 political party parent/child 1 NaN 2 I ... 2 i \n", - "4 physics parent/child 2 i 2 I ... 2 i \n", - "\n", - " N_Sim N_Dim F_Sim F_Dim J_Sim J_Dim Average StdDev \n", - "0 2 I 2 I 3 I 2.142857 0.377964 \n", - "1 3 H 2 I 3 I 2.285714 0.487950 \n", - "2 3 H 3 D 3 I 2.714286 0.487950 \n", - "3 2 I 2 I 2 I 1.714286 0.487950 \n", - "4 3 H 2 I 2 H 2.142857 0.377964 \n", - "\n", - "[5 rows x 22 columns]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279DF.head()" - ] - }, - { - "cell_type": "markdown", - "id": "illegal-afternoon", - "metadata": {}, - "source": [ - "# Split to ChildPar, Siblings Datasets" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "simplified-journalist", - "metadata": {}, - "outputs": [], - "source": [ - "p279_ChildParDF = p279DF[p279DF.relation_type == 'parent/child']\n", - "p279_SiblingsDF = p279DF[p279DF.relation_type == 'sibling']" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "other-lingerie", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDnode1node1_labelnode2node2_labelrelation_typeP_SimP_DimH_SimH_Dim...S_SimS_DimN_SimN_DimF_SimF_DimJ_SimJ_DimAverageStdDev
2526Q4165229gainQ570938net incomesibling2i2I...2i3D2S2I2.1428570.377964
2627Q30461presidentQ48352head of statesibling1NaN2I...2i2I1NaN2I1.5714290.534522
2728Q381072crisisQ3839081disastersibling2i2I...2i1NaN1NaN2I1.5714290.534522
2829Q39546toolQ7397softwaresibling3i2I...2i3I2I4NaN2.5714290.786796
2930Q1400881propertyQ2574811causesibling4NaN4NaN...4NaN4NaN2S4NaN3.7142860.755929
\n", - "

5 rows × 22 columns

\n", - "
" - ], - "text/plain": [ - " ID node1 node1_label node2 node2_label relation_type P_Sim \\\n", - "25 26 Q4165229 gain Q570938 net income sibling 2 \n", - "26 27 Q30461 president Q48352 head of state sibling 1 \n", - "27 28 Q381072 crisis Q3839081 disaster sibling 2 \n", - "28 29 Q39546 tool Q7397 software sibling 3 \n", - "29 30 Q1400881 property Q2574811 cause sibling 4 \n", - "\n", - " P_Dim H_Sim H_Dim ... S_Sim S_Dim N_Sim N_Dim F_Sim F_Dim J_Sim \\\n", - "25 i 2 I ... 2 i 3 D 2 S 2 \n", - "26 NaN 2 I ... 2 i 2 I 1 NaN 2 \n", - "27 i 2 I ... 2 i 1 NaN 1 NaN 2 \n", - "28 i 2 I ... 2 i 3 I 2 I 4 \n", - "29 NaN 4 NaN ... 4 NaN 4 NaN 2 S 4 \n", - "\n", - " J_Dim Average StdDev \n", - "25 I 2.142857 0.377964 \n", - "26 I 1.571429 0.534522 \n", - "27 I 1.571429 0.534522 \n", - "28 NaN 2.571429 0.786796 \n", - "29 NaN 3.714286 0.755929 \n", - "\n", - "[5 rows x 22 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279_SiblingsDF.head()" - ] - }, - { - "cell_type": "markdown", - "id": "unauthorized-knife", - "metadata": {}, - "source": [ - "# Fetch parents for siblings dataset and create triplets for sentence construction" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "competent-flush", - "metadata": {}, - "outputs": [], - "source": [ - "p279SibWordSet = set(p279_SiblingsDF.node1.to_list() + p279_SiblingsDF.node2.to_list())\n", - "p279SibWordPairSet = list(zip(p279_SiblingsDF.node1.to_list(),p279_SiblingsDF.node2.to_list()))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "liked-cincinnati", - "metadata": {}, - "outputs": [], - "source": [ - "p279_Parents_DF = pd.read_csv('../data/P279_dataset/wikidata-P279.tsv',sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "conventional-binary", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2ranknode2;wikidatatype
0Q100000030-P279-Q14748-30394205-0Q100000030P279Q14748normalwikibase-item
1Q100000058-P279-Q1622444-bd182663-0Q100000058P279Q1622444normalwikibase-item
2Q1000032-P279-Q1813494-0aa0f1dc-0Q1000032P279Q1813494normalwikibase-item
3Q1000032-P279-Q83602-482a1943-0Q1000032P279Q83602normalwikibase-item
4Q1000039-P279-Q11555767-2dddfd86-0Q1000039P279Q11555767normalwikibase-item
\n", - "
" - ], - "text/plain": [ - " id node1 label node2 rank \\\n", - "0 Q100000030-P279-Q14748-30394205-0 Q100000030 P279 Q14748 normal \n", - "1 Q100000058-P279-Q1622444-bd182663-0 Q100000058 P279 Q1622444 normal \n", - "2 Q1000032-P279-Q1813494-0aa0f1dc-0 Q1000032 P279 Q1813494 normal \n", - "3 Q1000032-P279-Q83602-482a1943-0 Q1000032 P279 Q83602 normal \n", - "4 Q1000039-P279-Q11555767-2dddfd86-0 Q1000039 P279 Q11555767 normal \n", - "\n", - " node2;wikidatatype \n", - "0 wikibase-item \n", - "1 wikibase-item \n", - "2 wikibase-item \n", - "3 wikibase-item \n", - "4 wikibase-item " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279_Parents_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "pursuant-lecture", - "metadata": {}, - "outputs": [], - "source": [ - "p279_Parents_DF1 = p279_Parents_DF[p279_Parents_DF.apply(lambda p: p.node1 in p279SibWordSet, axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "smaller-youth", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "noted-drawing", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = p279_Parents_DF1.set_index('node1').join(labelsDF.set_index('node1'), rsuffix='_label')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "female-tower", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = temp1[['id','label','node2','node2_label']]" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "engaged-constant", - "metadata": {}, - "outputs": [], - "source": [ - "temp2 = temp1.reset_index().set_index('node2').join(labelsDF.set_index('node1'), rsuffix='_label2')" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "appropriate-andrew", - "metadata": {}, - "outputs": [], - "source": [ - "temp3 = temp2[['id','node1','label','node2', 'node2_label']].rename(columns={'node2_label': 'node1_label', 'node2':'node2_label'}).reset_index().rename(columns={'index':'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "appreciated-setting", - "metadata": {}, - "outputs": [], - "source": [ - "temp3 = temp3[['id','node1','node1_label','label','node2','node2_label']]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "ruled-screening", - "metadata": {}, - "outputs": [], - "source": [ - "temp3 = temp3[~temp3['node1_label'].isna()]\n", - "temp3 = temp3[~temp3['node2_label'].isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "transsexual-queensland", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3['node2_label'].isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "offensive-replica", - "metadata": {}, - "outputs": [], - "source": [ - "temp3['node1_label'] = temp3['node1_label'].apply(lambda p: p[1:-4])" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "suspended-proof", - "metadata": {}, - "outputs": [], - "source": [ - "temp3['node2_label'] = temp3['node2_label'].apply(lambda p: p[1:-4])" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "completed-immune", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1node1_labellabelnode2node2_label
0Q523-P279-Q1027098-3ce5cd2f-0Q523starP279Q1027098fusor
1Q381072-P279-Q104493-9eab93d0-0Q381072crisisP279Q104493risk
2Q176763-P279-Q11028-28192af9-0Q176763evidenceP279Q11028information
3Q3695082-P279-Q11028-fb23389c-0Q3695082signP279Q11028information
4Q551800-P279-Q11105360-c1431a2e-0Q551800ticketP279Q11105360medium of exchange
.....................
96Q951964-P279-Q8195619-98e34f68-0Q951964food productP279Q8195619human food
97Q30461-P279-Q82955-2d27e026-0Q30461presidentP279Q82955politician
98Q951964-P279-Q868404-10500678-0Q951964food productP279Q868404final good
99Q2006324-P279-Q930933-06286d46-0Q2006324agreementP279Q930933relation
100Q551800-P279-Q986008-b5d5fa1c-0Q551800ticketP279Q986008payment system
\n", - "

100 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " id node1 node1_label label \\\n", - "0 Q523-P279-Q1027098-3ce5cd2f-0 Q523 star P279 \n", - "1 Q381072-P279-Q104493-9eab93d0-0 Q381072 crisis P279 \n", - "2 Q176763-P279-Q11028-28192af9-0 Q176763 evidence P279 \n", - "3 Q3695082-P279-Q11028-fb23389c-0 Q3695082 sign P279 \n", - "4 Q551800-P279-Q11105360-c1431a2e-0 Q551800 ticket P279 \n", - ".. ... ... ... ... \n", - "96 Q951964-P279-Q8195619-98e34f68-0 Q951964 food product P279 \n", - "97 Q30461-P279-Q82955-2d27e026-0 Q30461 president P279 \n", - "98 Q951964-P279-Q868404-10500678-0 Q951964 food product P279 \n", - "99 Q2006324-P279-Q930933-06286d46-0 Q2006324 agreement P279 \n", - "100 Q551800-P279-Q986008-b5d5fa1c-0 Q551800 ticket P279 \n", - "\n", - " node2 node2_label \n", - "0 Q1027098 fusor \n", - "1 Q104493 risk \n", - "2 Q11028 information \n", - "3 Q11028 information \n", - "4 Q11105360 medium of exchange \n", - ".. ... ... \n", - "96 Q8195619 human food \n", - "97 Q82955 politician \n", - "98 Q868404 final good \n", - "99 Q930933 relation \n", - "100 Q986008 payment system \n", - "\n", - "[100 rows x 6 columns]" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "spectacular-blackjack", - "metadata": {}, - "outputs": [], - "source": [ - "pairLeftDF = temp3.copy()\n", - "pairRightDF = temp3.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "metric-persian", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF = pairLeftDF.set_index('node2').join(pairRightDF.set_index('node2'),rsuffix='_right').reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "pleasant-apparel", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF['set_nodes'] = pairsDF.apply(lambda p: str(sorted([p.node1, p.node1_right])), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "national-pleasure", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF1 = pairsDF[~pairsDF['set_nodes'].duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "roman-voluntary", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "196 statements get reduced to 84 statements after checking for duplicate pairs\n" - ] - } - ], - "source": [ - "print(f\"{len(pairsDF)} statements get reduced to {len(pairsDF1)} statements after checking for duplicate pairs\")" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "thick-special", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightset_nodes
0Q1027098Q523-P279-Q1027098-3ce5cd2f-0Q523starP279fusorQ523-P279-Q1027098-3ce5cd2f-0Q523starP279fusor['Q523', 'Q523']
1Q104493Q381072-P279-Q104493-9eab93d0-0Q381072crisisP279riskQ381072-P279-Q104493-9eab93d0-0Q381072crisisP279risk['Q381072', 'Q381072']
2Q11028Q176763-P279-Q11028-28192af9-0Q176763evidenceP279informationQ176763-P279-Q11028-28192af9-0Q176763evidenceP279information['Q176763', 'Q176763']
3Q11028Q176763-P279-Q11028-28192af9-0Q176763evidenceP279informationQ3695082-P279-Q11028-fb23389c-0Q3695082signP279information['Q176763', 'Q3695082']
5Q11028Q3695082-P279-Q11028-fb23389c-0Q3695082signP279informationQ3695082-P279-Q11028-fb23389c-0Q3695082signP279information['Q3695082', 'Q3695082']
\n", - "
" - ], - "text/plain": [ - " node2 id node1 node1_label label \\\n", - "0 Q1027098 Q523-P279-Q1027098-3ce5cd2f-0 Q523 star P279 \n", - "1 Q104493 Q381072-P279-Q104493-9eab93d0-0 Q381072 crisis P279 \n", - "2 Q11028 Q176763-P279-Q11028-28192af9-0 Q176763 evidence P279 \n", - "3 Q11028 Q176763-P279-Q11028-28192af9-0 Q176763 evidence P279 \n", - "5 Q11028 Q3695082-P279-Q11028-fb23389c-0 Q3695082 sign P279 \n", - "\n", - " node2_label id_right node1_right node1_label_right \\\n", - "0 fusor Q523-P279-Q1027098-3ce5cd2f-0 Q523 star \n", - "1 risk Q381072-P279-Q104493-9eab93d0-0 Q381072 crisis \n", - "2 information Q176763-P279-Q11028-28192af9-0 Q176763 evidence \n", - "3 information Q3695082-P279-Q11028-fb23389c-0 Q3695082 sign \n", - "5 information Q3695082-P279-Q11028-fb23389c-0 Q3695082 sign \n", - "\n", - " label_right node2_label_right set_nodes \n", - "0 P279 fusor ['Q523', 'Q523'] \n", - "1 P279 risk ['Q381072', 'Q381072'] \n", - "2 P279 information ['Q176763', 'Q176763'] \n", - "3 P279 information ['Q176763', 'Q3695082'] \n", - "5 P279 information ['Q3695082', 'Q3695082'] " - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "designed-video", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF2 = pairsDF1[['node1', 'node2', 'node1_right', 'node1_label', 'node2_label', 'node1_label_right']]" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "scenic-reaction", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF3 = pairsDF2.rename(columns={'node1_right': 'node2', 'node2': 'parent', 'node1_label_right': 'node2_label', 'node2_label': 'par_label'})" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "substantial-frederick", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1parentnode2node1_labelpar_labelnode2_label
0Q523Q1027098Q523starfusorstar
1Q381072Q104493Q381072crisisriskcrisis
2Q176763Q11028Q176763evidenceinformationevidence
3Q176763Q11028Q3695082evidenceinformationsign
5Q3695082Q11028Q3695082signinformationsign
\n", - "
" - ], - "text/plain": [ - " node1 parent node2 node1_label par_label node2_label\n", - "0 Q523 Q1027098 Q523 star fusor star\n", - "1 Q381072 Q104493 Q381072 crisis risk crisis\n", - "2 Q176763 Q11028 Q176763 evidence information evidence\n", - "3 Q176763 Q11028 Q3695082 evidence information sign\n", - "5 Q3695082 Q11028 Q3695082 sign information sign" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "female-native", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1parentnode2node1_labelpar_labelnode2_label
0Q523Q1027098Q523starfusorstar
1Q381072Q104493Q381072crisisriskcrisis
2Q176763Q11028Q176763evidenceinformationevidence
3Q176763Q11028Q3695082evidenceinformationsign
5Q3695082Q11028Q3695082signinformationsign
.....................
176Q8928Q6999Q8928constellationastronomical objectconstellation
177Q11028Q7184903Q11028informationabstract objectinformation
178Q11028Q7184903Q3695082informationabstract objectsign
179Q11028Q7184903Q450informationabstract objectmind
182Q3695082Q7184903Q450signabstract objectmind
\n", - "

84 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " node1 parent node2 node1_label par_label \\\n", - "0 Q523 Q1027098 Q523 star fusor \n", - "1 Q381072 Q104493 Q381072 crisis risk \n", - "2 Q176763 Q11028 Q176763 evidence information \n", - "3 Q176763 Q11028 Q3695082 evidence information \n", - "5 Q3695082 Q11028 Q3695082 sign information \n", - ".. ... ... ... ... ... \n", - "176 Q8928 Q6999 Q8928 constellation astronomical object \n", - "177 Q11028 Q7184903 Q11028 information abstract object \n", - "178 Q11028 Q7184903 Q3695082 information abstract object \n", - "179 Q11028 Q7184903 Q450 information abstract object \n", - "182 Q3695082 Q7184903 Q450 sign abstract object \n", - "\n", - " node2_label \n", - "0 star \n", - "1 crisis \n", - "2 evidence \n", - "3 sign \n", - "5 sign \n", - ".. ... \n", - "176 constellation \n", - "177 information \n", - "178 sign \n", - "179 mind \n", - "182 mind \n", - "\n", - "[84 rows x 6 columns]" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF3" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "modified-effects", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF4 = pairsDF3[pairsDF3.apply(lambda p: (p.node1, p.node2) in p279SibWordPairSet, axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "tribal-consumer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "25" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(pairsDF4)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "integrated-annex", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1parentnode2node1_labelpar_labelnode2_label
3Q176763Q11028Q3695082evidenceinformationsign
12Q1308677Q1190554Q21171241deploymentoccurrencedeparture
14Q1308677Q1190554Q3839081deploymentoccurrencedisaster
20Q198Q1190554Q3839081waroccurrencedisaster
38Q381072Q1190554Q3839081crisisoccurrencedisaster
46Q186360Q11974939Q39631nursehealth professionalphysician
52Q4165229Q1527264Q570938gainincomenet income
71Q192935Q2095Q3314483seafoodfoodfruit
75Q3314483Q2095Q951964fruitfoodfood product
85Q191067Q234460Q49848articletextdocument
88Q42470Q234460Q49848mottotextdocument
93Q7364Q24060765Q9635eyeanimal organmouth
97Q39546Q2424752Q7397toolproductsoftware
98Q39546Q2424752Q951964toolproductfood product
101Q7397Q2424752Q951964softwareproductfood product
114Q30461Q294414Q48352presidentpublic officehead of state
118Q11499267Q2995644Q50000defeatresultvictory
129Q1400881Q35120Q2574811propertyentitycause
139Q154Q40050Q8486alcoholic beveragedrinkcoffee
143Q16917Q4260475Q1774898hospitalmedical facilityclinic
158Q2006324Q49848Q551800agreementdocumentticket
159Q2006324Q49848Q98069877agreementdocumentvideo
168Q15921555Q61509Q17990955flighttravelsea voyage
174Q523Q6999Q8928starastronomical objectconstellation
179Q11028Q7184903Q450informationabstract objectmind
\n", - "
" - ], - "text/plain": [ - " node1 parent node2 node1_label par_label \\\n", - "3 Q176763 Q11028 Q3695082 evidence information \n", - "12 Q1308677 Q1190554 Q21171241 deployment occurrence \n", - "14 Q1308677 Q1190554 Q3839081 deployment occurrence \n", - "20 Q198 Q1190554 Q3839081 war occurrence \n", - "38 Q381072 Q1190554 Q3839081 crisis occurrence \n", - "46 Q186360 Q11974939 Q39631 nurse health professional \n", - "52 Q4165229 Q1527264 Q570938 gain income \n", - "71 Q192935 Q2095 Q3314483 seafood food \n", - "75 Q3314483 Q2095 Q951964 fruit food \n", - "85 Q191067 Q234460 Q49848 article text \n", - "88 Q42470 Q234460 Q49848 motto text \n", - "93 Q7364 Q24060765 Q9635 eye animal organ \n", - "97 Q39546 Q2424752 Q7397 tool product \n", - "98 Q39546 Q2424752 Q951964 tool product \n", - "101 Q7397 Q2424752 Q951964 software product \n", - "114 Q30461 Q294414 Q48352 president public office \n", - "118 Q11499267 Q2995644 Q50000 defeat result \n", - "129 Q1400881 Q35120 Q2574811 property entity \n", - "139 Q154 Q40050 Q8486 alcoholic beverage drink \n", - "143 Q16917 Q4260475 Q1774898 hospital medical facility \n", - "158 Q2006324 Q49848 Q551800 agreement document \n", - "159 Q2006324 Q49848 Q98069877 agreement document \n", - "168 Q15921555 Q61509 Q17990955 flight travel \n", - "174 Q523 Q6999 Q8928 star astronomical object \n", - "179 Q11028 Q7184903 Q450 information abstract object \n", - "\n", - " node2_label \n", - "3 sign \n", - "12 departure \n", - "14 disaster \n", - "20 disaster \n", - "38 disaster \n", - "46 physician \n", - "52 net income \n", - "71 fruit \n", - "75 food product \n", - "85 document \n", - "88 document \n", - "93 mouth \n", - "97 software \n", - "98 food product \n", - "101 food product \n", - "114 head of state \n", - "118 victory \n", - "129 cause \n", - "139 coffee \n", - "143 clinic \n", - "158 ticket \n", - "159 video \n", - "168 sea voyage \n", - "174 constellation \n", - "179 mind " - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF4" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "beginning-ethnic", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " pairsDF4['comb_sent'] = pairsDF4.apply(lambda p: p.par_label + ' such as ' + p.node1_label + ' and ' + p.node2_label, axis=1)\n" - ] - } - ], - "source": [ - "pairsDF4['comb_sent'] = pairsDF4.apply(lambda p: p.par_label + ' such as ' + p.node1_label + ' and ' + p.node2_label, axis=1)\n", - "# pairsDF4['comb_sent'] = pairsDF4.apply(lambda p: p.par_label + ' is typically ' + p.node1_label + ' or ' + p.node2_label, axis=1)\n", - "# pairsDF4['comb_sent'] = pairsDF4.apply(lambda p: p.node1_label + ' and ' + p.node2_label + ' are examples of ' + p.par_label, axis=1)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "subtle-owner", - "metadata": {}, - "outputs": [], - "source": [ - "p279_SiblingsDF1 = p279_SiblingsDF.set_index(['node1', 'node2']).join(pairsDF4.set_index(['node1', 'node2'])[['parent', 'par_label']]).reset_index()" - ] - }, - { - "cell_type": "markdown", - "id": "generous-russian", - "metadata": {}, - "source": [ - "# Language Models Utility Functions" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "indie-costs", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getBERTSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "secondary-temperature", - "metadata": {}, - "outputs": [], - "source": [ - "from transformers import GPT2LMHeadModel, GPT2Tokenizer\n", - "model = GPT2LMHeadModel.from_pretrained('gpt2')\n", - "tokenizer = GPT2Tokenizer.from_pretrained('gpt2')\n", - "\n", - "def getGPT2Score(sent1):\n", - " # input sentence tensor\n", - " # output score\n", - " tokens_tensor = tokenizer.encode(sent1, add_special_tokens=False, return_tensors=\"pt\")\n", - " loss = model(tokens_tensor, labels=tokens_tensor)[0]\n", - "# print(tokens_tensor.size(1))\n", - " return np.exp(loss.cpu().detach().numpy() / tokens_tensor.size(1))" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "religious-warrant", - "metadata": {}, - "outputs": [], - "source": [ - "from pytorch_pretrained_bert import BertTokenizer,BertForMaskedLM\n", - "import torch\n", - "import pandas as pd\n", - "import math\n", - "\n", - "bertMaskedLM = BertForMaskedLM.from_pretrained('bert-base-uncased')\n", - "berttokenizer = BertTokenizer.from_pretrained('bert-base-uncased')\n", - "\n", - "def getBERTScore(sentence):\n", - " tokenize_input = berttokenizer.tokenize(sentence)\n", - " tensor_input = torch.tensor([berttokenizer.convert_tokens_to_ids(tokenize_input)])\n", - " predictions=bertMaskedLM(tensor_input)\n", - " loss_fct = torch.nn.CrossEntropyLoss()\n", - " loss = loss_fct(predictions.squeeze(),tensor_input.squeeze()).data \n", - " return math.exp(loss / tensor_input.size(1))" - ] - }, - { - "cell_type": "markdown", - "id": "exact-mirror", - "metadata": {}, - "source": [ - "# Analysis" - ] - }, - { - "cell_type": "markdown", - "id": "boxed-electric", - "metadata": {}, - "source": [ - "## ChildPar" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "aware-netherlands", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDnode1node1_labelnode2node2_labelrelation_typeP_SimP_DimH_SimH_Dim...S_SimS_DimN_SimN_DimF_SimF_DimJ_SimJ_DimAverageStdDev
01Q48842375Asian Women's Softball ChampionshipQ1079023championshipparent/child2i2I...2i2I2I3I2.1428570.377964
12Q8001434Wildlife of South AfricaQ104021faunaparent/child2i2I...2i3H2I3I2.2857140.487950
23Q40189366interstellar radiation fieldQ11379energyparent/child3i3I...2i3H3D3I2.7142860.487950
34Q2162453traditional political partyQ7278political partyparent/child1NaN2I...2i2I2I2I1.7142860.487950
45Q6786579materials physicsQ413physicsparent/child2i2I...2i3H2I2H2.1428570.377964
\n", - "

5 rows × 22 columns

\n", - "
" - ], - "text/plain": [ - " ID node1 node1_label node2 \\\n", - "0 1 Q48842375 Asian Women's Softball Championship Q1079023 \n", - "1 2 Q8001434 Wildlife of South Africa Q104021 \n", - "2 3 Q40189366 interstellar radiation field Q11379 \n", - "3 4 Q2162453 traditional political party Q7278 \n", - "4 5 Q6786579 materials physics Q413 \n", - "\n", - " node2_label relation_type P_Sim P_Dim H_Sim H_Dim ... S_Sim S_Dim \\\n", - "0 championship parent/child 2 i 2 I ... 2 i \n", - "1 fauna parent/child 2 i 2 I ... 2 i \n", - "2 energy parent/child 3 i 3 I ... 2 i \n", - "3 political party parent/child 1 NaN 2 I ... 2 i \n", - "4 physics parent/child 2 i 2 I ... 2 i \n", - "\n", - " N_Sim N_Dim F_Sim F_Dim J_Sim J_Dim Average StdDev \n", - "0 2 I 2 I 3 I 2.142857 0.377964 \n", - "1 3 H 2 I 3 I 2.285714 0.487950 \n", - "2 3 H 3 D 3 I 2.714286 0.487950 \n", - "3 2 I 2 I 2 I 1.714286 0.487950 \n", - "4 3 H 2 I 2 H 2.142857 0.377964 \n", - "\n", - "[5 rows x 22 columns]" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279_ChildParDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "coral-proportion", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " p279_ChildParDF['sent'] = p279_ChildParDF.apply(lambda p: p['node1_label'] + ' is ' + p['node2_label'], axis=1)\n" - ] - } - ], - "source": [ - "p279_ChildParDF['sent'] = p279_ChildParDF.apply(lambda p: p['node1_label'] + ' is ' + p['node2_label'], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "inappropriate-disposal", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3.1961464881896973 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " p279_ChildParDF['node1_emb'] = pd.Series(list(getBERTSentEmbeddings(p279_ChildParDF.node1_label, 'bert-base-nli-mean-tokens')))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.0921180248260498 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " p279_ChildParDF['node2_emb'] = pd.Series(list(getBERTSentEmbeddings(p279_ChildParDF.node2_label, 'bert-base-nli-mean-tokens')))\n", - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " p279_ChildParDF['bert2SentSim'] = p279_ChildParDF.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " p279_ChildParDF['bert2SentSim_normed'] = p279_ChildParDF['bert2SentSim'].apply(lambda p: 4 - 3 * p)\n" - ] - } - ], - "source": [ - "p279_ChildParDF['node1_emb'] = pd.Series(list(getBERTSentEmbeddings(p279_ChildParDF.node1_label, 'bert-base-nli-mean-tokens')))\n", - "p279_ChildParDF['node2_emb'] = pd.Series(list(getBERTSentEmbeddings(p279_ChildParDF.node2_label, 'bert-base-nli-mean-tokens')))\n", - "p279_ChildParDF['bert2SentSim'] = p279_ChildParDF.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)\n", - "p279_ChildParDF['bert2SentSim_normed'] = p279_ChildParDF['bert2SentSim'].apply(lambda p: 4 - 3 * p)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "domestic-wealth", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " p279_ChildParDF['gpt2Ppl'] = p279_ChildParDF.sent.apply(getGPT2Score)\n", - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " p279_ChildParDF['gpt2Ppl_normed'] = p279_ChildParDF['gpt2Ppl'].apply(lambda p: 4 - 3/(1+p))\n" - ] - } - ], - "source": [ - "p279_ChildParDF['gpt2Ppl'] = p279_ChildParDF.sent.apply(getGPT2Score)\n", - "p279_ChildParDF['gpt2Ppl_normed'] = p279_ChildParDF['gpt2Ppl'].apply(lambda p: 4 - 3/(1+p))" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "defensive-development", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " p279_ChildParDF['bert_ppl'] = p279_ChildParDF.sent.apply(getBERTScore)\n", - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " p279_ChildParDF['bert_ppl_normed'] = p279_ChildParDF['bert_ppl'].apply(lambda p: 4 - 3 / (1+p))\n" - ] - } - ], - "source": [ - "p279_ChildParDF['bert_ppl'] = p279_ChildParDF.sent.apply(getBERTScore)\n", - "p279_ChildParDF['bert_ppl_normed'] = p279_ChildParDF['bert_ppl'].apply(lambda p: 4 - 3 / (1+p))" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "encouraging-export", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDP_SimH_SimG_SimS_SimN_SimF_SimJ_SimAverageStdDevbert2SentSimbert2SentSim_normedgpt2Pplgpt2Ppl_normedbert_pplbert_ppl_normed
count25.00000025.00000025.0000025.00000025.025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.000000
mean13.0000002.3200002.240002.3600002.02.6400002.2000002.5600002.3314290.4537330.6186592.1440243.9578453.2995634.2728883.282017
std7.3598010.5567760.435890.7571880.00.5686240.4082480.5066230.2907880.1987870.1392030.4176092.2263310.2370213.0682900.309286
min1.0000001.0000002.000001.0000002.02.0000002.0000002.0000001.7142860.0000000.2538931.3568931.7306862.9013751.4327722.766839
25%7.0000002.0000002.000002.0000002.02.0000002.0000002.0000002.1428570.3779640.5327261.8537002.4115333.1206301.9053732.967430
50%13.0000002.0000002.000002.0000002.03.0000002.0000003.0000002.2857140.4879500.6026352.1920963.2293353.2906693.1367673.274796
75%19.0000003.0000002.000003.0000002.03.0000002.0000003.0000002.5714290.5345220.7154332.4018224.9495543.4957616.1022263.577597
max25.0000003.0000003.000004.0000002.04.0000003.0000003.0000002.8571430.7867960.8810363.2383219.9256283.72541615.1218113.813917
\n", - "
" - ], - "text/plain": [ - " ID P_Sim H_Sim G_Sim S_Sim N_Sim F_Sim \\\n", - "count 25.000000 25.000000 25.00000 25.000000 25.0 25.000000 25.000000 \n", - "mean 13.000000 2.320000 2.24000 2.360000 2.0 2.640000 2.200000 \n", - "std 7.359801 0.556776 0.43589 0.757188 0.0 0.568624 0.408248 \n", - "min 1.000000 1.000000 2.00000 1.000000 2.0 2.000000 2.000000 \n", - "25% 7.000000 2.000000 2.00000 2.000000 2.0 2.000000 2.000000 \n", - "50% 13.000000 2.000000 2.00000 2.000000 2.0 3.000000 2.000000 \n", - "75% 19.000000 3.000000 2.00000 3.000000 2.0 3.000000 2.000000 \n", - "max 25.000000 3.000000 3.00000 4.000000 2.0 4.000000 3.000000 \n", - "\n", - " J_Sim Average StdDev bert2SentSim bert2SentSim_normed \\\n", - "count 25.000000 25.000000 25.000000 25.000000 25.000000 \n", - "mean 2.560000 2.331429 0.453733 0.618659 2.144024 \n", - "std 0.506623 0.290788 0.198787 0.139203 0.417609 \n", - "min 2.000000 1.714286 0.000000 0.253893 1.356893 \n", - "25% 2.000000 2.142857 0.377964 0.532726 1.853700 \n", - "50% 3.000000 2.285714 0.487950 0.602635 2.192096 \n", - "75% 3.000000 2.571429 0.534522 0.715433 2.401822 \n", - "max 3.000000 2.857143 0.786796 0.881036 3.238321 \n", - "\n", - " gpt2Ppl gpt2Ppl_normed bert_ppl bert_ppl_normed \n", - "count 25.000000 25.000000 25.000000 25.000000 \n", - "mean 3.957845 3.299563 4.272888 3.282017 \n", - "std 2.226331 0.237021 3.068290 0.309286 \n", - "min 1.730686 2.901375 1.432772 2.766839 \n", - "25% 2.411533 3.120630 1.905373 2.967430 \n", - "50% 3.229335 3.290669 3.136767 3.274796 \n", - "75% 4.949554 3.495761 6.102226 3.577597 \n", - "max 9.925628 3.725416 15.121811 3.813917 " - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279_ChildParDF.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "norwegian-parks", - "metadata": {}, - "source": [ - "### Correlation Coefficients" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "careful-combining", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "corporate-potato", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.2084662497345841, pvalue=0.1621791786562139)" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'bert2SentSim_normed'\n", - "stats.kendalltau(p279_ChildParDF[col1], p279_ChildParDF['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "sacred-oklahoma", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.29501981151634904, pvalue=0.1522370779127172)" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'bert2SentSim_normed'\n", - "stats.spearmanr(p279_ChildParDF[col1], p279_ChildParDF['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "korean-tamil", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=-0.03886658893356653, pvalue=0.7943986542617295)" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'bert_ppl_normed'\n", - "stats.kendalltau(p279_ChildParDF[col1], p279_ChildParDF['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "instructional-receptor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=-0.04475894238044873, pvalue=0.8317611751488296)" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'bert_ppl_normed'\n", - "stats.spearmanr(p279_ChildParDF[col1], p279_ChildParDF['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "hairy-workstation", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.017666631333439334, pvalue=0.905706418385764)" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'gpt2Ppl_normed'\n", - "stats.kendalltau(p279_ChildParDF[col1], p279_ChildParDF['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "wanted-indian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.05526756363498887, pvalue=0.7930202504178021)" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'gpt2Ppl_normed'\n", - "stats.spearmanr(p279_ChildParDF[col1], p279_ChildParDF['Average'])" - ] - }, - { - "cell_type": "markdown", - "id": "scheduled-queen", - "metadata": {}, - "source": [ - "## Siblings" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "accepted-institution", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2IDnode1_labelnode2_labelrelation_typeP_SimP_DimH_SimH_Dim...N_SimN_DimF_SimF_DimJ_SimJ_DimAverageStdDevparentpar_label
0Q4165229Q57093826gainnet incomesibling2i2I...3D2S2I2.1428570.377964Q1527264income
1Q30461Q4835227presidenthead of statesibling1NaN2I...2I1NaN2I1.5714290.534522Q294414public office
2Q381072Q383908128crisisdisastersibling2i2I...1NaN1NaN2I1.5714290.534522Q1190554occurrence
3Q39546Q739729toolsoftwaresibling3i2I...3I2I4NaN2.5714290.786796Q2424752product
4Q1400881Q257481130propertycausesibling4NaN4NaN...4NaN2S4NaN3.7142860.755929Q35120entity
\n", - "

5 rows × 24 columns

\n", - "
" - ], - "text/plain": [ - " node1 node2 ID node1_label node2_label relation_type P_Sim \\\n", - "0 Q4165229 Q570938 26 gain net income sibling 2 \n", - "1 Q30461 Q48352 27 president head of state sibling 1 \n", - "2 Q381072 Q3839081 28 crisis disaster sibling 2 \n", - "3 Q39546 Q7397 29 tool software sibling 3 \n", - "4 Q1400881 Q2574811 30 property cause sibling 4 \n", - "\n", - " P_Dim H_Sim H_Dim ... N_Sim N_Dim F_Sim F_Dim J_Sim J_Dim Average \\\n", - "0 i 2 I ... 3 D 2 S 2 I 2.142857 \n", - "1 NaN 2 I ... 2 I 1 NaN 2 I 1.571429 \n", - "2 i 2 I ... 1 NaN 1 NaN 2 I 1.571429 \n", - "3 i 2 I ... 3 I 2 I 4 NaN 2.571429 \n", - "4 NaN 4 NaN ... 4 NaN 2 S 4 NaN 3.714286 \n", - "\n", - " StdDev parent par_label \n", - "0 0.377964 Q1527264 income \n", - "1 0.534522 Q294414 public office \n", - "2 0.534522 Q1190554 occurrence \n", - "3 0.786796 Q2424752 product \n", - "4 0.755929 Q35120 entity \n", - "\n", - "[5 rows x 24 columns]" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279_SiblingsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "quarterly-conditioning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2node1_labelnode2_labelpar_label
0Q4165229Q570938gainnet incomeincome
1Q30461Q48352presidenthead of statepublic office
2Q381072Q3839081crisisdisasteroccurrence
3Q39546Q7397toolsoftwareproduct
4Q1400881Q2574811propertycauseentity
\n", - "
" - ], - "text/plain": [ - " node1 node2 node1_label node2_label par_label\n", - "0 Q4165229 Q570938 gain net income income\n", - "1 Q30461 Q48352 president head of state public office\n", - "2 Q381072 Q3839081 crisis disaster occurrence\n", - "3 Q39546 Q7397 tool software product\n", - "4 Q1400881 Q2574811 property cause entity" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279_SiblingsDF1[['node1', 'node2', 'node1_label', 'node2_label', 'par_label']].head()" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "vocational-trout", - "metadata": {}, - "outputs": [], - "source": [ - "# p279_SiblingsDF1['comb_sent'] = p279_SiblingsDF1.apply(lambda p: p.par_label + ' such as ' + p.node1_label + ' and ' + p.node2_label, axis=1)\n", - "p279_SiblingsDF1['comb_sent'] = p279_SiblingsDF1.apply(lambda p: p.par_label + ' is typically ' + p.node1_label + ' or ' + p.node2_label, axis=1)\n", - "# p279_SiblingsDF1['comb_sent'] = p279_SiblingsDF1.apply(lambda p: p.node1_label + ' and ' + p.node2_label + ' are examples of ' + p.par_label, axis=1)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "sapphire-penetration", - "metadata": {}, - "outputs": [], - "source": [ - "p279_SiblingsDF1['node1_sent'] = p279_SiblingsDF1.apply(lambda p: p.node1_label + ' is ' + p.par_label, axis=1)\n", - "p279_SiblingsDF1['node2_sent'] = p279_SiblingsDF1.apply(lambda p: p.node2_label + ' is ' + p.par_label, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "collective-parks", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.08741140365600586 s\n", - "0.10142040252685547 s\n" - ] - } - ], - "source": [ - "p279_SiblingsDF1['node1_emb'] = pd.Series(list(getBERTSentEmbeddings(p279_SiblingsDF1.node1_sent, 'bert-base-nli-mean-tokens')))\n", - "p279_SiblingsDF1['node2_emb'] = pd.Series(list(getBERTSentEmbeddings(p279_SiblingsDF1.node2_sent, 'bert-base-nli-mean-tokens')))\n", - "p279_SiblingsDF1['bert2SentSim'] = p279_SiblingsDF1.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)\n", - "p279_SiblingsDF1['bert2SentSim_normed'] = p279_SiblingsDF1['bert2SentSim'].apply(lambda p: 4 - 3 * p)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "thrown-basis", - "metadata": {}, - "outputs": [], - "source": [ - "p279_SiblingsDF1['gpt2Ppl'] = p279_SiblingsDF1.comb_sent.apply(getGPT2Score)\n", - "p279_SiblingsDF1['gpt2Ppl_normed'] = p279_SiblingsDF1['gpt2Ppl'].apply(lambda p: 4 - 3/(1+p))" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "external-genome", - "metadata": {}, - "outputs": [], - "source": [ - "p279_SiblingsDF1['bert_ppl'] = p279_SiblingsDF1.comb_sent.apply(getBERTScore)\n", - "p279_SiblingsDF1['bert_ppl_normed'] = p279_SiblingsDF1['bert_ppl'].apply(lambda p: 4 - 3 / (1+p))" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "electoral-finger", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDP_SimH_SimG_SimS_SimN_SimF_SimJ_SimAverageStdDevbert2SentSimbert2SentSim_normedgpt2Pplgpt2Ppl_normedbert_pplbert_ppl_normed
count25.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.000000
mean38.0000002.8800003.0000002.8000002.6000002.8400002.2000002.9600002.7542860.5620320.8024491.5926522.7223573.1769622.4518303.106608
std7.3598010.9273620.8164971.1547010.8164970.9433980.8660250.8888190.7731900.2143790.1272880.3818630.5567250.1210810.5753100.153490
min26.0000001.0000002.0000001.0000002.0000001.0000001.0000002.0000001.5714290.0000000.4690921.1131441.7091402.8926381.4763612.788545
25%32.0000003.0000002.0000002.0000002.0000002.0000002.0000002.0000002.2857140.4879500.7366851.2814992.3972233.1169261.9497842.982976
50%38.0000003.0000003.0000003.0000002.0000003.0000002.0000003.0000002.5714290.5345220.8224901.5325312.6190823.1710612.5906673.164501
75%44.0000003.0000004.0000004.0000003.0000004.0000002.0000004.0000003.5714290.7559290.9061671.7899443.0156663.2529262.9475053.240026
max50.0000004.0000004.0000004.0000004.0000004.0000004.0000004.0000004.0000000.7867960.9622852.5927233.8467733.3810313.5538393.341215
\n", - "
" - ], - "text/plain": [ - " ID P_Sim H_Sim G_Sim S_Sim N_Sim \\\n", - "count 25.000000 25.000000 25.000000 25.000000 25.000000 25.000000 \n", - "mean 38.000000 2.880000 3.000000 2.800000 2.600000 2.840000 \n", - "std 7.359801 0.927362 0.816497 1.154701 0.816497 0.943398 \n", - "min 26.000000 1.000000 2.000000 1.000000 2.000000 1.000000 \n", - "25% 32.000000 3.000000 2.000000 2.000000 2.000000 2.000000 \n", - "50% 38.000000 3.000000 3.000000 3.000000 2.000000 3.000000 \n", - "75% 44.000000 3.000000 4.000000 4.000000 3.000000 4.000000 \n", - "max 50.000000 4.000000 4.000000 4.000000 4.000000 4.000000 \n", - "\n", - " F_Sim J_Sim Average StdDev bert2SentSim \\\n", - "count 25.000000 25.000000 25.000000 25.000000 25.000000 \n", - "mean 2.200000 2.960000 2.754286 0.562032 0.802449 \n", - "std 0.866025 0.888819 0.773190 0.214379 0.127288 \n", - "min 1.000000 2.000000 1.571429 0.000000 0.469092 \n", - "25% 2.000000 2.000000 2.285714 0.487950 0.736685 \n", - "50% 2.000000 3.000000 2.571429 0.534522 0.822490 \n", - "75% 2.000000 4.000000 3.571429 0.755929 0.906167 \n", - "max 4.000000 4.000000 4.000000 0.786796 0.962285 \n", - "\n", - " bert2SentSim_normed gpt2Ppl gpt2Ppl_normed bert_ppl \\\n", - "count 25.000000 25.000000 25.000000 25.000000 \n", - "mean 1.592652 2.722357 3.176962 2.451830 \n", - "std 0.381863 0.556725 0.121081 0.575310 \n", - "min 1.113144 1.709140 2.892638 1.476361 \n", - "25% 1.281499 2.397223 3.116926 1.949784 \n", - "50% 1.532531 2.619082 3.171061 2.590667 \n", - "75% 1.789944 3.015666 3.252926 2.947505 \n", - "max 2.592723 3.846773 3.381031 3.553839 \n", - "\n", - " bert_ppl_normed \n", - "count 25.000000 \n", - "mean 3.106608 \n", - "std 0.153490 \n", - "min 2.788545 \n", - "25% 2.982976 \n", - "50% 3.164501 \n", - "75% 3.240026 \n", - "max 3.341215 " - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279_SiblingsDF1.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "continent-offering", - "metadata": {}, - "source": [ - "### Correlation Coefficients" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "thousand-polish", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "alert-perspective", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3713116486531656, pvalue=0.011086947617304882)" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'bert2SentSim_normed'\n", - "stats.kendalltau(p279_SiblingsDF1[col1], p279_SiblingsDF1['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "typical-rehabilitation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5082269055839773, pvalue=0.009488755079055035)" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'bert2SentSim_normed'\n", - "stats.spearmanr(p279_SiblingsDF1[col1], p279_SiblingsDF1['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "genetic-paper", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.07563755805897819, pvalue=0.6048794180574604)" - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'bert_ppl_normed'\n", - "stats.kendalltau(p279_SiblingsDF1[col1], p279_SiblingsDF1['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "respected-capacity", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.12222199555900824, pvalue=0.5605582648757985)" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'bert_ppl_normed'\n", - "stats.spearmanr(p279_SiblingsDF1[col1], p279_SiblingsDF1['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "uniform-equality", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.309426373877638, pvalue=0.03429194537072205)" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'gpt2Ppl_normed'\n", - "stats.kendalltau(p279_SiblingsDF1[col1], p279_SiblingsDF1['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "legitimate-muscle", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4246827567208578, pvalue=0.03434090330987831)" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "col1 = 'gpt2Ppl_normed'\n", - "stats.spearmanr(p279_SiblingsDF1[col1], p279_SiblingsDF1['Average'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "intimate-chemical", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "conservative-client", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "raising-elements", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "shaped-citizen", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cardiac-pierce", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "lasting-omega", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/P279 Dataset Metrics Generation - Similarity Work Copy 3.ipynb b/P279 Dataset Metrics Generation - Similarity Work Copy 3.ipynb deleted file mode 100644 index 33b3fed..0000000 --- a/P279 Dataset Metrics Generation - Similarity Work Copy 3.ipynb +++ /dev/null @@ -1,4143 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "protecting-craft", - "metadata": {}, - "source": [ - "Downloaded dataset from [DBPedia Short Abstracts - 2020.07.01](https://downloads.dbpedia.org/repo/dbpedia/text/short-abstracts/2020.07.01/short-abstracts_lang=en.ttl.bz2)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "indirect-kingdom", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm.notebook import tqdm\n", - "import pandas as pd\n", - "from time import time\n", - "import os" - ] - }, - { - "cell_type": "markdown", - "id": "phantom-northeast", - "metadata": {}, - "source": [ - "# KGTK Text Embeddings Metrics" - ] - }, - { - "cell_type": "markdown", - "id": "statistical-asian", - "metadata": {}, - "source": [ - "## Extracting wikidataos required properties " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "offensive-hacker", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF = pd.read_csv('../data/P279_dataset/P279_19k_ChildPar_Dataset.csv')\n", - "p279Seeded_SiblingsDF3 = pd.read_csv('../data/P279_dataset/P279_19k_Siblings_Dataset.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "effective-shepherd", - "metadata": {}, - "outputs": [], - "source": [ - "p279QnodesList = list(set(p279WordSimSeededDF.node1.to_list() + p279WordSimSeededDF.node2.to_list() + p279Seeded_SiblingsDF3.node1.to_list() + p279Seeded_SiblingsDF3.node2.to_list()))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "extraordinary-dinner", - "metadata": {}, - "outputs": [], - "source": [ - "len(p279QnodesList)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "included-wound", - "metadata": {}, - "outputs": [], - "source": [ - "# bsize = len(p279QnodesList) // 25\n", - "# cnt = 1\n", - "# for i in range(0, len(p279QnodesList), bsize):\n", - "# q1 = \"kgtk filter -i ../data/wikidataos.for.text-embedding.tsv.gz --word-separator '|' -p '\" + '|'.join(p279QnodesList[i:i+bsize]) + \";;' -o ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv -v True\"\n", - "# cnt += 1\n", - "# # print(q1)\n", - "# os.system(\"screen -dm \" + q1)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "adaptive-dragon", - "metadata": {}, - "outputs": [], - "source": [ - "# p279QnodesListMissing = ['Q105427573', 'Q10953913', 'Q10998', 'Q111', 'Q11326182', 'Q1218', 'Q12897867', 'Q13371', 'Q1746570', 'Q17515', 'Q181201', 'Q19939', 'Q203', 'Q219060', 'Q23350', 'Q253276', 'Q25365', 'Q25472932', 'Q260460', 'Q30055', 'Q3149193', 'Q3230', 'Q32341', 'Q34211', 'Q35694', 'Q37413', 'Q42602', 'Q49112', 'Q4917', 'Q5113', 'Q729', 'Q7377', 'Q7795', 'Q795', 'Q8146', 'Q828224', 'Q8333', 'Q847337', 'Q85029384', 'Q9215']\n", - "# bsize = 25\n", - "# cnt = 27\n", - "# for i in range(0, len(p279QnodesListMissing), 25):\n", - "# q1 = \"kgtk filter -i ../data/wikidataos.for.text-embedding.tsv.gz --word-separator '|' -p '\" + '|'.join(p279QnodesListMissing[i:i+bsize]) + \";;' -o ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv -v True\"\n", - "# cnt += 1\n", - "# # print(q1)\n", - "# os.system(\"screen -dm \" + q1)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "requested-masters", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(1,11):\n", - "# q1 = \"kgtk text-embedding -i ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "center-brain", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(11,21):\n", - "# q1 = \"kgtk text-embedding -i ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "european-population", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(21,27):\n", - "# q1 = \"kgtk text-embedding -i ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "lovely-ordinance", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(27, 29):\n", - "# q1 = \"kgtk text-embedding -i ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/P279_dataset/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "rubber-pattern", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "front-cotton", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(1,11):\n", - "# q1 = \"kgtk text-embedding -i ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 \\\n", - "# --save-embedding-sentence > ../data/P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "retired-formula", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(11,21):\n", - "# q1 = \"kgtk text-embedding -i ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 \\\n", - "# --save-embedding-sentence > ../data/P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "patient-newman", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(21,27):\n", - "# q1 = \"kgtk text-embedding -i ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 \\\n", - "# --save-embedding-sentence > ../data/P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "governmental-mentor", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(27,29):\n", - "# q1 = \"kgtk text-embedding -i ../data/P279_dataset/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 \\\n", - "# --save-embedding-sentence > ../data/P279_dataset/output/P279-text-embedding-2-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "markdown", - "id": "elder-russian", - "metadata": {}, - "source": [ - "# Process and format DBPedia dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "characteristic-orientation", - "metadata": {}, - "outputs": [], - "source": [ - "# cnt = 0\n", - "\n", - "# p1s = []\n", - "# p11s = []\n", - "# p2s = []\n", - "# lines = []\n", - "# with open(\"../data/short-abstracts_lang=en.ttl\", 'r', encoding='utf-8') as f:\n", - "# for line in tqdm(f):\n", - "# p1 = line[:line.find(\" \")]\n", - "# # p11 = p1.split(\"/\")[-1][:-1]\n", - "# p11 = p1[len(\"\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q99907279text_embedding-0.13148594,0.20147827,0.015393771,1.1277922,-...
2Q99898510text_embedding0.19386396,0.41306746,-0.32783666,0.45018852,0...
4Q99526025text_embedding0.89479333,0.27038768,0.15989815,-0.09214429,0...
6Q99365546text_embedding0.10686234,0.95048314,0.32389534,0.19600846,0....
8Q993308text_embedding0.23211154,0.060303785,-1.0003253,0.63782924,0...
\n", - "" - ], - "text/plain": [ - " node property \\\n", - "0 Q99907279 text_embedding \n", - "2 Q99898510 text_embedding \n", - "4 Q99526025 text_embedding \n", - "6 Q99365546 text_embedding \n", - "8 Q993308 text_embedding \n", - "\n", - " value \n", - "0 -0.13148594,0.20147827,0.015393771,1.1277922,-... \n", - "2 0.19386396,0.41306746,-0.32783666,0.45018852,0... \n", - "4 0.89479333,0.27038768,0.15989815,-0.09214429,0... \n", - "6 0.10686234,0.95048314,0.32389534,0.19600846,0.... \n", - "8 0.23211154,0.060303785,-1.0003253,0.63782924,0... " - ] - }, - "execution_count": 273, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "markdown", - "id": "korean-arthritis", - "metadata": {}, - "source": [ - "## Merge Step" - ] - }, - { - "cell_type": "code", - "execution_count": 274, - "id": "authentic-senegal", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = p279WordSimSeededDF_wabs1.set_index('node1').join(textEmb_7props_DF.set_index('node')[['value']])" - ] - }, - { - "cell_type": "code", - "execution_count": 275, - "id": "about-extreme", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text = p279Seeded_SiblingsDF3_wabs1.set_index('node1').join(textEmb_7props_DF.set_index('node')[['value']])" - ] - }, - { - "cell_type": "code", - "execution_count": 276, - "id": "peaceful-monitoring", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = p279WordSimSeededDF_wabs_text.reset_index().rename(columns={'level_0':'node1'}).set_index('node2').join(textEmb_7props_DF.set_index('node')[['value']], rsuffix='_right')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 277, - "id": "confidential-academy", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text = p279Seeded_SiblingsDF3_wabs_text.reset_index().rename(columns={'level_0':'node1'}).set_index('node2').join(textEmb_7props_DF.set_index('node')[['value']], rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 278, - "id": "twenty-feelings", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = p279WordSimSeededDF_wabs_text.reset_index().rename(columns={'level_0':'node2', 'value': 'textEmb_7props_left', 'value_right': 'textEmb_7props_right'})" - ] - }, - { - "cell_type": "code", - "execution_count": 279, - "id": "phantom-treat", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text = p279Seeded_SiblingsDF3_wabs_text.reset_index().rename(columns={'level_0':'node2', 'value': 'textEmb_7props_left', 'value_right': 'textEmb_7props_right'})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "weighted-wesley", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 280, - "id": "adopted-tracker", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = p279WordSimSeededDF_wabs_text.set_index('node1').join(textEmb_2props_DF.set_index('node')[['value']])" - ] - }, - { - "cell_type": "code", - "execution_count": 281, - "id": "golden-tobacco", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text = p279Seeded_SiblingsDF3_wabs_text.set_index('node1').join(textEmb_2props_DF.set_index('node')[['value']])" - ] - }, - { - "cell_type": "code", - "execution_count": 282, - "id": "grave-outreach", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = p279WordSimSeededDF_wabs_text.reset_index().rename(columns={'level_0':'node1'}).set_index('node2').join(textEmb_2props_DF.set_index('node')[['value']], rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 283, - "id": "nuclear-lafayette", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text = p279Seeded_SiblingsDF3_wabs_text.reset_index().rename(columns={'level_0':'node1'}).set_index('node2').join(textEmb_2props_DF.set_index('node')[['value']], rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 284, - "id": "inner-bibliography", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = p279WordSimSeededDF_wabs_text.reset_index().rename(columns={'level_0':'node2', 'value': 'textEmb_2props_left', 'value_right': 'textEmb_2props_right'})" - ] - }, - { - "cell_type": "code", - "execution_count": 285, - "id": "sixth-indianapolis", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text = p279Seeded_SiblingsDF3_wabs_text.reset_index().rename(columns={'level_0':'node2', 'value': 'textEmb_2props_left', 'value_right': 'textEmb_2props_right'})" - ] - }, - { - "cell_type": "code", - "execution_count": 286, - "id": "infrared-mystery", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1Unnamed: 0indexidnode1_labellabelnode2_labelsentnode1_emb...BERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_right
0Q100171002Q15034430160Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+......[0.18359379470348358, 0.4367634654045105, -0.3...[0.6000513434410095, 0.261519193649292, -0.064...NaNNaNNaNNaN0.87660795,0.4991357,-0.39552155,0.7046891,1.1...0.36156428,-0.015657336,-0.14483449,-0.2533233...0.79082793,0.53679967,-0.3825465,0.67784667,1....0.36156428,-0.015657336,-0.14483449,-0.2533233...
1Q1002697Q498501211Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+......NaNNaNPeriodical literature (also called a periodica...Periodical literature (also called a periodica...[-0.28667202591896057, -0.4099476933479309, 0....[-0.25435054302215576, -0.92085862159729, 1.68...1.256428,0.3254261,-0.26960722,0.101883665,1.1...0.92698413,0.32396156,-0.7647308,0.6973268,0.7...1.256428,0.3254261,-0.26960722,0.101883665,1.1...1.0344226,0.39984593,-0.76180136,0.8256311,0.6...
2Q101998Q442123495Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+......[-0.6039562225341797, 0.8376446962356567, -0.3...[0.07287552207708359, -0.12277502566576004, 0....A biome is a community of plants and animals ...A biome is a community of plants and animals ...[0.12320789694786072, 0.2723684310913086, 0.05...[0.5991100072860718, 0.15195603668689728, 0.59...0.8141036,0.14491142,-0.59703183,0.335001,0.94...-0.16750671,-0.17960861,-0.58211946,-0.6872659...0.91628444,0.104261845,-0.49683735,0.2129627,1...-0.13534825,-0.23398273,-0.5165668,-0.72972137...
3Q102165Q229433827Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+......[0.08822021633386612, 0.4630779027938843, -1.0...[0.027711834758520126, 0.15031695365905762, -0...In chemistry and physics, a nucleon is either ...In chemistry and physics, a nucleon is either ...[0.17410606145858765, 0.6839145421981812, -0.8...[-0.04499293863773346, 0.6921464204788208, -0....0.469377,0.7162001,-0.36740896,0.76742333,1.00...-0.11307852,0.65730673,-0.13959256,1.4663302,1...0.4080446,0.7498908,-0.2665757,0.74437106,1.11...-0.11307852,0.65730673,-0.13959256,1.4663302,1...
4Q102205Q1143544267Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+......[0.06287963688373566, 0.49383553862571716, 0.2...[0.4055871367454529, 0.0892435610294342, 0.801...In physics, a fluid is a substance that contin...In physics, a fluid is a substance that contin...[0.4393930733203888, 0.7159943580627441, 0.647...[0.5091343522071838, -0.05845202878117561, 1.0...-0.19995248,0.65605164,-0.14234662,0.43931133,...0.4293771,1.1976917,0.04422909,0.5975481,0.988...-0.45549682,0.73478854,-0.1980287,0.43679318,0...0.33631665,1.1661042,0.13744242,0.6776439,0.87...
\n", - "

5 rows × 24 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 Unnamed: 0 index \\\n", - "0 Q100171002 Q1503443 0 160 \n", - "1 Q1002697 Q49850 1 211 \n", - "2 Q101998 Q4421 2 3495 \n", - "3 Q102165 Q2294 3 3827 \n", - "4 Q102205 Q11435 4 4267 \n", - "\n", - " id node1_label label node2_label \\\n", - "0 Q1503443-P279-Q100171002-8282ae74-0 secrecy P279 concealment \n", - "1 Q49850-P279-Q1002697-0c52cf68-0 journal P279 periodical \n", - "2 Q4421-P279-Q101998-d0983886-0 forest P279 biome \n", - "3 Q2294-P279-Q102165-0893a180-0 proton P279 nucleon \n", - "4 Q11435-P279-Q102205-7b448d05-0 liquid P279 fluid \n", - "\n", - " sent node1_emb \\\n", - "0 secrecy is concealment [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 journal is periodical [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 forest is biome [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 proton is nucleon [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 liquid is fluid [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " ... BERT_abstract_emb \\\n", - "0 ... [0.18359379470348358, 0.4367634654045105, -0.3... \n", - "1 ... NaN \n", - "2 ... [-0.6039562225341797, 0.8376446962356567, -0.3... \n", - "3 ... [0.08822021633386612, 0.4630779027938843, -1.0... \n", - "4 ... [0.06287963688373566, 0.49383553862571716, 0.2... \n", - "\n", - " BERT_abstract_firstSent_emb \\\n", - "0 [0.6000513434410095, 0.261519193649292, -0.064... \n", - "1 NaN \n", - "2 [0.07287552207708359, -0.12277502566576004, 0.... \n", - "3 [0.027711834758520126, 0.15031695365905762, -0... \n", - "4 [0.4055871367454529, 0.0892435610294342, 0.801... \n", - "\n", - " abstract_right \\\n", - "0 NaN \n", - "1 Periodical literature (also called a periodica... \n", - "2 A biome is a community of plants and animals ... \n", - "3 In chemistry and physics, a nucleon is either ... \n", - "4 In physics, a fluid is a substance that contin... \n", - "\n", - " abstract_firstSent_right \\\n", - "0 NaN \n", - "1 Periodical literature (also called a periodica... \n", - "2 A biome is a community of plants and animals ... \n", - "3 In chemistry and physics, a nucleon is either ... \n", - "4 In physics, a fluid is a substance that contin... \n", - "\n", - " BERT_abstract_emb_right \\\n", - "0 NaN \n", - "1 [-0.28667202591896057, -0.4099476933479309, 0.... \n", - "2 [0.12320789694786072, 0.2723684310913086, 0.05... \n", - "3 [0.17410606145858765, 0.6839145421981812, -0.8... \n", - "4 [0.4393930733203888, 0.7159943580627441, 0.647... \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 [-0.25435054302215576, -0.92085862159729, 1.68... \n", - "2 [0.5991100072860718, 0.15195603668689728, 0.59... \n", - "3 [-0.04499293863773346, 0.6921464204788208, -0.... \n", - "4 [0.5091343522071838, -0.05845202878117561, 1.0... \n", - "\n", - " textEmb_7props_left \\\n", - "0 0.87660795,0.4991357,-0.39552155,0.7046891,1.1... \n", - "1 1.256428,0.3254261,-0.26960722,0.101883665,1.1... \n", - "2 0.8141036,0.14491142,-0.59703183,0.335001,0.94... \n", - "3 0.469377,0.7162001,-0.36740896,0.76742333,1.00... \n", - "4 -0.19995248,0.65605164,-0.14234662,0.43931133,... \n", - "\n", - " textEmb_7props_right \\\n", - "0 0.36156428,-0.015657336,-0.14483449,-0.2533233... \n", - "1 0.92698413,0.32396156,-0.7647308,0.6973268,0.7... \n", - "2 -0.16750671,-0.17960861,-0.58211946,-0.6872659... \n", - "3 -0.11307852,0.65730673,-0.13959256,1.4663302,1... \n", - "4 0.4293771,1.1976917,0.04422909,0.5975481,0.988... \n", - "\n", - " textEmb_2props_left \\\n", - "0 0.79082793,0.53679967,-0.3825465,0.67784667,1.... \n", - "1 1.256428,0.3254261,-0.26960722,0.101883665,1.1... \n", - "2 0.91628444,0.104261845,-0.49683735,0.2129627,1... \n", - "3 0.4080446,0.7498908,-0.2665757,0.74437106,1.11... \n", - "4 -0.45549682,0.73478854,-0.1980287,0.43679318,0... \n", - "\n", - " textEmb_2props_right \n", - "0 0.36156428,-0.015657336,-0.14483449,-0.2533233... \n", - "1 1.0344226,0.39984593,-0.76180136,0.8256311,0.6... \n", - "2 -0.13534825,-0.23398273,-0.5165668,-0.72972137... \n", - "3 -0.11307852,0.65730673,-0.13959256,1.4663302,1... \n", - "4 0.33631665,1.1661042,0.13744242,0.6776439,0.87... \n", - "\n", - "[5 rows x 24 columns]" - ] - }, - "execution_count": 286, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 287, - "id": "included-coverage", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1Unnamed: 0indexparentnode1_labelpar_labelnode2_labelnode1_sentnode2_sent...BERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_right
0Q100400481Q100355826112310344291Q2472587YukonerspeopleDetroitersYukoners is peopleDetroiters is people...NaNNaNNaNNaNNaNNaN-0.07126519,0.6527018,-0.3797528,0.19690958,0....0.52179945,0.6418564,0.3750265,0.5378938,-0.77...-0.07126519,0.6527018,-0.3797528,0.19690958,0....0.52179945,0.6418564,0.3750265,0.5378938,-0.77...
1Q100448818Q100196985845610339627Q2472587OregonianspeopleKuwaitisOregonians is peopleKuwaitis is people...NaNNaNNaNNaNNaNNaN-0.082290515,0.7254986,-0.14525111,0.3196717,0...-0.42398202,0.17036317,0.35879236,1.1121372,0....-0.082290515,0.7254986,-0.14525111,0.3196717,0...-0.42398202,0.17036317,0.35879236,1.1121372,0....
2Q100588072Q100568638303211887935Q846570UtahnsAmericansWyomingitesUtahns is AmericansWyomingites is Americans...NaNNaNNaNNaNNaNNaN-0.17937128,-0.30326533,-0.14656651,0.26193923...0.2421372,0.41370165,-0.017250024,0.8962314,-0...-0.17937128,-0.30326533,-0.14656651,0.26193923...0.2421372,0.41370165,-0.017250024,0.8962314,-0...
3Q100606028Q1004400561395910346647Q2472587MoldovanspeopleIowansMoldovans is peopleIowans is people...NaNNaNNaNNaNNaNNaN0.27328575,0.3186499,-0.13949376,1.0969052,-0....0.025020197,0.4693855,-0.50199574,1.3510414,-0...0.27328575,0.3186499,-0.13949376,1.0969052,-0....0.025020197,0.4693855,-0.50199574,1.3510414,-0...
4Q100606074Q100606028561210351613Q2472587IowanspeopleHoosiersIowans is peopleHoosiers is people...NaNNaNNaNNaNNaNNaN0.025020197,0.4693855,-0.50199574,1.3510414,-0...-0.4371684,1.0444875,-0.63107914,0.07898032,-0...0.025020197,0.4693855,-0.50199574,1.3510414,-0...-0.4371684,1.0444875,-0.63107914,0.07898032,-0...
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 Unnamed: 0 index parent node1_label \\\n", - "0 Q100400481 Q100355826 1123 10344291 Q2472587 Yukoners \n", - "1 Q100448818 Q100196985 8456 10339627 Q2472587 Oregonians \n", - "2 Q100588072 Q100568638 3032 11887935 Q846570 Utahns \n", - "3 Q100606028 Q100440056 13959 10346647 Q2472587 Moldovans \n", - "4 Q100606074 Q100606028 5612 10351613 Q2472587 Iowans \n", - "\n", - " par_label node2_label node1_sent node2_sent \\\n", - "0 people Detroiters Yukoners is people Detroiters is people \n", - "1 people Kuwaitis Oregonians is people Kuwaitis is people \n", - "2 Americans Wyomingites Utahns is Americans Wyomingites is Americans \n", - "3 people Iowans Moldovans is people Iowans is people \n", - "4 people Hoosiers Iowans is people Hoosiers is people \n", - "\n", - " ... BERT_abstract_emb BERT_abstract_firstSent_emb abstract_right \\\n", - "0 ... NaN NaN NaN \n", - "1 ... NaN NaN NaN \n", - "2 ... NaN NaN NaN \n", - "3 ... NaN NaN NaN \n", - "4 ... NaN NaN NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN NaN \n", - "1 NaN NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 NaN NaN \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 NaN \n", - "2 NaN \n", - "3 NaN \n", - "4 NaN \n", - "\n", - " textEmb_7props_left \\\n", - "0 -0.07126519,0.6527018,-0.3797528,0.19690958,0.... \n", - "1 -0.082290515,0.7254986,-0.14525111,0.3196717,0... \n", - "2 -0.17937128,-0.30326533,-0.14656651,0.26193923... \n", - "3 0.27328575,0.3186499,-0.13949376,1.0969052,-0.... \n", - "4 0.025020197,0.4693855,-0.50199574,1.3510414,-0... \n", - "\n", - " textEmb_7props_right \\\n", - "0 0.52179945,0.6418564,0.3750265,0.5378938,-0.77... \n", - "1 -0.42398202,0.17036317,0.35879236,1.1121372,0.... \n", - "2 0.2421372,0.41370165,-0.017250024,0.8962314,-0... \n", - "3 0.025020197,0.4693855,-0.50199574,1.3510414,-0... \n", - "4 -0.4371684,1.0444875,-0.63107914,0.07898032,-0... \n", - "\n", - " textEmb_2props_left \\\n", - "0 -0.07126519,0.6527018,-0.3797528,0.19690958,0.... \n", - "1 -0.082290515,0.7254986,-0.14525111,0.3196717,0... \n", - "2 -0.17937128,-0.30326533,-0.14656651,0.26193923... \n", - "3 0.27328575,0.3186499,-0.13949376,1.0969052,-0.... \n", - "4 0.025020197,0.4693855,-0.50199574,1.3510414,-0... \n", - "\n", - " textEmb_2props_right \n", - "0 0.52179945,0.6418564,0.3750265,0.5378938,-0.77... \n", - "1 -0.42398202,0.17036317,0.35879236,1.1121372,0.... \n", - "2 0.2421372,0.41370165,-0.017250024,0.8962314,-0... \n", - "3 0.025020197,0.4693855,-0.50199574,1.3510414,-0... \n", - "4 -0.4371684,1.0444875,-0.63107914,0.07898032,-0... \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 287, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 288, - "id": "separated-region", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(19454, 19454)" - ] - }, - "execution_count": 288, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p279WordSimSeededDF_wabs_text), len(p279WordSimSeededDF_wabs_text[(~p279WordSimSeededDF_wabs_text.textEmb_7props_left.isna()) & (~p279WordSimSeededDF_wabs_text.textEmb_7props_right.isna())])" - ] - }, - { - "cell_type": "code", - "execution_count": 289, - "id": "piano-cameroon", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(19454, 19454)" - ] - }, - "execution_count": 289, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p279Seeded_SiblingsDF3_wabs_text), len(p279Seeded_SiblingsDF3_wabs_text[(~p279Seeded_SiblingsDF3_wabs_text.textEmb_2props_left.isna()) & (~p279Seeded_SiblingsDF3_wabs_text.textEmb_2props_right.isna())])" - ] - }, - { - "cell_type": "markdown", - "id": "social-somerset", - "metadata": {}, - "source": [ - "# CHECKPOINT: Store all embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 290, - "id": "fitted-frequency", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1Unnamed: 0indexidnode1_labellabelnode2_labelsentnode1_emb...BERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_right
0Q100171002Q15034430160Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+......[0.18359379470348358, 0.4367634654045105, -0.3...[0.6000513434410095, 0.261519193649292, -0.064...NaNNaNNaNNaN0.87660795,0.4991357,-0.39552155,0.7046891,1.1...0.36156428,-0.015657336,-0.14483449,-0.2533233...0.79082793,0.53679967,-0.3825465,0.67784667,1....0.36156428,-0.015657336,-0.14483449,-0.2533233...
1Q1002697Q498501211Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+......NaNNaNPeriodical literature (also called a periodica...Periodical literature (also called a periodica...[-0.28667202591896057, -0.4099476933479309, 0....[-0.25435054302215576, -0.92085862159729, 1.68...1.256428,0.3254261,-0.26960722,0.101883665,1.1...0.92698413,0.32396156,-0.7647308,0.6973268,0.7...1.256428,0.3254261,-0.26960722,0.101883665,1.1...1.0344226,0.39984593,-0.76180136,0.8256311,0.6...
2Q101998Q442123495Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+......[-0.6039562225341797, 0.8376446962356567, -0.3...[0.07287552207708359, -0.12277502566576004, 0....A biome is a community of plants and animals ...A biome is a community of plants and animals ...[0.12320789694786072, 0.2723684310913086, 0.05...[0.5991100072860718, 0.15195603668689728, 0.59...0.8141036,0.14491142,-0.59703183,0.335001,0.94...-0.16750671,-0.17960861,-0.58211946,-0.6872659...0.91628444,0.104261845,-0.49683735,0.2129627,1...-0.13534825,-0.23398273,-0.5165668,-0.72972137...
3Q102165Q229433827Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+......[0.08822021633386612, 0.4630779027938843, -1.0...[0.027711834758520126, 0.15031695365905762, -0...In chemistry and physics, a nucleon is either ...In chemistry and physics, a nucleon is either ...[0.17410606145858765, 0.6839145421981812, -0.8...[-0.04499293863773346, 0.6921464204788208, -0....0.469377,0.7162001,-0.36740896,0.76742333,1.00...-0.11307852,0.65730673,-0.13959256,1.4663302,1...0.4080446,0.7498908,-0.2665757,0.74437106,1.11...-0.11307852,0.65730673,-0.13959256,1.4663302,1...
4Q102205Q1143544267Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+......[0.06287963688373566, 0.49383553862571716, 0.2...[0.4055871367454529, 0.0892435610294342, 0.801...In physics, a fluid is a substance that contin...In physics, a fluid is a substance that contin...[0.4393930733203888, 0.7159943580627441, 0.647...[0.5091343522071838, -0.05845202878117561, 1.0...-0.19995248,0.65605164,-0.14234662,0.43931133,...0.4293771,1.1976917,0.04422909,0.5975481,0.988...-0.45549682,0.73478854,-0.1980287,0.43679318,0...0.33631665,1.1661042,0.13744242,0.6776439,0.87...
\n", - "

5 rows × 24 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 Unnamed: 0 index \\\n", - "0 Q100171002 Q1503443 0 160 \n", - "1 Q1002697 Q49850 1 211 \n", - "2 Q101998 Q4421 2 3495 \n", - "3 Q102165 Q2294 3 3827 \n", - "4 Q102205 Q11435 4 4267 \n", - "\n", - " id node1_label label node2_label \\\n", - "0 Q1503443-P279-Q100171002-8282ae74-0 secrecy P279 concealment \n", - "1 Q49850-P279-Q1002697-0c52cf68-0 journal P279 periodical \n", - "2 Q4421-P279-Q101998-d0983886-0 forest P279 biome \n", - "3 Q2294-P279-Q102165-0893a180-0 proton P279 nucleon \n", - "4 Q11435-P279-Q102205-7b448d05-0 liquid P279 fluid \n", - "\n", - " sent node1_emb \\\n", - "0 secrecy is concealment [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 journal is periodical [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 forest is biome [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 proton is nucleon [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 liquid is fluid [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " ... BERT_abstract_emb \\\n", - "0 ... [0.18359379470348358, 0.4367634654045105, -0.3... \n", - "1 ... NaN \n", - "2 ... [-0.6039562225341797, 0.8376446962356567, -0.3... \n", - "3 ... [0.08822021633386612, 0.4630779027938843, -1.0... \n", - "4 ... [0.06287963688373566, 0.49383553862571716, 0.2... \n", - "\n", - " BERT_abstract_firstSent_emb \\\n", - "0 [0.6000513434410095, 0.261519193649292, -0.064... \n", - "1 NaN \n", - "2 [0.07287552207708359, -0.12277502566576004, 0.... \n", - "3 [0.027711834758520126, 0.15031695365905762, -0... \n", - "4 [0.4055871367454529, 0.0892435610294342, 0.801... \n", - "\n", - " abstract_right \\\n", - "0 NaN \n", - "1 Periodical literature (also called a periodica... \n", - "2 A biome is a community of plants and animals ... \n", - "3 In chemistry and physics, a nucleon is either ... \n", - "4 In physics, a fluid is a substance that contin... \n", - "\n", - " abstract_firstSent_right \\\n", - "0 NaN \n", - "1 Periodical literature (also called a periodica... \n", - "2 A biome is a community of plants and animals ... \n", - "3 In chemistry and physics, a nucleon is either ... \n", - "4 In physics, a fluid is a substance that contin... \n", - "\n", - " BERT_abstract_emb_right \\\n", - "0 NaN \n", - "1 [-0.28667202591896057, -0.4099476933479309, 0.... \n", - "2 [0.12320789694786072, 0.2723684310913086, 0.05... \n", - "3 [0.17410606145858765, 0.6839145421981812, -0.8... \n", - "4 [0.4393930733203888, 0.7159943580627441, 0.647... \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 [-0.25435054302215576, -0.92085862159729, 1.68... \n", - "2 [0.5991100072860718, 0.15195603668689728, 0.59... \n", - "3 [-0.04499293863773346, 0.6921464204788208, -0.... \n", - "4 [0.5091343522071838, -0.05845202878117561, 1.0... \n", - "\n", - " textEmb_7props_left \\\n", - "0 0.87660795,0.4991357,-0.39552155,0.7046891,1.1... \n", - "1 1.256428,0.3254261,-0.26960722,0.101883665,1.1... \n", - "2 0.8141036,0.14491142,-0.59703183,0.335001,0.94... \n", - "3 0.469377,0.7162001,-0.36740896,0.76742333,1.00... \n", - "4 -0.19995248,0.65605164,-0.14234662,0.43931133,... \n", - "\n", - " textEmb_7props_right \\\n", - "0 0.36156428,-0.015657336,-0.14483449,-0.2533233... \n", - "1 0.92698413,0.32396156,-0.7647308,0.6973268,0.7... \n", - "2 -0.16750671,-0.17960861,-0.58211946,-0.6872659... \n", - "3 -0.11307852,0.65730673,-0.13959256,1.4663302,1... \n", - "4 0.4293771,1.1976917,0.04422909,0.5975481,0.988... \n", - "\n", - " textEmb_2props_left \\\n", - "0 0.79082793,0.53679967,-0.3825465,0.67784667,1.... \n", - "1 1.256428,0.3254261,-0.26960722,0.101883665,1.1... \n", - "2 0.91628444,0.104261845,-0.49683735,0.2129627,1... \n", - "3 0.4080446,0.7498908,-0.2665757,0.74437106,1.11... \n", - "4 -0.45549682,0.73478854,-0.1980287,0.43679318,0... \n", - "\n", - " textEmb_2props_right \n", - "0 0.36156428,-0.015657336,-0.14483449,-0.2533233... \n", - "1 1.0344226,0.39984593,-0.76180136,0.8256311,0.6... \n", - "2 -0.13534825,-0.23398273,-0.5165668,-0.72972137... \n", - "3 -0.11307852,0.65730673,-0.13959256,1.4663302,1... \n", - "4 0.33631665,1.1661042,0.13744242,0.6776439,0.87... \n", - "\n", - "[5 rows x 24 columns]" - ] - }, - "execution_count": 290, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 291, - "id": "inner-solomon", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1Unnamed: 0indexparentnode1_labelpar_labelnode2_labelnode1_sentnode2_sent...BERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_right
0Q100400481Q100355826112310344291Q2472587YukonerspeopleDetroitersYukoners is peopleDetroiters is people...NaNNaNNaNNaNNaNNaN-0.07126519,0.6527018,-0.3797528,0.19690958,0....0.52179945,0.6418564,0.3750265,0.5378938,-0.77...-0.07126519,0.6527018,-0.3797528,0.19690958,0....0.52179945,0.6418564,0.3750265,0.5378938,-0.77...
1Q100448818Q100196985845610339627Q2472587OregonianspeopleKuwaitisOregonians is peopleKuwaitis is people...NaNNaNNaNNaNNaNNaN-0.082290515,0.7254986,-0.14525111,0.3196717,0...-0.42398202,0.17036317,0.35879236,1.1121372,0....-0.082290515,0.7254986,-0.14525111,0.3196717,0...-0.42398202,0.17036317,0.35879236,1.1121372,0....
2Q100588072Q100568638303211887935Q846570UtahnsAmericansWyomingitesUtahns is AmericansWyomingites is Americans...NaNNaNNaNNaNNaNNaN-0.17937128,-0.30326533,-0.14656651,0.26193923...0.2421372,0.41370165,-0.017250024,0.8962314,-0...-0.17937128,-0.30326533,-0.14656651,0.26193923...0.2421372,0.41370165,-0.017250024,0.8962314,-0...
3Q100606028Q1004400561395910346647Q2472587MoldovanspeopleIowansMoldovans is peopleIowans is people...NaNNaNNaNNaNNaNNaN0.27328575,0.3186499,-0.13949376,1.0969052,-0....0.025020197,0.4693855,-0.50199574,1.3510414,-0...0.27328575,0.3186499,-0.13949376,1.0969052,-0....0.025020197,0.4693855,-0.50199574,1.3510414,-0...
4Q100606074Q100606028561210351613Q2472587IowanspeopleHoosiersIowans is peopleHoosiers is people...NaNNaNNaNNaNNaNNaN0.025020197,0.4693855,-0.50199574,1.3510414,-0...-0.4371684,1.0444875,-0.63107914,0.07898032,-0...0.025020197,0.4693855,-0.50199574,1.3510414,-0...-0.4371684,1.0444875,-0.63107914,0.07898032,-0...
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 Unnamed: 0 index parent node1_label \\\n", - "0 Q100400481 Q100355826 1123 10344291 Q2472587 Yukoners \n", - "1 Q100448818 Q100196985 8456 10339627 Q2472587 Oregonians \n", - "2 Q100588072 Q100568638 3032 11887935 Q846570 Utahns \n", - "3 Q100606028 Q100440056 13959 10346647 Q2472587 Moldovans \n", - "4 Q100606074 Q100606028 5612 10351613 Q2472587 Iowans \n", - "\n", - " par_label node2_label node1_sent node2_sent \\\n", - "0 people Detroiters Yukoners is people Detroiters is people \n", - "1 people Kuwaitis Oregonians is people Kuwaitis is people \n", - "2 Americans Wyomingites Utahns is Americans Wyomingites is Americans \n", - "3 people Iowans Moldovans is people Iowans is people \n", - "4 people Hoosiers Iowans is people Hoosiers is people \n", - "\n", - " ... BERT_abstract_emb BERT_abstract_firstSent_emb abstract_right \\\n", - "0 ... NaN NaN NaN \n", - "1 ... NaN NaN NaN \n", - "2 ... NaN NaN NaN \n", - "3 ... NaN NaN NaN \n", - "4 ... NaN NaN NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN NaN \n", - "1 NaN NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 NaN NaN \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 NaN \n", - "2 NaN \n", - "3 NaN \n", - "4 NaN \n", - "\n", - " textEmb_7props_left \\\n", - "0 -0.07126519,0.6527018,-0.3797528,0.19690958,0.... \n", - "1 -0.082290515,0.7254986,-0.14525111,0.3196717,0... \n", - "2 -0.17937128,-0.30326533,-0.14656651,0.26193923... \n", - "3 0.27328575,0.3186499,-0.13949376,1.0969052,-0.... \n", - "4 0.025020197,0.4693855,-0.50199574,1.3510414,-0... \n", - "\n", - " textEmb_7props_right \\\n", - "0 0.52179945,0.6418564,0.3750265,0.5378938,-0.77... \n", - "1 -0.42398202,0.17036317,0.35879236,1.1121372,0.... \n", - "2 0.2421372,0.41370165,-0.017250024,0.8962314,-0... \n", - "3 0.025020197,0.4693855,-0.50199574,1.3510414,-0... \n", - "4 -0.4371684,1.0444875,-0.63107914,0.07898032,-0... \n", - "\n", - " textEmb_2props_left \\\n", - "0 -0.07126519,0.6527018,-0.3797528,0.19690958,0.... \n", - "1 -0.082290515,0.7254986,-0.14525111,0.3196717,0... \n", - "2 -0.17937128,-0.30326533,-0.14656651,0.26193923... \n", - "3 0.27328575,0.3186499,-0.13949376,1.0969052,-0.... \n", - "4 0.025020197,0.4693855,-0.50199574,1.3510414,-0... \n", - "\n", - " textEmb_2props_right \n", - "0 0.52179945,0.6418564,0.3750265,0.5378938,-0.77... \n", - "1 -0.42398202,0.17036317,0.35879236,1.1121372,0.... \n", - "2 0.2421372,0.41370165,-0.017250024,0.8962314,-0... \n", - "3 0.025020197,0.4693855,-0.50199574,1.3510414,-0... \n", - "4 -0.4371684,1.0444875,-0.63107914,0.07898032,-0... \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 291, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 292, - "id": "sweet-garlic", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text.drop(columns=['Unnamed: 0', 'index']).to_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmb.csv\", index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 293, - "id": "imposed-dairy", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text.drop(columns=['Unnamed: 0', 'index']).to_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmb.csv\", index=False)" - ] - }, - { - "cell_type": "markdown", - "id": "fitting-competition", - "metadata": {}, - "source": [ - "# Analyze 4 Metrics for Cosine Similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 294, - "id": "instrumental-bunny", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 295, - "id": "eastern-competition", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmb.csv\")\n", - "p279Seeded_SiblingsDF3_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmb.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 299, - "id": "graduate-nutrition", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text['textEmb_7props_left'] = p279WordSimSeededDF_wabs_text['textEmb_7props_left'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "p279WordSimSeededDF_wabs_text['textEmb_7props_right'] = p279WordSimSeededDF_wabs_text['textEmb_7props_right'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "p279WordSimSeededDF_wabs_text['textEmb_2props_left'] = p279WordSimSeededDF_wabs_text['textEmb_2props_left'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "p279WordSimSeededDF_wabs_text['textEmb_2props_right'] = p279WordSimSeededDF_wabs_text['textEmb_2props_right'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "\n", - "p279WordSimSeededDF_wabs_text['textEmb_7props_cosSim'] = p279WordSimSeededDF_wabs_text.apply(lambda p: cosine_similarity(np.array(p['textEmb_7props_left']).reshape(1,-1), np.array(p['textEmb_7props_right']).reshape(1,-1)), axis=1)\n", - "p279WordSimSeededDF_wabs_text['textEmb_2props_cosSim'] = p279WordSimSeededDF_wabs_text.apply(lambda p: cosine_similarity(np.array(p['textEmb_2props_left']).reshape(1,-1), np.array(p['textEmb_2props_right']).reshape(1,-1)), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "injured-pleasure", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text['BERT_abstract_emb'] = p279WordSimSeededDF_wabs_text['BERT_abstract_emb'].apply(lambda p: [float(p1) for p1 in p[1:-1].split(',')] if not(pd.isna(p)) else p)\n", - "p279WordSimSeededDF_wabs_text['BERT_abstract_emb_right'] = p279WordSimSeededDF_wabs_text['BERT_abstract_emb_right'].apply(lambda p: [float(p1) for p1 in p[1:-1].split(',')] if not(pd.isna(p)) else p)\n", - "p279WordSimSeededDF_wabs_text['BERT_abstract_firstSent_emb'] = p279WordSimSeededDF_wabs_text['BERT_abstract_firstSent_emb'].apply(lambda p: [float(p1) for p1 in p[1:-1].split(',')] if not(pd.isna(p)) else p)\n", - "p279WordSimSeededDF_wabs_text['BERT_abstract_firstSent_emb_right'] = p279WordSimSeededDF_wabs_text['BERT_abstract_firstSent_emb_right'].apply(lambda p: [float(p1) for p1 in p[1:-1].split(',')] if not(pd.isna(p)) else p)\n", - "\n", - "p279WordSimSeededDF_wabs_text['BERT_abstract_cosSim'] = p279WordSimSeededDF_wabs_text.apply(lambda p: cosine_similarity(np.array(p['BERT_abstract_emb']).reshape(1,-1), np.array(p['BERT_abstract_emb_right']).reshape(1,-1)) if type(p['BERT_abstract_emb']) == list and type(p['BERT_abstract_emb_right']) == list else -1, axis=1)\n", - "p279WordSimSeededDF_wabs_text['BERT_abstract_firstSent_cosSim'] = p279WordSimSeededDF_wabs_text.apply(lambda p: cosine_similarity(np.array(p['BERT_abstract_firstSent_emb']).reshape(1,-1), np.array(p['BERT_abstract_firstSent_emb_right']).reshape(1,-1)) if type(p['BERT_abstract_firstSent_emb']) == list and type(p['BERT_abstract_firstSent_emb_right']) == list else -1, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 319, - "id": "binding-residence", - "metadata": {}, - "outputs": [], - "source": [ - "for col in ['textEmb_7props_cosSim', 'textEmb_2props_cosSim', 'BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim']:\n", - " p279WordSimSeededDF_wabs_text[col] = p279WordSimSeededDF_wabs_text[col].apply(lambda p: p[0][0] if p != -1 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 320, - "id": "ahead-prince", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1idnode1_labellabelnode2_labelsentnode1_embnode2_embbert2SentSim...BERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
0Q100171002Q1503443Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+...[ 3.61319035e-01 1.03393383e-01 1.50166345e+...0.901134...NaNNaN[0.87660795, 0.4991357, -0.39552155, 0.7046891...[0.36156428, -0.015657336, -0.14483449, -0.253...[0.79082793, 0.53679967, -0.3825465, 0.6778466...[0.36156428, -0.015657336, -0.14483449, -0.253...0.8326020.823419-1.000000-1.000000
1Q1002697Q49850Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+...[-2.23196611e-01 -4.97725368e-01 2.20271492e+...0.863449...[-0.28667202591896057, -0.4099476933479309, 0....[-0.25435054302215576, -0.92085862159729, 1.68...[1.256428, 0.3254261, -0.26960722, 0.101883665...[0.92698413, 0.32396156, -0.7647308, 0.6973268...[1.256428, 0.3254261, -0.26960722, 0.101883665...[1.0344226, 0.39984593, -0.76180136, 0.8256311...0.7426380.734428-1.000000-1.000000
2Q101998Q4421Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+...[ 5.09670794e-01 -4.42380428e-01 1.53245163e+...0.507148...[0.12320789694786072, 0.2723684310913086, 0.05...[0.5991100072860718, 0.15195603668689728, 0.59...[0.8141036, 0.14491142, -0.59703183, 0.335001,...[-0.16750671, -0.17960861, -0.58211946, -0.687...[0.91628444, 0.104261845, -0.49683735, 0.21296...[-0.13534825, -0.23398273, -0.5165668, -0.7297...0.6470310.7076110.5080600.455747
3Q102165Q2294Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+...[-6.87960759e-02 -1.65659860e-01 9.53789592e-...0.798707...[0.17410606145858765, 0.6839145421981812, -0.8...[-0.04499293863773346, 0.6921464204788208, -0....[0.469377, 0.7162001, -0.36740896, 0.76742333,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...[0.4080446, 0.7498908, -0.2665757, 0.74437106,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...0.8365310.8475910.8559590.770030
4Q102205Q11435Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+...[ 1.30038410e-01 -8.53226840e-01 2.37821031e+...0.934246...[0.4393930733203888, 0.7159943580627441, 0.647...[0.5091343522071838, -0.05845202878117561, 1.0...[-0.19995248, 0.65605164, -0.14234662, 0.43931...[0.4293771, 1.1976917, 0.04422909, 0.5975481, ...[-0.45549682, 0.73478854, -0.1980287, 0.436793...[0.33631665, 1.1661042, 0.13744242, 0.6776439,...0.7655890.7803420.7526930.515319
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 id node1_label \\\n", - "0 Q100171002 Q1503443 Q1503443-P279-Q100171002-8282ae74-0 secrecy \n", - "1 Q1002697 Q49850 Q49850-P279-Q1002697-0c52cf68-0 journal \n", - "2 Q101998 Q4421 Q4421-P279-Q101998-d0983886-0 forest \n", - "3 Q102165 Q2294 Q2294-P279-Q102165-0893a180-0 proton \n", - "4 Q102205 Q11435 Q11435-P279-Q102205-7b448d05-0 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " node1_emb \\\n", - "0 [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " node2_emb bert2SentSim ... \\\n", - "0 [ 3.61319035e-01 1.03393383e-01 1.50166345e+... 0.901134 ... \n", - "1 [-2.23196611e-01 -4.97725368e-01 2.20271492e+... 0.863449 ... \n", - "2 [ 5.09670794e-01 -4.42380428e-01 1.53245163e+... 0.507148 ... \n", - "3 [-6.87960759e-02 -1.65659860e-01 9.53789592e-... 0.798707 ... \n", - "4 [ 1.30038410e-01 -8.53226840e-01 2.37821031e+... 0.934246 ... \n", - "\n", - " BERT_abstract_emb_right \\\n", - "0 NaN \n", - "1 [-0.28667202591896057, -0.4099476933479309, 0.... \n", - "2 [0.12320789694786072, 0.2723684310913086, 0.05... \n", - "3 [0.17410606145858765, 0.6839145421981812, -0.8... \n", - "4 [0.4393930733203888, 0.7159943580627441, 0.647... \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 [-0.25435054302215576, -0.92085862159729, 1.68... \n", - "2 [0.5991100072860718, 0.15195603668689728, 0.59... \n", - "3 [-0.04499293863773346, 0.6921464204788208, -0.... \n", - "4 [0.5091343522071838, -0.05845202878117561, 1.0... \n", - "\n", - " textEmb_7props_left \\\n", - "0 [0.87660795, 0.4991357, -0.39552155, 0.7046891... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.8141036, 0.14491142, -0.59703183, 0.335001,... \n", - "3 [0.469377, 0.7162001, -0.36740896, 0.76742333,... \n", - "4 [-0.19995248, 0.65605164, -0.14234662, 0.43931... \n", - "\n", - " textEmb_7props_right \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... \n", - "1 [0.92698413, 0.32396156, -0.7647308, 0.6973268... \n", - "2 [-0.16750671, -0.17960861, -0.58211946, -0.687... \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... \n", - "4 [0.4293771, 1.1976917, 0.04422909, 0.5975481, ... \n", - "\n", - " textEmb_2props_left \\\n", - "0 [0.79082793, 0.53679967, -0.3825465, 0.6778466... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.91628444, 0.104261845, -0.49683735, 0.21296... \n", - "3 [0.4080446, 0.7498908, -0.2665757, 0.74437106,... \n", - "4 [-0.45549682, 0.73478854, -0.1980287, 0.436793... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... 0.832602 \n", - "1 [1.0344226, 0.39984593, -0.76180136, 0.8256311... 0.742638 \n", - "2 [-0.13534825, -0.23398273, -0.5165668, -0.7297... 0.647031 \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... 0.836531 \n", - "4 [0.33631665, 1.1661042, 0.13744242, 0.6776439,... 0.765589 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \n", - "0 0.823419 -1.000000 -1.000000 \n", - "1 0.734428 -1.000000 -1.000000 \n", - "2 0.707611 0.508060 0.455747 \n", - "3 0.847591 0.855959 0.770030 \n", - "4 0.780342 0.752693 0.515319 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 320, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 321, - "id": "short-permit", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text['textEmb_7props_left'] = p279Seeded_SiblingsDF3_wabs_text['textEmb_7props_left'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "p279Seeded_SiblingsDF3_wabs_text['textEmb_7props_right'] = p279Seeded_SiblingsDF3_wabs_text['textEmb_7props_right'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "p279Seeded_SiblingsDF3_wabs_text['textEmb_2props_left'] = p279Seeded_SiblingsDF3_wabs_text['textEmb_2props_left'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "p279Seeded_SiblingsDF3_wabs_text['textEmb_2props_right'] = p279Seeded_SiblingsDF3_wabs_text['textEmb_2props_right'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "\n", - "p279Seeded_SiblingsDF3_wabs_text['textEmb_7props_cosSim'] = p279Seeded_SiblingsDF3_wabs_text.apply(lambda p: cosine_similarity(np.array(p['textEmb_7props_left']).reshape(1,-1), np.array(p['textEmb_7props_right']).reshape(1,-1)), axis=1)\n", - "p279Seeded_SiblingsDF3_wabs_text['textEmb_2props_cosSim'] = p279Seeded_SiblingsDF3_wabs_text.apply(lambda p: cosine_similarity(np.array(p['textEmb_2props_left']).reshape(1,-1), np.array(p['textEmb_2props_right']).reshape(1,-1)), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 322, - "id": "charming-courtesy", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_emb'] = p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_emb'].apply(lambda p: [float(p1) for p1 in p[1:-1].split(',')] if not(pd.isna(p)) else p)\n", - "p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_emb_right'] = p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_emb_right'].apply(lambda p: [float(p1) for p1 in p[1:-1].split(',')] if not(pd.isna(p)) else p)\n", - "p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_firstSent_emb'] = p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_firstSent_emb'].apply(lambda p: [float(p1) for p1 in p[1:-1].split(',')] if not(pd.isna(p)) else p)\n", - "p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_firstSent_emb_right'] = p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_firstSent_emb_right'].apply(lambda p: [float(p1) for p1 in p[1:-1].split(',')] if not(pd.isna(p)) else p)\n", - "\n", - "p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_cosSim'] = p279Seeded_SiblingsDF3_wabs_text.apply(lambda p: cosine_similarity(np.array(p['BERT_abstract_emb']).reshape(1,-1), np.array(p['BERT_abstract_emb_right']).reshape(1,-1)) if type(p['BERT_abstract_emb']) == list and type(p['BERT_abstract_emb_right']) == list else -1, axis=1)\n", - "p279Seeded_SiblingsDF3_wabs_text['BERT_abstract_firstSent_cosSim'] = p279Seeded_SiblingsDF3_wabs_text.apply(lambda p: cosine_similarity(np.array(p['BERT_abstract_firstSent_emb']).reshape(1,-1), np.array(p['BERT_abstract_firstSent_emb_right']).reshape(1,-1)) if type(p['BERT_abstract_firstSent_emb']) == list and type(p['BERT_abstract_firstSent_emb_right']) == list else -1, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 323, - "id": "following-bhutan", - "metadata": {}, - "outputs": [], - "source": [ - "for col in ['textEmb_7props_cosSim', 'textEmb_2props_cosSim', 'BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim']:\n", - " p279Seeded_SiblingsDF3_wabs_text[col] = p279Seeded_SiblingsDF3_wabs_text[col].apply(lambda p: p[0][0] if p != -1 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 324, - "id": "offensive-tamil", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1parentnode1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sentnode1_emb...BERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
0Q100400481Q100355826Q2472587YukonerspeopleDetroitersYukoners is peopleDetroiters is peoplepeople is typically Yukoners or Detroiters[ 3.88018750e-02 8.60690176e-01 4.90037464e-......NaNNaN[-0.07126519, 0.6527018, -0.3797528, 0.1969095...[0.52179945, 0.6418564, 0.3750265, 0.5378938, ...[-0.07126519, 0.6527018, -0.3797528, 0.1969095...[0.52179945, 0.6418564, 0.3750265, 0.5378938, ...0.5595230.559523-1.0-1.0
1Q100448818Q100196985Q2472587OregonianspeopleKuwaitisOregonians is peopleKuwaitis is peoplepeople is typically Oregonians or Kuwaitis[ 2.83955485e-01 4.97512490e-01 9.54957902e-......NaNNaN[-0.082290515, 0.7254986, -0.14525111, 0.31967...[-0.42398202, 0.17036317, 0.35879236, 1.112137...[-0.082290515, 0.7254986, -0.14525111, 0.31967...[-0.42398202, 0.17036317, 0.35879236, 1.112137...0.5980380.598038-1.0-1.0
2Q100588072Q100568638Q846570UtahnsAmericansWyomingitesUtahns is AmericansWyomingites is AmericansAmericans is typically Utahns or Wyomingites[-5.01574516e-01 7.97144234e-01 -5.04231870e-......NaNNaN[-0.17937128, -0.30326533, -0.14656651, 0.2619...[0.2421372, 0.41370165, -0.017250024, 0.896231...[-0.17937128, -0.30326533, -0.14656651, 0.2619...[0.2421372, 0.41370165, -0.017250024, 0.896231...0.8251170.825117-1.0-1.0
3Q100606028Q100440056Q2472587MoldovanspeopleIowansMoldovans is peopleIowans is peoplepeople is typically Moldovans or Iowans[ 2.46052667e-01 -3.61022986e-02 2.22438946e-......NaNNaN[0.27328575, 0.3186499, -0.13949376, 1.0969052...[0.025020197, 0.4693855, -0.50199574, 1.351041...[0.27328575, 0.3186499, -0.13949376, 1.0969052...[0.025020197, 0.4693855, -0.50199574, 1.351041...0.5789320.578932-1.0-1.0
4Q100606074Q100606028Q2472587IowanspeopleHoosiersIowans is peopleHoosiers is peoplepeople is typically Iowans or Hoosiers[-2.31350675e-01 9.12515879e-01 2.31145900e-......NaNNaN[0.025020197, 0.4693855, -0.50199574, 1.351041...[-0.4371684, 1.0444875, -0.63107914, 0.0789803...[0.025020197, 0.4693855, -0.50199574, 1.351041...[-0.4371684, 1.0444875, -0.63107914, 0.0789803...0.7676880.767688-1.0-1.0
\n", - "

5 rows × 28 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 parent node1_label par_label node2_label \\\n", - "0 Q100400481 Q100355826 Q2472587 Yukoners people Detroiters \n", - "1 Q100448818 Q100196985 Q2472587 Oregonians people Kuwaitis \n", - "2 Q100588072 Q100568638 Q846570 Utahns Americans Wyomingites \n", - "3 Q100606028 Q100440056 Q2472587 Moldovans people Iowans \n", - "4 Q100606074 Q100606028 Q2472587 Iowans people Hoosiers \n", - "\n", - " node1_sent node2_sent \\\n", - "0 Yukoners is people Detroiters is people \n", - "1 Oregonians is people Kuwaitis is people \n", - "2 Utahns is Americans Wyomingites is Americans \n", - "3 Moldovans is people Iowans is people \n", - "4 Iowans is people Hoosiers is people \n", - "\n", - " comb_sent \\\n", - "0 people is typically Yukoners or Detroiters \n", - "1 people is typically Oregonians or Kuwaitis \n", - "2 Americans is typically Utahns or Wyomingites \n", - "3 people is typically Moldovans or Iowans \n", - "4 people is typically Iowans or Hoosiers \n", - "\n", - " node1_emb ... \\\n", - "0 [ 3.88018750e-02 8.60690176e-01 4.90037464e-... ... \n", - "1 [ 2.83955485e-01 4.97512490e-01 9.54957902e-... ... \n", - "2 [-5.01574516e-01 7.97144234e-01 -5.04231870e-... ... \n", - "3 [ 2.46052667e-01 -3.61022986e-02 2.22438946e-... ... \n", - "4 [-2.31350675e-01 9.12515879e-01 2.31145900e-... ... \n", - "\n", - " BERT_abstract_emb_right BERT_abstract_firstSent_emb_right \\\n", - "0 NaN NaN \n", - "1 NaN NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 NaN NaN \n", - "\n", - " textEmb_7props_left \\\n", - "0 [-0.07126519, 0.6527018, -0.3797528, 0.1969095... \n", - "1 [-0.082290515, 0.7254986, -0.14525111, 0.31967... \n", - "2 [-0.17937128, -0.30326533, -0.14656651, 0.2619... \n", - "3 [0.27328575, 0.3186499, -0.13949376, 1.0969052... \n", - "4 [0.025020197, 0.4693855, -0.50199574, 1.351041... \n", - "\n", - " textEmb_7props_right \\\n", - "0 [0.52179945, 0.6418564, 0.3750265, 0.5378938, ... \n", - "1 [-0.42398202, 0.17036317, 0.35879236, 1.112137... \n", - "2 [0.2421372, 0.41370165, -0.017250024, 0.896231... \n", - "3 [0.025020197, 0.4693855, -0.50199574, 1.351041... \n", - "4 [-0.4371684, 1.0444875, -0.63107914, 0.0789803... \n", - "\n", - " textEmb_2props_left \\\n", - "0 [-0.07126519, 0.6527018, -0.3797528, 0.1969095... \n", - "1 [-0.082290515, 0.7254986, -0.14525111, 0.31967... \n", - "2 [-0.17937128, -0.30326533, -0.14656651, 0.2619... \n", - "3 [0.27328575, 0.3186499, -0.13949376, 1.0969052... \n", - "4 [0.025020197, 0.4693855, -0.50199574, 1.351041... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.52179945, 0.6418564, 0.3750265, 0.5378938, ... 0.559523 \n", - "1 [-0.42398202, 0.17036317, 0.35879236, 1.112137... 0.598038 \n", - "2 [0.2421372, 0.41370165, -0.017250024, 0.896231... 0.825117 \n", - "3 [0.025020197, 0.4693855, -0.50199574, 1.351041... 0.578932 \n", - "4 [-0.4371684, 1.0444875, -0.63107914, 0.0789803... 0.767688 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \n", - "0 0.559523 -1.0 -1.0 \n", - "1 0.598038 -1.0 -1.0 \n", - "2 0.825117 -1.0 -1.0 \n", - "3 0.578932 -1.0 -1.0 \n", - "4 0.767688 -1.0 -1.0 \n", - "\n", - "[5 rows x 28 columns]" - ] - }, - "execution_count": 324, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 325, - "id": "boxed-amount", - "metadata": {}, - "outputs": [], - "source": [ - "# Checkpoint 2\n", - "p279WordSimSeededDF_wabs_text.to_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmbAndCosSim.csv\", index=False)\n", - "p279Seeded_SiblingsDF3_wabs_text.to_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmbAndCosSim.csv\", index=False)\n" - ] - }, - { - "cell_type": "markdown", - "id": "handled-wichita", - "metadata": {}, - "source": [ - "# SVM Training and regression" - ] - }, - { - "cell_type": "markdown", - "id": "normal-tomato", - "metadata": {}, - "source": [ - "## ChildPar Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "id": "necessary-commander", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmbAndCosSim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 370, - "id": "under-german", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.602876\n", - "std 0.146181\n", - "min 0.064503\n", - "25% 0.493110\n", - "50% 0.597949\n", - "75% 0.711631\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 370, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text['bert2SentSim'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 389, - "id": "surgical-synthesis", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
textEmb_7props_cosSimtextEmb_2props_cosSim
count19454.00000019454.000000
mean0.6866850.678516
std0.1004720.100452
min0.2357550.235755
25%0.6236640.615677
50%0.6930180.684735
75%0.7559260.748264
max0.9657430.964936
\n", - "
" - ], - "text/plain": [ - " textEmb_7props_cosSim textEmb_2props_cosSim\n", - "count 19454.000000 19454.000000\n", - "mean 0.686685 0.678516\n", - "std 0.100472 0.100452\n", - "min 0.235755 0.235755\n", - "25% 0.623664 0.615677\n", - "50% 0.693018 0.684735\n", - "75% 0.755926 0.748264\n", - "max 0.965743 0.964936" - ] - }, - "execution_count": 389, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text[['textEmb_7props_cosSim', 'textEmb_2props_cosSim']].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 391, - "id": "incident-nevada", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BERT_abstract_cosSimBERT_abstract_firstSent_cosSim
count19454.00000019454.000000
mean-0.145757-0.187870
std0.7717800.737520
min-1.000000-1.000000
25%-1.000000-1.000000
50%0.3665390.261753
75%0.5554160.477809
max0.9153900.934461
\n", - "
" - ], - "text/plain": [ - " BERT_abstract_cosSim BERT_abstract_firstSent_cosSim\n", - "count 19454.000000 19454.000000\n", - "mean -0.145757 -0.187870\n", - "std 0.771780 0.737520\n", - "min -1.000000 -1.000000\n", - "25% -1.000000 -1.000000\n", - "50% 0.366539 0.261753\n", - "75% 0.555416 0.477809\n", - "max 0.915390 0.934461" - ] - }, - "execution_count": 391, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text[['BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim']].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 377, - "id": "welsh-affairs", - "metadata": {}, - "outputs": [], - "source": [ - "import seaborn as sns\n", - "from sklearn.utils.random import sample_without_replacement" - ] - }, - { - "cell_type": "code", - "execution_count": 375, - "id": "suspended-auckland", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 375, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "sns.lineplot(data=p279WordSimSeededDF_wabs_text.sort_values(by=['bert2SentSim'])[:500][features+['bert2SentSim']])" - ] - }, - { - "cell_type": "code", - "execution_count": 386, - "id": "younger-roller", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 386, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAD4CAYAAAD//dEpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOy9dXgl5f3//Zo5LnH3bLLu7guLu7tTSqFooe0XCm1xK9BCcXddtCyyC6y7uySbbNzl5OS4zMzzx32SydnsUtpS+PUh7+vaa3NG75m574+LpGkaAxjAAAYwgAH8M8g/9QAGMIABDGAA/xsYYBgDGMAABjCA74UBhjGAAQxgAAP4XhhgGAMYwAAGMIDvhQGGMYABDGAAA/heMP7UA/h3kJ6erhUXF//UwxjAAAYwgP8pbNq0qV3TtIx/9/z/SYZRXFzMxo0bf+phDGAAAxjA/xQkSar5T84fMEkNYAADGMAAvhcGGMYABjCAAQzge+EHYRiSJL0iSVKrJEk7D7FfkiTpCUmSKiRJ2i5J0sQ++y6TJGlf7N9lP8R4BjCAAQxgAD88figN4zXg+O/YfwIwJPbvKuBZAEmSUoE7gWnAVOBOSZJSfqAxDWAAAxjAAH5A/CAMQ9O05UDndxxyGvCGJrAWSJYkKQc4DvhG07ROTdNcwDd8N+MZwAAGMIAB/ET4sXwYeUBdn9/1sW2H2t4PkiRdJUnSRkmSNra1tf3XBjqAAQxgAAM4OP5nnN6apr2gadpkTdMmZ2T822HEAxjAAAYwgH8TPxbDaAAK+vzOj2071PYBDGAAPwA2LPuClqa6f37gAAbwPfBjMYzPgEtj0VLTAbemaU3AQuBYSZJSYs7uY2PbBjCAAfyH0FSVKUsuxPfCCT/1UAbw/xP8IJnekiS9C8wF0iVJqkdEPpkANE17DvgSOBGoAPzAL2L7OiVJuhfYELvUPZqmfZfzfAADGMD3RCiqYgW2RQsp+akHM4D/X+AHYRiapl3wT/ZrwHWH2PcK8MoPMY4BDGAAOoJRFb/mxKPZf/R7q6qGNxwl0Wr60e89gP8e/mec3v+/hr8TBlrlficqN7cSjSg/9TD+pxBwt5EqeZku7/7R7/3k4grG3vU1Hd7Qj37vAfz3MMAwfmq0V8DDg2Djyz/1SA4JVdXo9IV/svs373ez4IWdrPqg4icbw/8iIt52AAZLjT/6vedvF/fs+Annzf8CNE1DVf93hMUBhvFToyNGBMu//mnH8R14dlklE+/9hiZ34Ce5fyQkNAtXi/8nuf//KsIBHwCfMedHv/d5oY+otl6IHPb86Pf+X8Lv5m2j5PYvf+phfG8MMIyfGkaz+F82/Oi3rmzzUt7yzxf0oj0tANS7fhqGYU8U78iWMGAP/1cQCQqG8aX04zOMEyLfACC5B0J6vwsfb/nfyiL4WTKMxn0utP9HfAah3KkAuNPG/+j3Puqvyzj2seX/9DiTQUyTiKL+t4d0UCRnCadtaq6DB7/cw456908yjv81RAJeAAZLPz5RkjQxV6LB/gKJqmoo/w+aYQKeMLtXNuLpDP7UQ/l/Fj87hlG1rY1P/rqFHUvrf+qhAFDdpXJ66B6W2Y/90e+dhpsMXN95TMWmVmxIAESUn2aRd7UKU9T+be2MXnMTjzz/0k8yjv81RENCw7hWe/+Qx/g6m9j9/h2HDLpwt/kJeiMH3ddQ5uLpXy/G19XfsS0jGIYS03L64taPtlP6T8wwqqLyzl1rqdr245UBqtzSxpK39rLxq+p/6/ztS+r/5fFaCJNB1791v58CPzuG4XWJye1q+n/DHm7Y/y2Pmp5DOYgk9t/GEsvvWGO54ZD7PZ1BFr64k2kVtVRbLwTvT1PDy2QW5rrisUmcYljLn+VXf5Jx/K+h3TEUgE6SD3lM5StXMnLP36nctOig+9/681qWvr33oPs2LagW96n39tsnIxiQGu7PMD7YJIS179Lyg74ormY/i988+L3/G8gsSgAgNcfB7lWNlK9v/pfOX/F+OV89t+NfOucN80NssF57yP1RReW1VVWEoz+Ndn8gfnYMI7skCYC8Yf9ZFXWfO8TKD/ah/ptmmt2N3Szc1YzqbWOw3EhO4zf/0Xi+D9yBCN/ubun9vUcrZIM6/JBRGj2EOsNaKTaEuv+7A3y4FL69u9/mxHQbv3rsMPJHCh/Gh/Jx/91x/A+hubWV5vr9B93XYcrmG2USQcl6yPM3y2MB6LTkH3S/yWLAmXbw831uEQHV42PqQVeLH08kCwA11J9h9CAYOfTaMZgEaVKiUXbdMxW363vk81avgm2H1qb+GWJWNGRZYsmbe1n02p5/6fzrss/g2qwz/qVzEoL57AvM7sc8N044nE0TDufVVdXcNX831769iXrXTy/k/rwYRt0GgntXAULV/r7oDHby2KbHiKrR3m3L3ilj26I6aneLiaypGt3tB3cKa5pGqyfeLnriEyu4+s1NREJiHNmd6/udp6oaxX/4gpdWHJwg/Ku49u1NXPnGRlo9QarXfMw0eS8mKYo3HD3o8eGg2O4KDQLAZ0j4QcZxSPjbYeXf+m1uq/Xw4s3LWfiMaEcclS3/3XH8SPhX/GgbmzdS56kj5I+we1srt320nbsevBfD05PRXjrmoOdYOss4xrAJOweZl9WrYNkjGCRBJSNS/xxeVVGJhBS2fXsQx3U0TGqGTFKGjYzC+Hnx9p1rWdh+L27Njl929js1AxdmIvgOMe8AJGEFJdexhFFqGfvXzz/ksX/6YAPj/vA+vHYifHLVIY/7Z6jbK9ay1xXCkWwhJcfxL53/dPMnPNP84fc+XtM0lnRfx/LuK3WfTjQMmsa6aXeydtqdVHcIhvvtnlZu+XD7vzSe/wZ+Xgxj/Qv4134AQGfToSWfA7GodhFv7HqD9kB77zazVSwwSRYze9OCat780xq6Dgj9XFXRzqDbvmTq/YvinLXXGj5lvvl21LBYzAdzAoZj2stDX/0wavm+FmE60DTwfP0gAJPlctz+CAFPmPb6eLOYGvNZhCIyN2SmE3BX/iDjOBi6OwLUhcbQpiX12xcNi7Da7FIxXa9Qv/+i/H8Vy98v55lrlnzv43+x8Bf8cuEv+fLZHSx5didFmx/hrtCjpEhekrT+5swmd4B9K8R7kgnR7m5m4/zn0dSYGP3aibDkPnIU4RB3tmzod41wQLz3lOyDZIp/+Xvqtjfhbgsc0kk8LvQSdWmz47a1e0P83fQ075rvwx/654mY9YEJAARsuYc85oTtv2Gb9SoYeRqkDzvoMa2eIO7AwX0xPVBjZh/ZKOHrCtHR0N/U9s+gER/t6Gr2sezdMrSDrO9oTMMKaklEVQ1UhfADBZS9+4feY/xNfv6vy0ZeVCbZ/tNHCf68GIYjg2TXNgDSFN00o2kaaz6ppHpH+0FPSzAnYDaYkWLOX4DisekAOJOFtBsJxxaiFH/unZ/t6v27ss3Lghd28tz1SznKsIWRUg3RmFPw4AxDwVb4PMakjf/igx4cUz1t3OZ18ad5W1gpTejd7g5EWP1JJe/fF080bDFTQ03aepY67IQ6+mtBPxTm3b+Bz1z38Lkyvd++Hkk8MVX4nyL89AvnP4XNaSIx3fq9tYy3T3ybF455oTcX5VtlKuox97Ip+zwM6KYdd5sQQL7Z3YJVEu/rjvRsjvrkGCZvuoWdKz8DoFwVbWesCLOS0d/a756hgNAAEiak9dvXnTaWkCa0B3/3wZPzjpM3EIrEaxE3Pz+fmYbdTJL3EfB+d8AFgOIXAoRmOPQ3n2WIrTElCvLBqx1NvX8Rsx9a/N33iglIBoNYxLJB+q7DD40+33TVl9XsXNaAt6s/UzWaZGRTHXa5E1XTaNs8H7Ma5PGdFlKCdSTLXcht4htmKBKZCYc2Lf5Y+JkxjDTCHSEyWzdj2acTR02DzQtr2L/14E7dhOoOLvrcQ1OV3rK8uUpoCz3SldkqJAtZlqjc3MretU0AJNn0iS5JosSFElWpV9Op1rIJxRiGpPaXfvzhEEZHFZLthzFJDetOIhrN5eqqW0gK6wTC7Q/hc1eBpMURsHCMYAzuHsXlXd2kRf570+WS+2ZwUfq1pEv9Q2Z7bMvbFot3XG4cSvN+NzuX/2/FsPdFcqadwZMykaR/TpQ0TeP3y37Pu3vfZexcQejLLUORZ91IWcax/FG5EoDa3R289ec1VGxqZXlZG2cZVhDSTGxlFsVRwfzDvi4A3leOAGCFQ0TnSZH+Jtqe7793Yf/5t7RB5pqss7jwN3ayihPjny0WBv28+THG7H08bt/fun/b+3fId+jwaKNJ5vTfTqCo5B8AmKPfQ9ov+wJadx1ytyd0aBMY6BqGJEvYE82k5fU3pwG8saaaO/+x86D7AOjzLhdWCppS5+7PMAKeCGqkgICajKJqBFc/R7OWQkXqYbisBXSpybSrQgurNar/T6QC/MwYRgZBcxqtmRPpduptOHpMHilZB7dZtj/1NMds0SjV0nu3BYKC83vc4v/WGk/v/wte2Mmi1/ZQ3uJhU40uRUmSxKjDxIJPx0+p3ESFNIgGLQ2D0n9C+SMhDIqRhFAq/9jawMp9B9eAvi+ixi4AxhrKKZZaaI2UEFLteDwe6nZZQZNQ+kRj9GRYhwKZ5K+2IHn+uUR4SLgboGFT70//pk3sGT6CcHU1AEvfKWN+1+0EtP7+CbXPQmnWUlAlIx89vIll75T9++OJoavVz9O/XkzNro7/+Fr/CrZ8U8vmhbWHlM77Iuxvo8nXxPtl71G/R8yBF6RHQNNoTxzFh9E5aJrWG/nXUO7CVD6ffKkdixRBU1UyFCF5d8f8Us6YX6NRE83IDpaRHfDGnNpaf0JbUv0537pv4tuPuuJ8d0pUJRpRsKhu9ryXi+SJD5QwoV8r5P/uyMAtX9cSdGeLHwbzIY97NHKOuLcmnrG+KT66KRJSGBE2kKx8N3PuCf4oHpOOvztMW23/8WmaxnNLK/l2T3+NrBch/bw8t1hPFz6zBoC1+zv4epcYn6tZCIsaMqq/C3d9Akmawm8DT/We7/CINXisVv6dY/+x8PNiGPZ0FLMgSK3k9G7uoUe7Vx285s7QnYJQdpuihINRnv71YkJln5JlKmNnq/j4CbFIkpxS3QZ/ycvr4q5jkCTcsZyCYKyCqOzZzdUJU3g34bB+9zWrMhPDXq6QFvKb97Zycex6X+5o4pWVVd/rkfe3eYnGfCFDjVsBFbMcZJRUzQcdf2W+6w7K61uQjEIj6mrxs+WbWqIRBWMsUsUnrWbsNgMef4v+wv5FaSc075cor58OCK2sdnUFGhLh2loAKja20h3NR5YOct0+wTTZkosUfrhorc5GsWgb93X9YNf8PvC6hIBwsByGAxEN+Hn3HR/vVU3CXS8k1jFqGUgSWf4KzjEsRVVVTDEtNxyI8gvjgt7zs21fscEc4uXghdSvW83myhaOMmwGoDAgJHL5IBFw4aiYq6lSS799ik9mX3AOrfXmuGfwd4fxdoYY2vSpuK47/rpf9DE5RvyH1jCiEZWanR20dEwDIJBQeMhjn1LOoDj4Dl+6b+aF1tf45oU/xu13t/k52W9mUPS7yV1nt3iOjc2HHtf2ejeN7iChqELZumaa94tjdyz/RD+oD8PwmMQ7vMIk9l/0wiqufVOs45BfZ56tVXUs676GLzpvJyHcSoprL05vPaaIGFOBdyzOPT99mZWfF8NIK8WUJZxiueiJez0OqQMd1gBKt5jw7x4uU+Hw4m4V0lRN20wcsgtNctHqb+Wb2lgtKAmmnSa6D3S444mBoqrU7xXMR9FsAIz1f0xNxm4+tfeXlt9YvokNNit1Fl0KfW99Le+ur+WvX5f1MoJDobErwJF/XcbFL6+jtTtInf8IQCaoOtmqDgGgJTKEJTv2I1v3ATD/ya2s/qiC529YxtZvBDEv6hZRMNnemBZ0dzK7n/nOivb90NHZwfpIKQDl65tZtCuD/Zc8hXXc+Liw3rPk5b2SVw/UA5iTkR8uJt0R80H1ZfQ/BiwxB2bQ/92OWIB9q+ZhqLHQ/fk6RpSKSB5ZFnOi1LWCR0wvoEQjRGN+tOKx6UyV9fl0vNfPcRW/Jth1Dt1dF1P90VJqpVz2q9kMDcUYRrg/wzDZu3F66zG0dvXbZ7c2cnLKvUC87GBPMDN4egKerNK4cfZAQj+4JxP9YOgRVowWcW/5OwSU4+T1nCUvpyI6koiahEcV605RNfY0dVO3R6y5Qeqh79cV7KKlXdCE5q/Xk1GYgD2pv1bz1U4hIIYiKt++uptP/raZjpY6xiy+XD+oD/OdKa8G4DrTxwB8bb6FCuulAAR9+rd/9FVRcaGg7ltSTBFSO/eQ3bye2cb1yIjj7NU/TWmevvh5MYyMYZiPFYlqUUmfDDuXfXzIU7q2C0nsmNYsJir5vVFRAPtD0/FVhVnXtI42t1jI5etaWPcPYfNN0OJV4Ls+1JN6FkjChjw8HOYMj5eJniFxx7p8Yd7fsh+HqpIT1G2pf/h4B52+ML6wwu6mQ0vatR1+fvGq8NOs3d/JtAcXofZGcEgMlXvs/zK7u5Ow+UcAwq7agz1rhNbhsQoGWGUu7t03su2rQ977YEgMt1Co1oGq9Pok2us8tJc3EfDoRGW7/2TevXtdb4gjgKPPwlU1mWcS/sSYw/Mwmv/z6dvDnOrL/gNz278Bi12YT0K+77arA9R7GvlopsQHh8kkWztJMdQRIOYMjjl5lWhUjyYbrDO/3UoRIf8oijqG9m5r2p9BuuShRG4mPRb8sanoyn73rVjfgteZT9TQ39la757ICv9pYgyaRtAXYf/WNlwtPiq2t9Agi6AKQySeyIX6BCx8n2RVsyrmhrN73yGPuc/0Kn81P0eqsR5VilIoifX39eZy3n7qDrQMcc9LzJ8d8hpv732bN5MfJTnxK8aG36Kt1oPfHc/sNE1jwU6xJqIRlWufOYJrnjoCNRT/jFqf52oIiNI/AVX4eUrlpt59Pd/+5Sm3EFTFGq9IOJ5BaiOVpWdQMfhMTEoqauydpacd+h38WPhBGIYkScdLklQmSVKFJEl/OMj+xyRJ2hr7Vy5JUleffUqffYf+oj8ArntrPc8uFrHM9W49dnzkmv875DmVmzsJmRNJ39NEW9lWElKFRGqRxKRQggGmZk/l+LMmARD2enuJgV2VAA0bQSRU5kY29163Qh7JZ8oMumWZwkiU673vxd134a5m3NF8ioIGtjCod/t4qQKvVxC59VWHTma69aPtlMUKC95/xmgumV6E1qdfVjr6pL7R3cd300eQGzkrZrbzLQVgnq8YgH1qHp8r0+jyh/+plgPAexfhVNzkSe0EvXodL4O7jTWfVcctzJWeX6JpsOFz3eSWnp/A+GMKkWWFLiWdibsUdixr6JWo/xPIMQHAav9Beol9b7hi0UOh76FhJHUHOL0mxCnhdDoranApBagxe73fn8QXrtuIhMNMPK6I0omZfPyoPs9q/Edhq42f30l5EQolISmPUXbToKXRZtLDVjtrWllyxxMYusU3UEzxTM0ddLPZdyTusGBCmgZl65r56rkdbPmmFvx23F1LATCY459vt1YEwEXh29ifMOngDxz2Ea0XPTz8kUyx7TuKcyrIrPeeizc4Glkz8kZIML+UzU9xn+lVGrYJ6V1GMNRznlvNKU+ujLvG0JShmBQLGdadZCsH942VtXio7vCTk2Dl+k4Lz1y7hFf+bwXKAQEDUUlnimHt0NFdgVjp90urZiLFzulyluLreWZgqvPd3r99vnR+avzHDEOSJAPwNHACMBK4QJKkkX2P0TTtZk3TxmuaNh54Eugr0gd69mmadup/Op7vgjXq5cq6xwGI9rGtaod4DZGQwobdyWw6+gEA9reX96rfIU0wnHTtG5bVL+PxFU8D4F03j7NOaSYhwYuExtmG5eyxXkGe1M5l8tLea482VDBYaqTDYODvqclclRNvEmlf+zbjDZvR2lUqQ4Kgl0oNfGq5gyuCrwGw7jsYRjQSpIf6TyhI4VdzSpANQorep+ZikkOMs+v82WkQztTkQbrT2bVzKwCpfjFR0zvbca99iyFyAzlSJ8kPZ1D+9+/xyfZ+3vunt7sTzS18RZZwNz6/hKszXtKceHxRr8kGoG53B1u/qUVVDZglnXiddN3Yf37vfwJHUo9JKvk/vta/gq0tYv55vsPp7ekM0lTpJuzuwNBgJrK7jTLvDAAUxLiry4ZTHZqKq9lP5eZWQv4IRRPt7DcZuSEzndBBEvK6W0xEYhp2Ij7ypA6m7ntcH9vnO9ndOprMHZ8imarwZcZryvurG7BGknE41wKgqiquWF5TaizZTbZNQJVkXsy5P+7cw2UhsI2Rqpi+9yFY/mj/B6/fAC8fHbfpvi/28uUOXTrXNL2AYUQzssF7Xu++EqfwD35iFnOzebtgNmpsnY+re4tZzW/GXX98xnhOqrmBfa3/xy7PKTQn7Cdo8KF4PJTPnIV/40YW7GxGkuCkEVm95wU8kX4ahj9baBV0N2G3iUCP6aGnUFWNSjWH+TE/Tk2zMJGZ2k/ncqeo9NA0+TPSTVUYlTaMaiO1oYn6vYIpvLOutv/7+hHxQ2gYU4EKTdP2a5oWBt4DTvuO4y8A3v2O/f81WCxWpFhma9+0h7fan+j9++hHlvT2fVB6Emv8YsGMSxkdZ3cE8HcOxRFNZHRzrIR0OMLyTxqZJL3BLMtijpKFtPf2zntp6BRSXOfMFC43vEi65KY0EuFXXW5u7XSJOHKgut3H9Z0P8ZDl79z9tsLJuwRBdSB8CJlaO5IEm6vaUDsO4vwOdvNa+wWMkqoBSLAasbjKmWUXSYsr1dH4lBRqQ3ouRqqxjqgUQvY/z5zTUgGoaxPx975EYZJ61PoCSQtEp91JslCPs91bD/6yOyrhy/+D9ng12t/dhbbpTdBUbIF2vAEDEU+8fXrsEfmcdK3ODMIde0k2NDDR8TF/TxWMusMW6hfFcsO7W5i3oY7uYIS6Tv/36t/Rk9fQ1wT2Y8BqFoyitf3QFQfeuH01Hz+yidagiODKblQYkSRs4p+6H4zNRTE3/aEgVdva8XQGmb71JLaa7Sx12GkziOsHUr7ova4WhQZDQdy9pjS+CWFxbM5QUTZnR8uRaJFBaK3xETrBoBj7LruYr+satvYGD/SUC7HaclFlE5ZOPZqoyR3gZINgMn8wvcfo1vmwWPhBNn5VzdO/Xiy0z/3L+r0LDYlr39Y1p9s/2cmFL65F0zRCmom+pKzUL3wYW10W6tQMCIn5pWkGTnpiBX8yvc0fTPEa/XPbnmN+8d8B+Fg5jBx/KVbFQWDrNpTOTtqffoqV2/dxeIGZ/AM0roApjTJVL63yqzc20NAVgL8Np1gTazaHTjzBKG8pR/O1MhmAivp23NY2npv+GyRFMLlx6zIpP2wpUUMGUTmXbb5Teq+bX7+UPy/8tN+7+THxQzCMPKBv7YD62LZ+kCSpCBgE9M2gsUqStFGSpLWSJJ1+qJtIknRV7LiNbW3/XhE8m9VCfpKoD1N85Oje7VFN9xF0tLlZvVPYQCP+PuGCsolObysJqVYuuHMatnSRRevxjaf6STNHnz0WUKlWCqgPj2Vp97W0KseSGbO++fdZsJSJ1524ro2W+jFU7shinVSIXdUYFwpBNMBn2xqZ++hSAIbGSifMqRILdr+Wg6ZJbA1PY0pRCo9F70d59SRQ9YzZF5fv58sNe3BofkbIQhpxWowkbH2R9T4hhTXaBvN89ERcik40PEomRs2C3D6bFf8QxHN2gijy57dUs7/4ZMqt/bNtFckgWswuvg+ifZz8vjZY/wK0xav3Aa+LZi0V0LAG21FUicWbV8cds2FpHa/fs7b3t927ivPTbyLLtoJgUDhT0wIW1s+visug/XZ3Cx9trmfsXV8z5+ElzHjwuxO1ANLzxbdPTLPFbQ9GFC55eR1bav87vo1fp95DmrGK7sA/rzhQGNNCgiYrSq4w40SDZpa/V44jS2gKHf5ujv7FSGbOlXm59U1KuvM5t91OokeYMxXPqLhrPpVyCwA71WI2qDH/hqsagKXzBYPyOAtweuuZu/HbuHNdHhEZlBuxYZCCZFlKaaoU22p36+HJmmTk1JZnen8/uvDQoaGbvhT39nWF9cSbPnjU9Fzc7x0NXayr6mTx3lY2uq+L22fxWVBVjTtdt1Egt6HGiLGKTElNOQ0h8S7cgQiumFloas5UTEpMu9YMaIqGYoii+gUTVetX8GH3hbzWejbHr4n39/hI4xNlNnNT76XE/g1Tal/nvs9387Y5n7KgyHR/0/h3Orwhhiph/s/4Ps3uIJ9Ktbhy3uaG8rk4gkFSXGV0RYdQV6P77E5J1WureRIKSMj/hJ8SP7bT+3zgQ03T+tYEKNI0bTJwIfC4JEmlBztR07QXNE2brGna5IyMjH/r5larlbBJOJ88nTpxM0k6Y1hgvI/idXcA4O4UKmMiu7j0Zo1zfI/j9nQy/4mtBN2zes9ZnbyfJ5c/D8hYNd3WmuW0M8GhS65Rm1DXrXIr6q4gybs91GlW/p6azKn5uYQDPhbubEZCpUVL5oWOt9k14jKsPo0MurjJ+BF7AkeR6D6KK03bOMywg3Wpp6D0+YzzNtbx+RbBKI6VN1JtvZCEyvlEiw7DbxAMKCl5L7IhwHj7p7iSNrE1dxEGWWhOyUY9GW57VDBVjcOoKTwWT2Byv3eqYKT52ydg+SO4V7yg79j0mvj/o1/GHR/ydqEho0ka1emCuCw2/oN802sMqfoIgM/W1eNt9Pcyg+YqledaPuCr9sdI8un+nDNuLuzNrFdUjad4iAkN7/Qb48Gwp6mbOQ8vprFTfPsDk6LqXX5W7Gvnns93/1cSptoD4xhk2UBqwur+O2MCwPDp2UgSPMm51OXNpTmjlLIqfe4bjBKWHOFniqbks31JPU07Yg5f3/mk7nuQdlWYNJzR4rhbaAYbYdXEEnU8D0fOByDgaoA988mxCLNRyJKM15nP9lG/iDvXsk8IbIaOjTw9/VbcTl3L9fcJmlBlI1qy3lZ3e33XId/HoPHiuexJZjDpzDvdtoenmz/hy9bnOMVn6o2oM3dVMUKq4bFvy+kIx1nA8QfTqGl0MVXajZdkopqN4bZFjLYvZLhvEJ+67uPl0Nlc+/Ymbnh3C83uIB53Dqft/RUAM+Q9aKg0OPdROTyH311p4G9HZ3FP5BK6DrubNke8KTTU2oyZKEs7/8x+/zE4idDljzDxDZWSfcIc+1Hnw9z/xHo6u84nHBrEextquS20g+lNM4l0noFmXs+EbU8QthnR+jgSP7Le0/t3NLKGVMPwQ77DHwM/BMNoAPrqt/mxbQfD+RxgjtI0rSH2/35gKTCh/2k/DBw2C62dYoG1bNWzVyOxEFd7ymd82PkwNpdYEBGHk32J+1iR5eKKPedz9bq/U79+BV5XCC3Sk8ehoqhm5lSJ5CFVFdLMNkcnuaNBDgiiWF6qouZ/y3lpNzEl5TGGjVmLPB3Oppw5rfmc1O4gEFGobPOiITMt+AyKZqMlayrd2SbmGrZypfErIrHEtom1L7JKGcVl5bN4cble4+m4wBeMdgmJ8FiDsJ8a51+PbLZRnPE4G/O/YnaiymWsZX9oMlFzB66EOmwTT8Uht3NE0jPYxwl/RpMiHJR2tZq5y39DhnUb29SSuHcakiw0+gWT7NoVq7gbCaDujfU7iMYnJLpbajnCPo/xSQ+ws0C898s9FyFX5rJv0FkAzA6K6/TUsgrHEgg3maPsM+u+jS1fbus9xhuKcpRhC3+Q3yCFbpJjTv0uf7yPIBRVmHzftzy/rJK6zgBfLxcFDZsbvDy7tJIObyh2PXHPLbVdLCnrn6SlaRp3/GPnv62BrLFcwEbfuSg7D4gUat2D9reRqNWrqdnVgabBprQo+4acQ/WQa4lGdRPWUZeNpHGNGNvOHXXM/7iMxloxfltQZ6wJ3dWkdC+Nu825ld/yYus8LJpCsSwc4B+t2wfvX8y0HnONJMjD55Oa6G7Xa0Z1BoU20em0M736NFp368s90ie3YNXMB1DCyQD4w1Eq27ysVUcc9H30RLx1NnrBqEdltQf044dHjHjDUSKKyovR2/nKchu1DU3sMPfJZ0h4EQkD+9bvxSip1JZeA8A3jOVK9de9x3UoOayq6KArEObhhXu5Y8VDRDQxhgw8SMgUukeQ2dVES9fZLOi6ik0555N85E1U5l8cP/i6XdxsFMLOhvyvuMb8EfYOwXR9Dt3Y0u4Xfiu/ms7na3fhCkylOSj8HTXKL1h04hkYbPa4wBO5UfdBtWaMJC364/fN6YsfgmFsAIZIkjRIkiQzgin0i3aSJGk4kAKs6bMtRZIkS+zvdGAWsPsHGNNBUZhqR1E6QVNJ9dX02x9x7CbPvINcrY0WdwDFqFJr2kxp21gkv3A2ak2CAaRm/53alG2AzJzufNL8uchEUOyiVlV+IBnHPt2BvGSokY+zRlBunklD1/nUOY6m1ZpCw34HilHl/a5r8JlS2d8mTBSWPpNm+Sw7vzN+gF9JYqVHqMMupZiv1KlUWi/BU7ut99hLIx8wVxGveK9awCfKLIiGsC25C2fHZE4pT2DwkGOIaFa6lXwy2o7liLLLyRuWgk9N5622Z/FvE07ujKgRUPHLxSyZ+xTbQudhIr5gXJ0hnzK7MJOkdmwW0vGHVyCHBFG51P5077FvRY9ieyANDQl7k8xVX25DQ6O+2kJt4bHIiotLM35FsUHEw/dIk36TkD7LzQpjG/XS5tVlKSjPHQV7Pufr7XpezRbrr9lqvZrzDEu46k09uxygwxum3Rvi063C8f5loyC4L67bw18W7OWLmGPVFysjYZQl/vp1eb8S8OUtXt5YU8OtH/17FUSbR6QhW8qR/CYIdvPOuloe/7YcbcvbSN5mHlrW2hvi/LBbMN9cy0ICMU3QYg72ZlibpAD79y7HGNVIVvZhJIQNXdL3JBbjOyA0trFbaMjDNBe/N84DwKyI633c+VDcsWfu/pY3/7SGN/8k5lWoswVLsJOJrgQmN88ktf3gpdEB6pt/CarC7sZuVA0iioXG8Ajea/8by7t/1XtctFb4Jyo3t8Eh6kaVWNbg9kdo9YR4LSrmwTXGzxgTFkTVGmxnfH0ekhSlrSxmts6eCUBBIINMTS+iONJQzlx5K5MDa1hW1ka4awwmVZiCIpp4VwFbLR2PXMNbH77Pr8s+4bjRIus8bMqOH1hTBcGYIDel/gT8ShLXBoS27XPqkU1uo7BYKJiYGljB7KzfUlskGI1FM5BRL6G6u9A0sER2YA51xd3Gqg6iQfr0kO/6x8B/zDA0TYsC1wMLgT3APE3TdkmSdI8kSX1DaM4H3tPi9fsRwEZJkrYBS4CHNE37rzGMoVkJ/IHLyGzdTNd4Xe21y8JslG+o5PTUO0g2NrJ9bxltW6o4pW4uk73zGbHnDQBam0WiU2fLNRS6xsVd32h0URsrH2LTJCL1Pl5ISmSj1cLVX6lMq5jDTs95dCm5NLcVkb7UhafWxurURpyDH8XnDxBWVDJx8b7xrwBoweU42iOYicRFc4XThnHCbJEFO8Okaxg2AnQjFsZj0bO5OXId/Goxyphz2BM6jSb7bDY2u1H7hPttzVnEsMqbkIjiV1N7t/vVdPpOkaiWzUhZZ7TTg0/yVt5dlFHEleHfsSQ6mvb2Vhh+MiAK3FUoOSxRxHtSkPG317LTfwJrrL9H1qK41eWsK3wSR8v9HG1+ht3+o6mwChuzxyOk77o0Qdwu8B6kbEhrGXx2A/d+Igojvh7VS33/xfRiv9Bjk0HGmvcW1lwhRR8Zi9o5wrC1dz+APxDgHuOr/HYC7GrsZsGu+HITa/cLwSEnKd73AfDmmmpu/+S7G+mMKN9EgrGJdxLMRA023lhVwbYlHxLZIkxqYyqeZUQsrHlYt9D4GiK5+BOEiSc7p5vEdBtjjlS5KP062gMBbJLEflM+VrmbJHMl7uS1bM78kqjcTdgRX9SxOEFUyrWpRhq1dO6NXIwzZygHQ9R/CePPKWX2xSLpNV/rZNbaP+PxbuGp6bfi06cMzsFuJjo+6P3tlSHocrM9Vql5Q/dVfNL5AB3RQezwn0gwVktLbhMVmSccWwhqFKMU4vQbhmM16Bpcc2QY7kCEZneQJ5UzqSs4hV8Y9Iz2oDUde1sQ1V5DsEMwfMkk3uEpKXdzg/JV799HmZfwmvlh7vLfT9ATZnTXEKTYXA+qIrCiPLmSQERlX+kZWJIkLp1RDEBOcvxcSG1dxrvKkb2//WoyqXTTkgwBk54seE1ErFOPks6p8mrcwQuYIAtB1CJ/xNjtH2OJiCoKIdMYwpZkAIZaRRBAWvN7aMpPW4DwB/FhaJr2paZpQzVNK9U07f7Ytjs0TfuszzF3aZr2hwPOW61p2hhN08bF/n/5hxjPoZDqMOMw+2nNmkxFq57+b5SEqr0lPIXXW19ks+902srXE/a24fTWsdkus2eEyM5UO2ImFq1/Fmg4mkmaV9j53bKGElJ5NimTJ1JEyOzkXe9yzqVOQpJEICqcrQ5V4+8tbVzq7sZTuRIJlSTJR3JP8VvrYQzZP42awGw+CjzYey/7mCmMKRFO6Nll94s6+pEgCQSYLu/hkvAf2NTjzMwdj3T4rUiakCCzkoqp6ROu506sZtmeiXF5GgeDV473HQ2Xa/GpBtLa1qHIZm6M3MA31RGCo87jjegxbFSHcpFlJQtUoXZfZvyGm31/Z7T9K8q19TRmygxNXsKvOjPxpM/ma+WPbPSdR6YiFmTdV0/A38cxrPzFQ45JQyZqTiSMiT9HLuczwzG4+gQx9B7Xk/uhBDAl7sSUtJXrDZ+QFRHfMaSIb9TTt9zQsZdLjd9wResDDM2wccuH2/lwk67F9DCMRFt/aXh1ZQfvrKulsqIMb2s11e39HdvmDg2373CS3KPZ2+rnItczvGr6S2+NskJ7hMyiRGpGWak3i7FJ6hiS3YJB5WcIM5DBBK+1vUJC1IlBlRg87ShMUojW4GSSuqYzsfVEjGpiv/tnWUTxPKdqoNJ/GLt9p9JgGsZ1od/0OzZkTuap+Xt56SMRMFJmTWX3sIspKylgevVp+LK9nPE7YUlu9GbwvqQ3EdqS/DJzF5zAzgY3GQkWglE9JHVX1kqmFAtrdoKhGZvson5LNUy8DK7bQG2Zn6CiNzqzSD66/SHaXN2cbViGOu4iZEljkEUPkPAYNtNYGqAo8yPcUiLFk4o4bOQ33JRWwh+Th2OUgsx33UlrWA96Oc5v5hivzvVG2RcCMK7pCIoKjNQVHI1x1PU4LWJ9ZAR3Yle2Ygm6mJN4FYNsm3kpelLv+VHNTJrkIeI4nIhVvJfZCS8zyypMrT4ljfFSHZs6TqZ7VyxYIPhbagqORtJA5QBtNng4AA51JGPco/kp8bPK9G7y1zDKIcw3uZ26o8ynCK1gWHWEsGbDpebQ2NyMJVrP6N2v4rTohNIZi+CQpCDhSHx0sMPQxuGJz6FYXPid4tU6wknMCASpyIZF03Pw7tuJy5SMVxZEIJw9htXDL+C8bi9NrV3MlnfyjeUWnAY92sRvTGZ199V4vPpiazZMBlOfPgUhD+4OPU59pTqaa06ewfrbjwLAEOoiTa0muauc7vJkNvrO7T328LJfkpF88LIJJqlP2Kci/AE9PSvuMr7B+R3Pcnjr29xm/YjSZBltzTNo83/Di8qJ5EvtHBf4glNl3bFrlFRAJiPJj2F6F7bwYWz3noc95rg8L+0mTNMuB8AbBlzVJPgOHXvud1lYsjWfm4wfM02r5leJm0iRvL3jvNjwDaqqMfsvS3jwqz3Ylt/HrR0uTmlL5PemD5gWK419jGkZJVJjbytMqVuYrKxtO3iiaAXeUJTff7CN/W3i2j2mw+4+PRbmbahj7f6O3vyA6m+eo+admzj1qZW9jKgH4Zhje3TESOXXL5BBF98wjSnBp1mmjCVJ8rPsnTKKdgXJTejxW/0NQ7dI6jIUCa0t4BUSem5ICA/pcjtGSQ/oaJX3YTwgsSznqBy2dl4CwEJzAS3eU5gdNCHX1rBUmdbvHbuTBzM7aGKYT9yrzWRmX9EwJg09ivFNR5K8PZnyDcK0l9gcJi+iM9FBrj8z2DWR7Q1d3JSwBIuk+5RGtczGFBLMbFrCPHJMZax7bwPYkol+dgubv9a/u5EQe+RU3IEo3W11PGp6nvRoC+9FrqAqpGtPFcOOptE8ns/bL+O5pGfxdAZJLx7M7KqzSQimck76zeSZt9MULWSldS5VahbLbREqbDFN1OrGKut+pfIuhcUlb9Kcq5PKnTuL8BvGE7KmUOa9jkWGu2lDZ2xRzQKqg/Ih5/bZZibLVE6+eSteNY2gMybMxWpNhUgjaE1HViP4oz4yW/v3J2lPG8NY+Yl+239M/KwYxqK6BXwd80GZPLpUoiCkzHYljU7JxK7k03imcxKdNT7WTr2D7ES9bMcahNNX06zkdY0gpU/NHowuckx7WJfWxhFHFQNwSSCdycEQjVNCpFiPYcOObFR7AhFZSIqRiMKOrV9zQWoO29srenMt0ow17E0QNmOXWUwqu12XVBWvH83UR5LWVN5Zosep/9H4NsWGdjIThQorAe2GEXQlD2XXzv7JYoOLugjL/ZlGpI/d1xkVGsqmEbfykfEkOix5jAhtxRJ1EzIl8fvM9VzoehbbjrcA8GLDovr0fgUxbPWdQqp3JlmfJeJThCnJEOtmuNF3DnkluWSbdzCyTphnDpVYCbBl51yiTaX82jifms7f4KqZ0bsvQ3Jzs/FDVlW209AV4Pll+4UT2Wphd0xatMlCwssz7+QPxneJxJzozaYCHo6cR3TQEQyreAVHrLrrt3tEKQ1zsI2hksj56MEtH23n/BfWxhiGhrl5M1J3Pd3BaL8IoTqDLkUmVy/l15GbaTr2ecKY8GDHoujfwhdzHH8zbighuRqA/InjxfeJKbzJYSEhmys+ZYLjYxJNIqgjZK4l0VMdd29/vRc1pk3ul7KpLHkFgJKWr1lqvB2ALNPBs50VVaNpVz2nff1ndpctBaB9X5j6vZ2ce/sUMtI/ZnCqLiB0WtxcP+VG2tramNa8Casab1JZ2rgXVJU1novZH5pOVzSNygX/4MWN15Nm18Pno1iIagbcwSjBTqHp2dPyWB2YG3c9h9eKJfQ+WR4DNkM26z7bz4ptw0hUo0xumcIj0Rupk9PZ5LkMu8nAILmFwyUrgwMxDSOYxIee6ynLEPPSuGMUR+6/hNxNgiFG1SiDRutRlS5jNu7MCch9lIIoZnxKHzsdsNZ7CZ923kt9eDypxjpC54iy7alZOqMxKCFyTfOYe/lQGiebsTiFpj3RIfwcIWsqXa3xUYc/Nn5WDGNM+ihKu4SkZ4v0L8ngUTW6DUYSJRlZi1IRcuG3ZxEs1u3UtRE9aqMtYzwuVe/w5QsN5b2Ov3OaZRKjMoUddHE4lTflORw234LktWEyG7A7TERtWayZ/ScKb/0jd72j8vC8MG6Xn2is3tMi9w0M9wjiJycK6dvv10t4mBQfmPtoGM4Mapr0qqJXGr8iIdAnWK1P34UEe/9S6ov3zMSsHrz+fw+UmFMwq3QcZ/3pHTRzIiYtjF3xEDUnkTNFN0XUaZlEDHYKlPq4a6xWRtKuJWGMEebk7i4AoiYxvsrgLL7lU+6a9BIpxHqKGJqxmat7rxEwehjlEMUCKkrPYn/J6b37OsNFcfdLkzy8t0FPE1K7G/nWYacyUUiUu4tEbbHa8ERCmHo1jCZDHs+qp2E483mkq5Yw/3fHAyKXIBhRODf0EZ+bb0fyteEJRnh2qe5HygzX8IXlz+RpzUix3JQ1lfHl0wf14dnJEQ+gcdakAi6fWUzQ4MQaFcLBZMc8uvyCcFg906BrMxO2PNZb5iKjsC8BVjGnpFFo2UrY2kBEDqEYGzFG4xMY3WUeQqqYS8PduRS1i7pmtlAHwVgFgyHW+NIZPViws5m0iJ09wy4isyWWpDetmrNvnUxbvYfMUJh8e6xoZdV7fDLhMX6191xmW7+m0j+j3/XOTpsDSoie+GhVMbLgS8EoOvzxJtDbkn+D1lFJ1C3mhZSQQ3YoPgs9r0Pl9K51jEv7C5NG1DPn3KHMvXQsXQYIaw5SPGnIQaGNbbaeyEvREyjpU5LNkB5mldnCiQExb1uyhIk57BOa3ddblnFH63sYvcLaXm1eScLMQfSFopnxG3M4EK3RIRRb1nNU0lO9JWGqmj5l5koxB90ZfiJH3EL9pm6MteMIeYVzfYf/xN5rjFJ+3DL8B+JnxTA+3PchalBMsO60I/rtzza4yZdrMXq62GW5go6AWIyFI3TndqptTVzeRl84vIJAm4wGElLFuYdVncuw/dcRMiciRcwYzEYcDqGyB4w5bNojCEqaV0P2qGiy2Fdo2dJ73ZB5cL97yRYLOHMYF3yBj6fNg0iAXW3xEUwGYx+fhKTnh8wdHyDREW+mCKv9nbcAKQad2GqWBF4p+RujJ4rIk6jBQoHaQAHNqNYUxowaA0A3DkAiYsuMu9ZGdSgqEn6syDHTXr00JvaMeuRJuMbEmTtuxhMzFeZbdpCVphc7tEUT2OU7EwDF+M+dgOv2d5DmEMxOa9rObe2d3NIhnKmmiKAWFsnLKYa1lDZ/CZrGuOpXKDV3ISVkQWoJJUoVy/JfYKq2jT3b1jNF24FZUhgXWM9LK6r4y4K9TJLKmCnv5Hj3PAbJTTRrqQyR6jnWsInVfRiGLxAirBp6E9Qy1CCbLVdjlaLcdeooSMzFhciy3+4/iZHJdjLatpDuURld50LSVAIBoRmtydjMV4c/yzV/Gc6lGVdRMiaFBzpeJeiZgzHQRFGnA02LFxCyin1oSEiyh10ptRi7BcHTggZ2+IUtvsCyleymNRyI6g4fqjOVlsxJDMsWwpO1toCt39Sy5I297PKcj1sW22uLzuHm9VdwdPV5zPFbmJy/lsHRbXHXO6LqdIgGmWdxYkkVWn+pFO9U7oFXTUPqrkfyNhNWbQQN6RyV8ErcMZKmMiHSyHQaaVxjoWJTCya7jCqp7M5czQlL/tJ7bLdlIm8lXR13foK3nNnso9Ir5pfXEu+j8m+wcdyuq0kOCsHE2DWZ7W+VE5Jh+rq7ALghfBPdRz3NwVAdmspi93W9VYpn74a6otMByDN7qVxZxfr1e3qPH7/90d6wf4D6pJ+2r/fPimEMTRlKONZ2MWLo7+DNaw9SYqggEDRhkaIY3ILI5im6vnm0vKv3A2a2bmaK8xEs2c+ybNCbSJqCSfZxxu8mkl7gJG9ocu95mmRAlU0YbRYyCvXChzvXCaLxyWgTDQlNHJXaTm1oPPuVYgIcvFcyQCQkgyyRI3Vy5rpz8e78ijwpvsGS3Dc8sU/xti/WJmI3xpufVLsg2Lmm+E5iLqUASQuS2bqRolGJXHHpL3sjiTrRny9gTMIgS/xp8CccHhQRXkOOvDTuWsOkOmYbdhG05xGJaTzJ1q39nm1M5micsj72vYG51LfGx76nGau4JussRpi/xiq50Q6oDNwX7d4wF00rpFhqJsFfxwablV0WM2eH7kBOEFpVvkVENRkDbXz8wWsc1fgcJzn7ZCa/ewFF7Ut5y/wgkU1v4IgFEMyMrueDjYKpzjHs4AHjyxiCLloMOTSRjlFSec70NwI1mwlFBUNv7Q4QCNkwx0qKhxQnqZIXOTYnF6Rdxm+dfwOEVLzRchNtGRNQJQMVww9j+5hfk5AkmOlH+z6iJryX5Q++whttL+GzDWPc3GIAShu205WShD8jPtejpdqBARhmW0ynTfd7be66gKqQ8GEomhEkidLK+Mzi+k4fKViR1QgrY019upoM1OxuoniaYMq2DDE2TTbg0pIZ3jaGDveZrA1eTaUci4CzCAaaFUxg16pmur1HElRFeZ08y8EjzNZ7L0D1uzAH2viy6w98/Ew17cQLOpKmsM1vwCz5aW2wsO6zKqo2d5BoTmVk60yqinVpfUpSAl/cOCfu/K7gaDLDGbw18S4AHH0KXDbv20nH7iAleQacXqGBKMYkLK4IFhXKhvTUs5LIG5LMmqJP6U7q30tkn3KsXqVY06grEH5GpVLimOUPMmKynrvRkTIx7lyf+/iftPPez4phnDvsXPKtgrAoBqlfH21Dl4RZ9hIOQVQzkSjF8gHQQ/t2uvpKJCr7fOcRiTo5vOoSvAmFRFQHn/x1MyF/lFNuGocWFrbQfYPPRjGYMTmcnHx6fClzgHLnCFYE5zLK1sku/7FUes/ExqGlZ8loQop4WWARgWddVVt4zvw4ANFYApKhL8OQZIoQpT6UiIlmd7z0r2hGkjJspCR/yHHJj8TtsyobGb37VWafWRy3vfS8h/hH1nV4NBueFEEIhpQW4kIQ4dzhU/lMmUF9LNR4rSpMa+kOMyaLeLbJ9joK88vI8esZ2k+0PMQbox5mPQVUBGeww3ciFls7+bWfMnGzYEZpxho2+c6m0jeNoJaEoskcl/wwk4/QbcI9GClV84vq37PY8jvODt3Btw47XzgdbNSGEw0JIlcdFLkk26rbyN/5LJ3GLC688vf6RX7xZe+fWlcdjpiWmYCXRncQWRO9HgqkVgxhLxHJzGHDRJCCjMYf5Ne588HVvPvJXlp8CmpUxhYUDL6zOS32iQRTt5sNvaXKAYyJwsSjykZsw/7B16NfQDEL5nLvrHu5ofRMJo+oY3ThfmxDpjBrsjC5WIMdJLv2kFO5kNG7n+33XsoCRzCn+ux+23NNO5HQaM6eHkdgAT7b3IgxEsSgRnB06wlz9ua1uGoEE0jOE/cv2f8pXrOXaDQBydhGycwRveXYE0LimQNqCttXtDNJ7cAYFO/0a62/4x3giMRn0AJdbPeX0BAei6vJT7v3hLhjJE2lNBrGadDDqY2J0BUVPoiaXF2T7Wzw4rD0Fxy9SibPVQpzmIYuiCya9zHRMCTNfxGjEotmy41iQMKhSQRsGYzc/Qq7zQoms8xxGyMkurPirm0whoiG1d7eO4meWqatE+U/DEqIhmkXsvVtXfCrKxDhuiP2vsnYbX9lA8mEv0+F6P8SflYMo2lNEE/TORiDbci+Fhq74k1LCcF6kiw1jDu6AJ+9iBHmLgDSCnS7+HGp93JskiBadn8bXVohavslpHS+RVKXiJFv3NeFLEus/qgCySxCStsyxhMxmTHYbCI5KQZjfj3eQZnM2qOgBvNomP0AbVoyCcY6wpruZxlijS/IJhuMSH0kjfztevTEwtAJ7PEfiWToUxLaaKUGvcSDLSFe1VYVFXdbgF1td7GwS5TDnpMgko8CxtnsGnEZ7z+4I066GZaXymnXPMCOS3dy1OmXA/Bk5QXYi0Tdn0SbkRsjN/CZIkxYx/RknlucmBISaP7teMypEq0l9XT69UVyhPEkztjxW1zRHBZ23UJrdAivZ5diyU5m9zBRjK08OJf13gsIm0TEVkhJoC40jvyxBSyMToqNO5G3okdxpfFLUhqXI6NRLLfwx/ZOLm9X+J1xHoXFYuH3ONaPtu5hqlxG6jG/JytF1wRJ1ju+WQOtvS1Ok/AyPGzgd24bc9RqDJLGcLmWqGQmY84VcMLDBGffylRpLwUNETq+rqG7uZKkrtcpqHkJW6CNaI92FNO6JgTX8TfvHb33m3TK4eTXLyViSiRQfT2/e1+iq1VoNasbV7O8uxLnZc9z+O1XYrDbWfaucFindJUzxZqAYjySyuIzORAGawvdFvHeTcb23jnWGBmNwdhBVAoTlOMj1KIRlagsI6tRRs25CC3WcjWkOXA3i/eVM3Qog8yVdKcMIscgfDGeYS04sg9enruzJULEoKCaY82hQtkHPc6rphHxdlLnmwLA2CPzKTLGF7d0pzSQlxSizZDZ21vcYNdQY023MsJB5FjL2fY6bz9p3RIVwuFK93W0cg+F9Xo9sgRtCrJRIX9CLs1ZYl2nx7Lh7z51FEekraYpdRjFEZnNX1TjTe1fg1WJioi3SScU47i6nqDDTE3xsRgJkpLYzMa0ePNz13EbAagoOY3loxTqHS6CkQGG8aNgz+5aSiOpRK0ZODH1mhKyjCJpyDPSR7K1mtlnD8GSP4JEs1jAzrxcAoqIzd6vDOVr9+8AeqNPjMb9TNi+Bodft70azDIm8wHSi9GKySxjsvZJhqvPZ4+xjbxIGSdm38/gDDvtWgpWwsgGXcrMNsUXbrMnmGko6+ZL1x/QNIk1yadwZ/hyqkMTafUey+LuG/D2jdSQ4k02Z/7fJCafWIwrr4aN+QuwOgUDSTHoTuoVnqt6/7YF2sjMt8QV++vBzNJ0zEbxTOcOPZeoX9jELUYDY6QmUupk/K163orZ6sAbdBN+cysruq2M/8vHTCyrILt7E6nGGkYljiHLW8RsSScGJ1WHqTTPJejQk8uuyTqr9++Q6mB34Dg+/ft2vgoLB/XewVdyZ/Ry5spbYbSQpB81Pc9am5V2a5AbjJ8ihYTZT0FGkwxMUraBIwMmXtLvOfntXqrtY8jQ2liljkZBJknycZYqpNdUVbyDFMlLVDZB0UyYdjXWI29ltyTqDw1xzMdQv572kaN5/Mzh7D9iEztzIdAnr8dsNDDEuANTgRjbF8+0UDd4KKp1Gza3m86UYaRIwmn91p632Na2jT0de/qOFEnSkNUozfs2YQ12ErDHS7q57auZWP0R+9IFE6+0prMvFu8PUB8twqiZ0QxCE201uWka4+SVq6aRGLUiK2Hmeefx/IzfIcueuFDepJwcav1W2lPGsda+kqzEj5l01HlxJesL6nRCPOMqcBugzeDisgdncknajcxKu6/f61/ruYiQp5PxYbDlmpl68qBe530Piqt8LA046bIVccTFw0hMtzJ4SB7XHybWuKOtAzVW8v3sP/SvjWZNFcKcIilY1EICVp3J1TVYKJ2Qw6BH78Hp2wpAVp5gSiPsNj6Vh+DKnkVhVGb0YfmMKHsLm7+/SQpg66Z9TPTORT18Js1ZM+jO+pS7prrJiNjjjpsec91FzImYLedzandyr2nzp8DPimGkOpMwxvwPfnsWb62rJRhRaIkKIlRLMa5oIS/etIwm+XA2K26k0CY0XzcZsTyBvV2X914vsVtkPee5hc21R+KXZQmDQWbSifkU1SzsPb7Ufzvjjiokd1hy3Lim7NMoboVzQ1WUlL1IiuRFklR8Zt32vMLzq7hzhk/LpqHMR0N4NA9GzuePypXU+k7iC9ef8UeFNLxvcbwGNYo7sASFFGcwykw5eRAtmRUEstoxmgwkZ9m5MOMGLki/obdBFIDERjLciznyglJkw6GnzD7XPuYWHE7ErS/E410ldNouY9+aNJRYYcapJw5igrKawjaY2h7BYXSwZ3gOzYmT6IwW8eG21wFQMTDYugIAW9SIpMa3vP3Io1cptRj9jMl6ivHHFHL9MUIj9CYN5QLDYlIlL4w4BS1dRLQtctj53CkITVWV+N+n2ZF6amJOvzauAF4vEnPoTJtIGt38InILuwsuIFNyU0g1AElGITC0asm8mdonAU428FTqwwB0BCejdLeQ7hrLZfLZjPVfwHCs2PrkJ2jWRDxKBtFGwUTCfoW0ms2sHf4pxYGnKK36nKhN7PvVGDEv2gPttAfa+c3i3+Bq8aFpEu6kElrznaybWMYQd7wTNqltH6ZqN5MajosNUSEgqciJX3FB+g2kxRzyjlBMS5WDZDRHyMJA2DCcoC2dUVs8TK8+DVVNoAOdcBuMBhSjsMNndFbxWskq5tXdjdWhC1A9phaAjupU0vy5pMk2Wqs93KHeyLfum/q9/lYthSWBo3GoJsYkraRmZwe1YWHjN4UE0zZGA6xqPoa9w68jd0gKl9w3E4/k5m8x06M5rPvuWmu6cTX5sTt0ib0mWcwBo6aQKF1IS2asyZMWBQ0GTUgHs5PmbDEXOxQhdC58cScW7wiymhYwLWSicnMrXlNzL6M2Tqxje4megLrl/RY++WQpn/hFcyd7y/nc9EUCxs6uuGfer+nRVomhMEMjYULhf96l8b+FnxXDsFmtyARI6K4BW5hOX5hPtzTQ8xqSo60sS5jL8Bk5OGecxciO3Ryx5hWIRvHa9PqKNlMbo8IPYIqIyVfjEKpnXuNykpKl3kJq1Tvbac6agkXpQFbCmKpGEPJHaNrf1Xut8dseByBkTuQ9Ryb3qo2k4UVCJTVJ2PnlSDuHJ8aXd967uonMwSk0SjZej57C/jYfWdF4LSKhMN4H0qaei0EVZi7ZIPH2HWsYvuUo5my6GEeKBSWi8nTzJ7zb/mRvgygAjcl0Oufw3t/K4tqpHohHNz7KL7/+JVMnL+KNK6bG7dsx9kqea/kQzngezZpIYoawc8un38qOp6+ipcSPShfTx6zn/DcEI45oNprDehhzandl3DVb/UeS5xILzhNJp8U3iyGTMylpErWRkvy13GcSfhsGH410wbsw4RLS/edwVtV0nm7+hEiCkCCfVU6Gq1fA5V/ClP7tSnsQzZnIQnUKSfgwjjkDY+lcEg2tyERINjSwYOjduDUHQTV+aaXG5liOaS+yr4WpDXdS8tafCa3ciLclgbfQM4WxJNERLUJT9GtkdHl4YNsISBAErVOLzb2Y0DIqfRQrG1ayrH4ZjlhL0sTuatK6NfYlT2NrxoVx49kz4jI6j9W/0QmRr7BpMmr3CbzV/gQBVZj6bLFeHJmhLIxtIRp2CYFDMViYnDqZyc3C3Kia48u2JBhEFFe0+QTaIycyNXdinIYB4Oj4kPdHPEn51+KaRllmx7J6RrXMxhY9IMRbi+DSEmkhmQLzFkpKNXKHJKPF7oPqorD2WxK7qwkoSTgH69WkA9EAhu2CgZkiuiD09Uu7mP/tUk64Mo3iqg8Zv+1JBsci88KGKB+MfYhXZ33K4JqXSevYA2gMGp0BsgGzLN5dfqx8Rw9acoR2u+WbWvzJun9lkX8FU4/XmWRt0h52Tfuci5fo6ykhFCZijn9uu0Nf00ldAXzdVsLBf14S/7+FnxXDcKtdqNhw+uoZVD+PkdkJvLyyijSTUOcrfCVsSZnNnPOGkl6Ugl86lg0Tb0EymXht8u34TGJyGnKy8Nmc+Gzx5hlj1E/E1YLRLKQyi9FEyJpKyJBGqmsve0ZcRt0eF61dug+jsuQEdhRZWDXjfkbvv5LslCG0y0YUSaHRG2sM3/g+WQeYpCRJomFHJ+mqjC1mA88/oLtasCk+OqZVHo0/JvGEd+0gGggRNYfYkP8lU04sZtRh/ftd9EAxmAi6NSKhQ6vDt029jevHX8+t027msKEZRFVdEspsqCS91IY29jw2zK9iWXcxD54j81Wekaf3vMyQmhZG7/4Ej3MSckzS/9x1B15VNwl0JI/sd89Whyi94Imk0eqdwAcPbmQTv4YTHwWzkHqb5WywOCGtFE57CrNxHViF6c1TJd5RWmYu5IyF4llg7V9KoweGUafxbPRUtlmvwhnpBJONfYHZqJjojBaijDqXE8MPsrkr3lQytkuESc9KeI1ETwXrki+hKWkYkzf/jWz/1yT2yaiXbMkUWTYx1jG/d5s50k3Tjg0EG4SZMSMgvvXXNV8DML9yPnnOPOwmO0gxTVeNMmJXN2ess+EIxwcDyKF61LABFZWOtNUY0L+VAYkiy2bqEjYwYu+bpHTuociylpOS7yczVzxXi30bzwzZxqtjb0dDw2cXpqsRsTE3WIQE/tsjS1l57b1cOeZKzLb4+VnS2M7CriWYzML0tosGjrtyNONPFvNwurNPVzzJRAEuhqS9zcisB0nKzsPqMCHFkk0j1iEELckY1AgnOj5hcJ8k14KEAi445/jYe/TSZd9Faq6Dfccu4NnggyyaF2JP/lQiRjtNzcL/Yw9EuXHhbE6quI+lo0fTkT6GseM69bXdJd6XyeIkIe3gwSmaqpcfSk1O4vEtup+x0D2Ch1JvES51NYpRWYA90IbaJ/wdICs/hcLab5CVsPC9qCYGJfCT4WfFMNISxKJpyplFxJ/KnSVl7Gv1ElXEFzCmRRkR2cubf17Divf3sd/UhdNXj2Q2c23Zb3FEhNS1w7ONrYFynAE4xvkI09J+x0vHytQWHIVfyuzVMBKydKmrPX0sedPWMHRqFskWnZh4EoZx9NvLMTtMDBs7l8nZk1mUVYHVsQWXURC1prxLmNfxt7hnKZ2QQeXmmBoe2yZF4xmYv/Pg4XeJ6UEarryCqMuNHDESyu1kxfvlrP10/0GPBzDFykso0YM73La1baPB28Dxg47HoSTS2ewlokZwWVvIbN2ILdDO9BOHIkkSU04ZxNijzVy4N40TwsN47qkohbtS2D3yF+xaY2DvSCFlBQ1d5Ju3kmjoH5ffSyjM4tv1jVX3Gwth6q+QYlFiK+1Hxp3baK7lo5x6okaFUKwvysRA/5yDg6EgxUKpJMqGOIJNov1srC+4JEUZmp1ABKPouNYXUUFUNvnOojC8H59tLqFf3khV0fF0WE/kVG2Jfqwzk72RsTjldsY5RaOuzyc2s3yihZYSYT4NhcX1Lx0pQpfHZYyj3FWOJ+yhu0FIrR6nqCIrHSQMc3DtanK++gYZmWTXFGQpikyUcIxeGQgjOd/A6WtiwvaneHLIUv4ROZW2GkEEs/zjGLY7zO2fn0jY+hYJJbHOfrGyMYl+wUAsZiMf7pvHrHdnEe0TxAGwvVhhanEBdqcYb5etGU9nkLULhO+qPixydBK920n2bKNbyWNE/WV8bs3CmJSLq9kPEaE5zF59G8PLRaRdIWFy7PozN3mbeLPyNQC0CUUk+0fR2egjMZxOqXs8ZrOMzVTIrlG/xGmuQJOiyKpCc66YN/meaaR17CRk0QMAEv1bAWhObOfie2dwYp8OkT1I8OtMqzpSweDkeIf2E4tep2KQDWQjUcPxRIw2rCEXOYN0f5bHrlJbeAyqwYysRsFiQD7ANPtj4mfFMGxWnYDXF5zIJGc7mQkW3LH2isWKixM8H2AwSPjdISYMTWFo+xdIRiPhLp0glWYWkzVKRGokSBvJ9jZy5dcquY2rSTe7yRmcDIA5OV6i2r8pnUhIIbcwXu3cfeElhP0K5WvbsVZlcbsyj2OsHzEu4woAwsb+Eu+i13Unpym2NlLy4qXa/AP6VGuoFNV8xUkzFAxqhIjJgawZmL3+YmSjzNgj8glKB7ePmiJi8kdjcemqovb+A3hr91vcseoO7l17LwseqODdu9bzyIZHSAlm0Zo5me1jruHzJ7eJzmwapK7YTtGONpSGRqJqlK2jBUGddc5gkjMEEdhsdNAsG/Ep4jnGb32CsTtEeGg4pqnn1QtCG1J1Z6HPHVtQBrHwNibEM4wTM6+mYP8lGKO6NOdrO3ifhgOREWnmKfOTAJhN4vqT51RzScZV1ORMoSjNcdDzzA6x1HxKKhWx+RYKe3AnllBtiSc2VrOZvwZuYLXnF2zzno0zUePS7lyu++OHFEwXxefa/UJLbQu0MT1nOp9WfMpD6x/i8lGX9/ZTkHv7lMUzeYuxjPIh5+JOEL4eg2qixlKKihGzInpT/DlyOZe+q6JKMqun/o5Td/4Bo28MnX49xPykhV7qCo4mOXAyBSGhqVX7D4u7V/qvfkVxUjEnlZxERI1gztO13tTuCGODITRbmIDRw77CLTTvd2ONindYHx4vxhc2YQxqyETYmP8VebggIQuTRXy/TOe3mCNejEoIxaCRmxnAmKpHNvoiPjbKyxl0ronx5+gFtPOrxzCx80jOuDKDfPc8xm1/mmEpWaQZalFlXZM2h7sZXvY2Uwr1BN6oLOZofjSb+U9s5ctntjND1SvnApgiXgZVzacyczPtUjMnl5wct7873YLp+ON7f8uqgis5m6Yq3UyVWqz3n5HUKCFHUlzE3o+NnxXDCJl1jj9k3wcYj7yNS2foE8scsqMazNgTzfg9YcIFv2LfOU8jmUykt+oZlju6tmFZK35HDRo7YuYHoxIgRVrB9NIOPIsWYZfj7bqW6BDaaj00Ke2syL6BVQXPA6D5dIlCkaIs6riDj11/pCRm87UaheP3zOuKe4+r2alnDhs1iVyzCVdDvG2zJ9YbRLVWCZmaohN4/wsTGiKZsAcl4zOYc95QnkyKgNRfgjHFSlX0aBirP67k2euWsmOpyG6/b/Z9PHfMc1w//nqMUfE8hXu6GFT1OSmuvb3X8XYGWfNpJWtbxYLb0rKFsBImIzb0VR9UUNLRRaJ7P3M0C9HgaBSsSBKkdpWR1iHqUpkUwXQDSSaG7ptHsiTGYTTL+LrE+CMx3Stf1ZPTADzGMoyG+Ez3qGpH+R7x7VKCCPnc7T+K+sg0uMNFS9cM3mx7gayxF2E2ykwKGjgrLy3uvMIxERINzWhIvKQIwmH+8Et8mUYCljRecF7Te6zNbMDXx4eUleTBsHYr8/90KSwScyHXLPIEvqr6irVNa/lo30eUJpVS3V1N/lTxbnqc+AdqGJFYUIRk0ojIYbyDatmTqJftiIZVvnWcEjtXxZepz4fd4SW4wr/hiKXXU5cXq1ggpWB05nP81aM5709T4t9rm2Bot0+7HYfJQbhBf66SligvNbdiiO7GFk1gSO0kHMn9S9gX1C8hbEkiwdDCCOd8EtUUSMjpNXGForrZ0qBILMoZH5eoOjhlMF+c/TmHOyzsf/R+Ujt2kZSu0RXqwupK5uPnm4kG81AMFtZ2mumMlpBT/Xjv+dPX3cXeIVHaByX3bguahGkw0uTqNdMGtsfX3zIoIQbVLGDwmXZGZJbw+rLH0AxijhVMTuQeSykFa/RzLruymMJjYpqpQ5gw051m8r2LsflbkTUFLRCvpf3Y+FkxjNG5EhO2PAZAxOQAVeEXtuW9+9uMoMoWwTDcYdZsW0lddTUAzTn6gorIIcyeEJ5heRRc+wWFY0UIZn3e4ewLncyiv3xN/XXX95oN+iIaUchMzGGI72Zm1YkkwJ7QvblzrYQK2tmctp+ItZbQp6JAWTA6B5kIO1a297seQGLBa2Qkv9lvuz2xTwn2PjTDbgkhHXDsV8/t4ONHRIhlasKXHAg5Vqm2J6Esb5gw73V3BNjRtoP39r5HnjOPNGsaQ08Q+xpXLCZkSe4l8gAeVxBNBVNsQU/OmoTdZCevSs9qX+WoZPKWv5I7OKl329Cp2dSmw7ph8OmoxxlyttD4OhNmUz7kXMpiGcSJ6TZ87jDN+920tonz53j1SDWAFY1LMdr7N9CKhg/NMDRVE8wyVr9rSff1LPrADbLM7i1CK5PNyXQ2+jgyaOaiofG1hHavKaRbyaZcy6deFUzHKhsZPOtIrLY0Lv3N/b3H2kyGXq3xhOSHUO0iCm/EumassUKZQaMY680jruGazxVemfkkDx32EKsaVqFkCnOdFIt0asuOt7Grsexoa0oiJtVMYmMhSbZ4f9ea24RWJgGTVj3Vu91XaSHF/HdWzXwAS4xQlppepXRSNvu3ttHdLr6jKU0lo2MrHa+9xj7XPg577zCW1cXnEnmsUaYWFzAhLIoVJgcycabEM4xLM64ExzbCkXWkD+nkA6eTp3OPA0c6JquYQ+7geMr05GiGp8RXBah2V/OHFX+gbuVCzBX1dGQNwd0uIcVCzdvqAzRnzWLnqCupnxOh0tmMz1Hce76sRlhdFKSyTzJgkl8Q9Ha5kamniDDynoCSHnwzycJrNwzlk4pPyFm1j+efUhhjXUz60QoPRC7H8/QTKLv2ihBjKci4shQC7wjhJr0m9mzd1XQrxZRWfUZ+/VJmOOMLef7Y+FkxDI/Xwq6RwsxTXXwieJpwLLq9d/+wvYGYhmHB3x2myGMnqUOIvlIs2afodBOTjh1EqcdGQlkDLfYs7GedFztGrPLuVBPtGRaiWpTkDr0qbkJ3DQXDU5HbXWR7dFUzYItlleYUsv3RANlVycyjhP0leuKPRfaxb1t8OY+eBWNUzaT5dIe1YhIT98hLdDOL2kfKPO7C+LbpoQKhrTRVukl1mNGUA7xqmtq7GKKxpKH8GMMoW9vMfvd+Ht34KJ3BTp6Y/zLlXwmzxQmb7TTmzqZisJ4v4e0MgaZhjJXBUJw26i44jLbBes7I1J1Cou0J4U0vcHL0L0ZS0CExthpO33UTWxbEFzX0qoJAJ6ZZ8XeH+ejhTVSuFJJ2rXNM3LFvvpXCr9b2L7TYN7v6QKyYt48PHtp40H1HXRZ7zxnDSc11cNatkxh1WB6aqqGqGoqi9kYIlUpNvG4SIbaSGmHP4rcJ+kJYjPpStJkNmDSJECpvDLueMdlCI7DIZqKXnMZHMyWaHWI+ah9/xRE7NAo/Xs/w1OFsvmQzjTFfuaQpNGQa6JLitSlFEnP66/PFddUQZFsC/cqg96C2QA9fjqqCoKuykcw0QSjrImcTCSRQvq6Fb18T/c8iHTJtaeMhqpBqTeWYomNIt6dzxNLrsQaE4HP/eRrDAhpGUzMaKl3Zdf00jMrgLFbkm/Bb1pCaWct7f1E4ObYOjKbY/LBsJatE7xPx7O74/im+iI+ObRsIpThwzJ7NlQ8dxS8enk2yNbnfs56YPIaMkJNQot4KVdZUrvlSZWarfnzXZCFA5hZNZOs3wrchqVFMYcF4R8zKYciF0zjmhOvwhr29wmMwkodUncDgRrEe1RGlIsRYs/J/y9bhShVzyRBrbZxdkEF3UgkVJadhVIK0HSKv48fCD8IwJEk6XpKkMkmSKiRJ+sNB9l8uSVKbJElbY/+u7LPvMkmS9sX+XfZDjOdQ6GhtI2zRpVYtIRdm3tj7O2xKBIMZW6KJSEhBlpwYYvbfTrOQ8pYvWc9b297F0RGrY9/SwjfNiwgbeyQ6lezKd7GbHTgdKeS1iNpMGW1bmLz9r9gSzNR2xDuX21KEhpFq8aJFIhSYZjLOFR+xZJKCNCXGh5VmFSciGyQmhK7hSNs5pGTbeXf8fSwa9CYpowws+WAX/oiflupuVr6vJ8F9+raIHU9vF2a1RbHyyWargfk3zMZoincyW0JuTGEPBSPMOJLEgl4/X3+GU0tPZf1F68l15nJin1ISAVs6hbVfx13L6wqiqhrdFoU1wyUWZXfwp5zVdA/XJXJHYxegWxXa67x88OAGto920BlzEUgyPD/9ZpJdu3B66xmjrMKWYCIxw9YvubAk74DM4ZYQpo4gB2Lp22U0V7n7bXe3Bdi5vAGfSzCycJGw01sdJhRFpWq7IIDN+9384/EtLHhuBx88uIH37lvPt6/uxmCQmXP1BBINzRhQSYjlXESifgobukGTUfpk79pMBkxARJIYNWYCWqJ46BARdhlb6HJKlBhEtFtlt/gOLmOI9kA7j296nJzxQguSNJW8VoWJ+xrjnsegiesNTSqkzVFHOMlDiZZAtG9/FUmiOVn86XXqLVitBYKp5jauYrtRzMcwCZgt4twhk+MTBDN+cyNptjT+POPPjEobhYTGtA33Mm3t7Ry3uZXNNXfjNbfy0rT/Y6tzBbYEs54Pg2iXevxmlem7ouQ7hBY5ZfPa2BCFhlAbGUzyCr0G2sr8eNPsMEMuv32qkaKkIlpOn07ZjLFUbfkCd+gg3/qrJhIjThLa3kBWwqT493PPBYJMNndU9x6XvucDSis/xYGHYKwuVNOgJFK6ysguSeTIS0Yw4+JHyDvxN1w88mISC4WQVhEZQluFn7uTLwJJwnK4XssqIkPWZCG8FdV9TUnWVyRlCzoQtGXQkDuHMq1P+PVPgP+YYUiSZACeBk4ARgIXSJLUP/4R3tc0bXzs30uxc1OBO4FpwFTgTkmS+hcD+oFQQAfjtj3Z+1v1B2D2Tb2/O9Ib6XQOwZ4oiGKTbKApVtr8pL1f4PA1UeSeQKFLj3bIsmdy1D4rog+9BshEHcdhd4cIhnw4fEIi8Ca5aLtUSC3ZuXq2cndyC8NOP46clrVEv/0HSXmCkFnkeKJnIMKYxHhJuWh0GpkjbGTUBGmvb2EP2zit8jqOLb+CdS3rWOxayA2Lb2DD51XsXN5AWYrIT1CC4vkK674F4PLlGr98dA4X3DmdvGQbWkq8BmLKD2ALdXLEkQm9hRPDQbGoVUVjS+sW3t37LqqmMmRsLtN+LQj0lvE3UVsY37Te6wqhaWBPTcczZywnJc7g/c0zKV5b3XvMmsOExiXLuuEsoygRW4eXmAmY0uG53GL4C11JQ/A683nFnMvFD01j+Iwcpp06iKxBiWRmCK1oFPGMdtXMBykbdgEAWqJ4Dq9Tpnp7O7uWN3AgNn5VjaZqvWUkzJnDkCWFzOIEgp4I+7cIB3RLVTf1e13Ykyy4WwN0NvrwdARo3u9m+XPldCsxxqVJGOUAtuPmkDRC1BULBfRgA6FhQFjSOHxYBmsHqywaJ9GeJDNy/m5++bWKt0GY1E5pE8Q8PHUU7pCbN3a/QTRWbFCKNWnKaN/W22K4L8YvqCDDV4DZnUBuss5AM1tFX5WPHziac28z4k3QCXhuUyzJtfAYdgzTgzoMsTI0Pcw6KVRFQqQZYttP/fRUHlwnOkbuGH0166Y/wMlrJRzD72KYEkSRY2Y9WYrzrYVUO7aQhDMAlimiwvSuUfFaiL1PWf5PZkjk2uPNgfuD4pu2fPwBCSt2YI6Aw2BDOyAYwBpow2kV14pYi1ENZrotORwz/hzeOFKmIV2fj2m1DRTVfUO50kBuLMhlQWkn1ekeOhrjGdbH+z6mFmHOGjqxhtSjwnyz5i2qMzS+Gq9QnbID2VTLjaeegL9WMAhLqIspuUPojgUZDKn4kJzmNRw+5H9fw5gKVGiatl/TtDDwHtC/iMrBcRzwjaZpnZqmuYBvgOP/yTn/NkJyEk05M7D5WzCFPWiRMKpqIMEZJaN1M8tSB7E353QyixKYfGIxTpONTKvgX9a6JkbvepFhU1zc5nLSfISQdjoCHRhikk6PzThgS+e5i1MJBXy90lKtvZOXzaIQoS0plSlXZFE4rJ0Z6ZtwNTzLiD1v4nvrNYYPFvezSPF1d6YmvEd7vdBqGhMqsCTLlIzPoHmn2GYK2rBny9g9KbRmVDLizCTyjjQzJn0MJ18/jqv+fjjDXHoHMNJT2TzhtwCk+RSsTlOv/bhVEUShp5ewtz2XxtRE5r3RRvkGoX2Eg2KBK4rK6sbVPL7pcQySgfceWsuHCxZSXN3fDxIy+PF0BtFUDYsnxLEvbiOwZQvexYtpzdH9LaFrL+CSPzkwmHTCcdh5QyjR0qkviuVWrA/hXmUGWZzntRXwwUsrScqwMeG4IlqqumltiyWKlcZHSQEYYj0iIlnif6dXfLvZ58QXhoyGFRr2upBkCVXRqNjUSufEu1E1A7W7OnG36Wac9novVqeJwZMyyRuaTEZhAqqi4W4L0F7rId+8lUzTPvyanSMvqcd54SheGrIHOS1CxcZWti2uQ9O0mA9Dwmg2kJlg5XBpGLPPuIHZX63GGWv32hwUTMq8X2gPI4bNpsRRyJLEOzFUxuZQWEjQjTkzqSg9g7H2+X0fjTKPyO1R5CjOVD0KsDVzIn/f+BjXXvst8x6MYvHpTm+3R3/eXzTr7yrkF/OhsaILgJH+tYzY+jIt94kSH8cWHcv4zPEA+ByCoIeNFsYHQ7gMMgYM5Dr65wGFNTvNybB9fCItXdUAFPepUNshi+8WijUiOmONRu7OeKLqcYk5q27ahvYP4c/KtGWQYtXNoLO23c30/C0Un3A6AF1pR5PsKkOVTMy49X2um3MLcybrptXoKCE0jiiYyIyzSjnj9xO5NTKGMWoyzhTdZ6QkOQlEAriDXbEBpyBVJfH0KQZu+aWRk7SxDGm341FS8fkn4mkV7/rVP41jyVQrdoO4VkPOLMonpbJzUiLqQcrz/Fj47ibO3w95QF2f3/UIjeFAnCVJ0mFAOXCzpml1hzg37yDnIknSVcBVAIWF/15YWWBoCa2ZuiTX9Ifb8K1bx3BjBrIaprXAgkkKkZbnJDXXQflXWzG36tFIisHC6m37OWz9KmxRIcVF1ShbWjYzHPBbxIfsGJbG+eZZJJgcdCcUAzCmvoCTW6rhJijfs4rqP9/A8E4ru4suozN1OF0TxzFl88MYMx1AiAybkbBPl4DeUafRE3cjIUNY7k0i6sGpU47lfvM9eLqCHL/pNIq6J3DaDZN45ZaVBLr7ZGhLKrR3UlSzgIDFTEZ9Rdx1rAY/YdJIM1VDrL5QpjtMk9PK3tVNFIxIJRyTiNWoxjXjruGK0VcQCSnYOlKZPjab4tdfEn6iGBJanqJ81gSunvFL9qxqxOcSi3pn114qxkPGlCEQC0Q7/KMK5n7go/4WfWF8/vR2hjS1U+KBbbHKI89Pv5lfrX8AWbWRFsrCWw6ejiDv3bdef5hba8CW3G8uKEYbrYXl5LQPR+kjaTbv76ZotB7hZDDKXHj3NGp3dfLVcztY+KIwfZzw6zF0tfqJ9HGUezuDkBpi6BFpTDyuiLJ1zURCSm+Y7wnJf2GfcSgfNT4Gr4O98w6OGJHAoPHlrPxAMLfMokQScmz8wxHm+sOE9hBcsw7Lg0/wYMdiJgxJYOg2GDpuLgCmGOOuXPAhtppW/G+/T+CMvwEWJE1lT7EB15WHE/k2ge3+U+LeQeCWy/E934WWEqLONg1iJU4APl/5CsfF/nYEo3id0J77GaWlh+NeAVktG2jq2sRwTWPv8EuQjUJossQil1pa11LsixJtbSNYVs71E65H0zT28lumr7ubqNHOriI/zze3Um42oaDQ6BPM77RTfHQ3u1iyIZ8kQzP2Lsje2k1+Rxf1gMWg+/LcskaaCpYWPdzXEIn3RY02FXFghlGlq5KGSeW43GZGeqZhjvjYtfEz3ENGAAUYVY3s1o3kFgmBwnP3Q9QMzmfQFFGKfPvEZGatBM0fwGCQyR2czJ4vFlIgGTls4/UAVGVBME3iopEXURlaBuygvDoVCDD/mKfJyi6h/sN5TFn/IWsHO3i+vJE1s4QFJJRkQrOYsViFRu935JBbkUfF+06i05V+SZA/Fn4sp/d8oFjTtLEILeL1f/UCmqa9oGnaZE3TJmdkZPzzEw4Cm6s77ne4uprks8/GOGo0mmQg3VbFzNrn8HeHee66pXgUEyafCHtTC7KpKjqRtPAkZEMhSV6VyLhh5A+ZwLg0YSrqdAoCl+mF1A+XElRCvSWsE7urcOyoAiBbSmJMjYbJEwBJwhHppHB8NkNWLKetTtxPU8KYQ129Yw349b7F6flOFFXFlmBi2CW6tPV26yvMWn8Rx5f/kp31e2ja38Zdf7myl1m0m5cCYLKKceY1rsAYrsKd1CeaCrAbxXv6UBqGNdBOdvM6jEoQs0Gmbo8LV7OfcEAhozCBSx+YyfL65cyvnI+7VSyu9OwElh7+ZNw1VcskuopqGDkrF6PZgDUlgdaiRGZe+FuufH4FBeE+jvYPhXYyco5ecdTvDrFipES4zzr5vfwgcqzxU4t5A4NuiJKYYWPqyXoHNF/YxrrP9rNtUR2qqsX5N9KOD7OoJH4qLn+vjKBXmLLcbX7eunMtbbXeOCYCEAlGSc9zEoyVSknLd2K0ybSGW9jXtQ9P2MOwadmMmpOLryuEyWLgy5TPaS3VS7wM6Uhh3NIAuxcPB2D0YXnklCZhCmv8depgjs8UUvMerzCpnfXMTlIDQkjwdgqGa4gtYWXjVvxvvy/G7RKaYtRoo7BFw/zVi4w50Ulxuk5ok+ydnFp8Mo5IMs7WLO6ONf8ZXvY2UzY+yJPP60RXViN02CqRI4NQ9wipvKTqU7odEo25wgafWZTI5BOLOf5qsRbMV4nIQe+yZVSddhr3rb2P0/4hDA+7Rl7BqpkPML5CZVpxATu80/jjuwrD6sW3eWverWz9WISc+1V9XgRjZTPKFd0EVRKNF5oAUqzxVu2Kjj5VEnKzKDthBIl5xSjtJhzRJIrHpeNT/Iyu0SjY2x57Ztg77CJ2h8aw6xfiGZubdMEqY2stRhXK6vS2yBU5IGvRXqY5qAUcfoUPyz+E+vjQ7tqrr+b1G45lX7QBt83FqEA1JouFpK4K0u0ebrh5BUet8dO3wkxPXs2hkmd/DPwQDKMBKOjzOz+2rReapnVomtaj174ETPq+5/6QiK7VI5YMRihduIDsP/2RXYVnUl10PHkBBVk2YHUYGX9MISOCXzA4IiTKklffwDxSRDBIsRjVDVle2qJdmCaOI/L7K5lcLfINjPsr2W3rIhQNkuyuZO6KG2i3rOTrWYL4WSQhTWqyzHDXh0R+62P0DVMwZmSQ7RB2bpNsxJGiazd9Gw29mvgQU65LIxpWKXtTEOmpl+WSkZGsP59ZwqCYmL5Bd/Knh+cC4DCK8a+ecT+Nhb/EEoyPGApFxYLLSRpD0JZOc/Y0NCTa6oWdOxyIEg5GiYQU6vZ0sqByIW/sfgNXszCXPF37GGkd8Y2YfMkzaGwWmek2p4n8icPg/67G39HC5rt/i+EbvSWoP1fc3+G09uaSyAaZaZF80r26Hdmz2kpm4xcAFHbPpGu5CZPZwKTj9dya125dxcYvq6nZ2U719nbevrNnDoQIvJbPoNJ4J62vK8yCF3egKCqRkEJCqoXEdCurP9aJxdBpWXz72h7mP7mNfbFezyf+egz2VBMOi50Pyj7gwXUP8vXLu3j7zrX4ukI4ki2k5iRhiPWDyMv34zxmEN1RX29RxplnDWbXigbeunMtTd82UBMrgz/pF78nevIRWFIzSG4R77h+zwbxXmK5I4Nvuo20X12JY/ZssgrFPDNGAzgCKnkVJez9RzPJXfozuP2pfHvNGexO+4hV+c9S2C6YTHdCEQmx5kA3Xi3GJasR0gKlpLaNobMrlo/z+2GMSB9Fd2KxuJdZZtqpJb2dJsecdjnGYv07TMqaxImDhMbZni4SFRtTJcYGQ6REWxhXrXHZSrEuTlunUdImklUbIyOJGCBkNdCQJ+bF4Ay9uGWzoT/xdAVdRPqEuHoDuqCYMGospz/2MUUjplJcN55UNZO5lw1B+/I1MBjIsIl7SIDd14RVVRg1WfjhRmfoPsQhWwVjGZapR2dNvP4OLKccjyEWrRFJtJE6ZhIhJUSgWw/JBbCHwGeFcZddj+P0DgZFw1gTk3EnD6bdL5jkto7tOOw9AQwKUqzUjhL96UxSPwTD2AAMkSRpkCRJZuB84LO+B0iS1NcLdSrQk6a8EDhWkqSUmLP72Ni2/wrCsXLhGirhY6t7t88sbWdQ9RdEUhVkWUY2yEw/vYRWyyxq0kRUQuMTjxHeoyfZdNslpn/TQKi6ik+iG7nM/BbdWmwxZSXiePovJCcL4h89fg6Rc46j6DJRLryiU0g8mkGm2TyG0NMlrHpbMBtLLFzSmahh9QniUtz6F35jf5KGjL10WRspaYeJQ8bERdaE6g2MzdQzhu02GxpGguYC/Jb4aJDugHgP1kA71kA7tmBb3P5EVSyGTEuf+kZ9Ejn2bWwhHIjS1eJnyZt7uWvK3Xx46oeiVIMEN8y9mtxGwQCkaDvGqJ/he98inCYW7rFXjqaq7Ukyr3+EnfPfJHH+KjSb7si0H30Umiyx7gs9V8JglDHvq8N0wGJpzRXfJzlcirdMRlM1nr1uKQfC6jRjsRnJLOqRWC34s1u5fEyfroCyxhEXD6OhrIulb+4lIdXK6TdPxJFk6Y0OA5AliVNvGg9AV7N4R+/fv4HO6gBD04cgSRLZjmxKxmcw5vB8fF1hHMlmDjt/KIUxTaWh3s5tWbtwRrvINYq2pQaTTPHYdMYcnseVjx3G0ZeL2JFwWyvrR5t56qZBbJgr5lRJkh6WDVBtdGG94Vd8fM0ogrIglj0+tajRRsTkZJ8/P+6cJEsS13+0mD+/tZNzhol+7E6vLq89EdMyErurkVAoPLWZ3LlCG7U8tJ2u3dso2S+Wek+Iaw++vPQY3N525KQkTLm5nDDoBJGF3ge7SmVebG4lM7GGZ0+UeeYoncg7vY3kzUrk6KQn2Z9voiXLwtA0UW3Y0Ke7osnWX8OoyI3PMhqXPb7379bTZ/DcJRPZtukr2qbsoNFYzaLX92BtdYOiUOXWown9jhyCETNc92cA2oN92uzGKu9KTj2zf/ni11hQvZBwLGfJ1B3AOX8FF424iJTS+EoCmQv/wQ3ProH2TqRGIxvMNtoUnbG9d9NYPHPGYbKasSTIVGRu5tkT9SoLPxX+Y4ahaVoUuB5B6PcA8zRN2yVJ0j2SJPXk4d8oSdIuSZK2ATcCl8fO7QTuRTCdDcA9sW3/FVhj0p2EzI7N23uL47W//jaaZKDVZ8YQi8z54MGNtBvyqC4UTCD82VekdYjQ2nvObeftuRKyBlm2LE6qz+D1hSV0pYrKnWbVwLByP0E1RMQAmz27mfLwAnLfFD0A8tMHExg1iHmXFbN1tFDxbd0x/0e0kezmtTiyOkndswinp47qzFu5Rb6cvLbhJAdzeeDlEE3eJvpm3wWVAFta9D7g0xYLYutKHIzbUg1W3cSQZhXmjKjJTtCWDgek8SUZxP5EazOTrk9lXMczcfvL17Uw/phCjvnlSM7+w2Re+f0qvli8DFezH0eaiXRnGkqsF7LP2EjUaGfv8IspsummognbxXsdlzEWu9GOcYgemVW+8RskVWPMkdlMPE5IqRZHvM022e7iQISDUeGclvovKKvTRN6wFOZePLx32223XM55X57Ht4NFBJGExLDpOUw4ppC9a5t56bcrcLcJDS41RycMe9c2449lk/fsL5mQgZbjY3HgS+6bdR83TryRwZMyGXtkfq+G8flT22go7+q9zp8rpuCwJNMYFSUnZFnCkWRh2PRs1n9eRUu1ICA75z3PzIcW0tnVRI5fMC5/rEx3T+e9yO4yPBVlFNz+Iu5qQXjVmKTbwzh8Zj2QIr19O/l9wmUf6RBVfRO8fV2KAhvO2ccrU25lz5Ya2hbJvdcMmSSKaxcy97yufmXvJ7Y7sU4Yj2w2E2lsZPE3LzHz3ZmsPFZ3bB+3PsK04gI+jl6LJcYreiLRDGqYjFEmFqR2MawmQmGNn+69ImltVYIe9p3mPYi0XZyPqW+L37QQteOzkfNySMTK4RsCJLgj+JoVUgPZJCbbUS4R4fW59hiT1fpHI7WiJzcmNwghbN8GPWx8+PJajtihIR2wnr7Y/B7lTi+3/0Wfe+d/ciadqpe9n76B4+skyAkTOflwMgc7yChxcvev3+e0Gb8gEokS8qgM7pzAX4svYNzUhN78q58CP4gPQ9O0LzVNG6ppWqmmaffHtt2hadpnsb9v0zRtlKZp4zRNO0LTtL19zn1F07TBsX+v/hDjORSi+3Rb5vjmU5Fjj7+79DyqC48jN6L0qpMWuxFzjsL4X+llkvMaVzCb93k8OpdrvlSpHpGCywlSSzumTbvJ9Qlbs71qO2233E7A1YFJgZEdws6esEJ4dRMGDyPllac55dzbKckUPv5AWKyY1MwZNGdPp2TMOLJaNzGoRtjzzaF4v01nsBPF3QWAQXMz/cwSrhl/Ddaj65i0+VES/bFYf3MCg1PsdMeyVIeXvc1h+YLYRo1C3Q31KYYIYB8img2p1sns+vOFpO3on12aPSiJzKJEti8WBKZyeRddLT7aLA1c/821yLEkuKhNtydXN+vEKDlWFjqkhIiqUaxLNjC45hYue2Q8xjFCsjYbjL1mLmMsYioSc65KDcIUtCft895rSrHWtEZj/2ltdZj4tuZbDn9Dj5h6+taFzC2YS32y0BxrsnZwz5p7mH5GKQlFBiypEonpVhbVLGKzbTlzLxISrnvkfr59TSjJow7L47IHZ3LUpSMovdRI9lwDT255kjtW3cGyd8p49dZV5A1LJndwMt3tAXYs1RMOjSvXc8eNyf3G+vmT29j2bR3VO4SmNzxFEJo/PlJHwSphVmrujuVWRIXQMyh5EKmanZE1OrOUY2G14ZgJ0u4ThHZY3TzG7nyeXe3iu24vlkiMCObRniZMLDuv1GtCecpK+cWGR3HUTQMNnA4NWVXILRaRgiUZw/o9Q9IlF2OpaMA6ShyTF7JzSuEJzP66keF73yLJLdbKU89ApyWHK75R+dtLChoaKy8YyYrpCTjlah5KSyVghp1Hl1DvFglyMxy6GUjXGHXkb6yjM6jLna72eqx17agNTVg++JqE448nN384gxomYDPamHBKHhbZAnnZjDlfdKVM8cbn6TjvuJUpc8/vd69iix6jY40xPVOf1sjRrFR+/W4Xv32shgdu1UvkvPx3BXnBcganind3QkYnh//fX2nd10nb/m7WTx3L4qf/2Nv3zOzzEPjzjRhXPYzNGe9z/DHxs8r0tpxyTO/fpnF7CCkhgtEgpmxhMXO2GMAkbLD2JDPhJgOeJ8UCNx9zBBIgL1+O/OJ7AKwZYyJqM7HUUctnM03ccmY9DcZHcOQEsMkWkizCDmueHl9fZ1v5Ch6592Sk391HzieLAFAQBN4Sy3OoLBOEMrG7WozHupddiXczdYMoITEqfRRarJGKIiXhNDtxmBycm1pAUncVpqhuTtpq2oo5QXzqvcMu4vPG+PDFpqT4HheDxghpv6AgnZl7+ktwx145ig//spEFz++kfL2QxAotxRSNSWfC1MHcPeNukVkHZMvJvef1lfzLOwWRLu/Yi8cYweIJUVH0MK//31ZKYj6UDQtqqNomiKYSVfHZDb0mKX8sO77EpxO2WDI+ITWE29LGvrRNvftctBFUgmiyPgZjyMKVY65ElQRhNSVKbG3biixLbJz6EV9OegpJkvii6gte3/U6QZ+gCCV2XRvasa6Kl+d9zGu3rqTqESvHus8nEA1gM9piobgqR102klFz8sgdkhxnRgxEPIx3DgNZo3isLv33JKSZYlFwqqprh5U54r0OmypimHpM+PWeeiIpTirPmEhCZqyGFBoRA/jHixBQyygny/JuJKNhFeEEK5x0BK1JoKYnc+uoo5BUhZzOrbQnwP2pq3rvedwmvcSNJUPjrD+NQdaieHYJjbtZ6+JAXGh/i1bZS7C8jMxbbqFk8pGcV3Q6ALnNa0hpEtWXM91RjhmhE1hZkjlp2BkcPf1CUktE6fqFEyX2p4QpjUUcWj/8pvf4yEHKufzuExWLQTchTu3OILNDTA5XaQYXzdjMnmQf3ogXiyeRtZ9VEn3ncS4/t43XakSZkvSYD87pEUxq4zt/p6FBJ/gbLxFuWDk/PucDwB/LmD/3NiP3/j6PDFs6KbHUDKnXlQvmpJRe5f7Vxmxeve00ppb9nSmRD0jojiCHwhhkGUM0QG6TGFdH4ODlgX4s/KwYRvKoMYzYI6Jilrr38P7eecx4ZwaRgB8JDVungYZxolOaPUFw8bZYWK3/5Nl8MkMimqRnw14wr5VMt8SRJ13HYfc9z6yGk8mL/h/BIUchqxA0ajSmiL7LfVHkNnHD5ypaVR2pnbsprv6Kw+cI23bTruU43BuRpWoAIkYh/XdHc7m4ORmnr5Hld55Eg7cBqU9iW48q71+/AQwGxr79FJYkA16zi7KMBo6YqTfLsWXEaxRFbfFhiJoSK1twAK84+brRXHDHNDydQvrqKQ8CYBwUZPppJYyalUeyNRktxjC6unWtbmiaHrefnieI2KQTL2fU6rV0Xq6H4GofC62qJ1QToGhUKqFYBdHCir8yOkNEp9i7+3QGtMcIv2IhKZRBYbseQfbSvueZnjOdU4v0FCGn1cH7e99HjVXozSkbzcenfgzAvbPv5a9HPwrA/bPv55djfsl8x+vUzFxFx0b9xcghM4YtmfjcYRQpwoeN73D5UpkbpaOQDRIhX5S371xLQ7mL0YfHR4w7DWbOeXQTqBLV23VCkD9CvNeeaK2yPu1XO644iWv+nI4vFurviTntI2qEaGoCd4zcQyRHFwA60kyoNYLo+eQILie4P3qMMctWcdwFt5HphpwKFw9uvpUjlt+I3V1Hugde/1wPXS+KJXgChNokljwg8nMCMZrsd/Y3kTy6aTjJqo1oYxPdCxfgTbZw3dd6gcXaGcIHU54Lxwwa37tdURU67rmf0OPPE41FBQ1tM3LCLjPBiGBc3X0ytF1NB28m5DD1MSG2CU3KdsqJOGfM4NqduSR1hHFUiMglKWji15tv5Q/zFCbsriPJXYasRpi77Aby85bhLkhheEWQlt16RFRXknjmPb7+LQF6rBR3v6Nx4icNWGp089Yw0yKSh1eL92eVqHSL84fvMzNub4j0wyeRM1bkQY3NGg+yxOqcW3otDeMy9Iq5PwV+VgzDIBvYM0JUH5lVfSbTMqZz2ajLUNsFU1BkmSnFwqfQk+1tiJmMSnJHc5HzSKyu+Ho77e5GWLeFxMfeZuouIT20tlURjgQJSlHSPTDSJALBKvOFvdlmdUJmOqYbrmD/PZfgv8wGQ4UzM8mbhS9pMnn2ZCrvuphITONJDOTz6HChxh929xd0+NuRHTrz6pFKIw31oCi0HDODI0u2Ej58KX/8yM3b6/WWobPy46WyUGJ8J7TO2CJsaQty7m1G/jFdXLurYzkpOXbWfCzG0Te8r76mjZd/t4J5rz3O1Yuu4cGzxTVCpq7eY3a7dNPWkN/9idYX/0Qw1cmipa/SWV9Jevs2UrKt9IhdlpgfZPj0bEbMysU8I8b0tGoCaz5jwtbHyd//aO81FWt8lV1Ln4IDF0+4gDWNa/hH9ae927qjboqTikntFgzDY9jGA+seAIRDeFCS8LnYjDYavY18UvUx67265G0yaiR4apk4VfgT7Ce6GDkshc5XXqH20stoRZiNrA4TVoeJ9Px484mUYKMl0MqBmHxCMaAXeBx75q9Qi/PAaGTCfo1n722ndrWwne9O9BBKT2TEtBNI6I7y+e7jCW7TGWV2a4S0VsHg01bt5onnFWqb9vLedcfz3h/PpTEFKnIOLEUJ5t1V/O5KA0tOyuOF00TuQUQW77fBk4SWmkTu1aLGVOkBzZkAUtbswTl5MvZp0whu20709XlMSNWjjOZ+Ighl08gs3bwWQ6yuIsZYQ7CRlRFMu/ez3yHmVEKpbgLLKdWjADtP083HPZ0IAVpHZbPosCQC878k25rB2A+2ktERIaEtxmxMCi89HGB4AwyKWHAnDaMzZQQem0rJjb8j6ZabkZKTGJGtj/+Il7YCMFzSy87YrxLmrB7tZkSNwrTVnTSlG/DGGLw0Yi5ai6ApdmcyI8+8gluPPp0l6XMoOOIkrh+3ledLqgHY0bETWZI5cu4veu9R7+nvY/ox8bNiGH4pvppkSWIJN026iR4C1Xzl8dhiZgB7jIgaE4X5pquxCv83wny0vViiPhaWH1WjbFr5EfL8RTh8QmJJOn4MzY/9huSoGXMU0pr8rHrwbMK3/xqAbRl+zv1lFy2Hj6RmsJN7wp/QZYr5HJKTAaioMzPz9Gv47HeC2bSZu5lSrhPoMamjMPRhGADRjg5s48ZhnyFyNr7aMobUb84gpcHDlCrdjLJ4c6xzYCzbWQnEFzVMyxNhtrmFSVxXMYjSWOXOZEtSL2MCKBylZ8qa69LIdu9k7ouLeXjQzfzxo1bSkjcx5pSJvccofXoMPLnx7wRvv49tH71A0e+fo2BjHe3p43A1B5EXvMmul28id6QgRHvXNrP200oMK0Xxv8ENKprVQkrXPpadN4ghe/4irt9s7jUH9MWb0/7EjCljiarRXvPT/0fef0fJUV1t3/CvQlfn7unJSaMckIRyAhEkkTMiiWww2GCDbcCAyTaYnEwyGWOSSSKLJIIEQiAUkISEsjQz0owmz/RM5670/VHVSSO4n/d9fdvfs9hraWm6uqqr6lSds9O1rw1gCgb7V++PYBp4Yy04fR3MrJ7Z73iAi8dfzKenfMpZk+Zlt1VVNeKJt5E2rdBj+rMSTq2zcB5Jt0TRCGvBGzGtIjumv/pbLoR29elJlv/pSJSSNIHSXHVwoNTNb/4+i2GTrSZERnUZq8+dxpfHDaT3WStBP9RjeQChtjibfBHqzU4Svd30vvUWHm9h/N1lx/NlzVrwJ1/4dyZ+08GgFp3qHpi50eTW/W8tOOb1mQLj6k0+KWllRPUBAJSMtebECH6gzejl4V0vArC7u6HfeIWTYaJvvo17/HgEh4P01m0cWju7334Hf9pGS0nunZLEQm8lQ+i5ZE45E0fNJh1wkw7lvIe0zZhrjBtF8TuWMr//RBG/klPOR1TP4XjNMh62v/USABd/chGGw7ofTbLmXtIBC4ttUke9iWAcks+8yMfP/pkHTnPRN6Q8+5uRUkspizW5kNQ78joePF6kL1VY7zWkWcNnP5Ktjbvo7XGg/PG3uAYMQiovY3BlPcuOWcod4+q5dvckTggPZu1+5agDKjBNk+mXP88PgyTuOkXkw0OK+o3hf1J+VgrD6y9GrPk2+zlTYm8tgiZNDeuy32U8jO5my53sTVsvwRd/PppA3KTUficqvJXsaycKv5lgWT6hiimM3u8YYkn7mLIuxt3+NiXrrHzISLmWB0K/JnLTbRxyxt9587kyqlqsybzbhubGBJVvD5/JgYt2cWbRmXw75EWO3J2Lc++KNSMmIshqlMoOC8Ia+eRT2u+9Dz1sKYRZ+/Zy5K/HUnPdDRw07yTSonU9gmhZZbXNX4KpES0vDFFlxsVIJDn49a2M/ayeSMhFzcgpBftJNpRS2qeFfRtfYNjKJ/GffiwBVUKJB+gKT+bTz9/J7r9PaQ4lcuR7u6nrgImuYXhkD+mDc79937f38MTyh6kZG2D6CVbowlvkRLA9mmUjBcpGjCNZXcxHnu3cezGsqvmY2otSuGU35e253AXAOd/eyuWf/JG5w+dyxtCzstsDvTpvf/MPQjGYvuJWjnznLca8v5G9ySeNn3D3irvx+HKx8fqpGm0VU2lrtcavy+jgtvoncO6zD6UzDmL2OAs19+UrW7JjqrjlrKK9e8DFXH78XQgJT5YWPCP5qKPvnrmH8kff4rMpMtoga4FK1Vo5nBG7YXyDSXLt99mKdVHpKvitrw9Lso93I6V9a7Lb3BMmMOrYHA34xetvxLt/jsL/tNtf4xefGdz+vM6Ajyz0XZNgFZ5uZDyVYTj3DQs8kXD2X0a8Di+ibhJbuhTX6NFoXZ38q3thv/1WDxGYPuTg7GfVUPlmlMDGWkjqSTIpp8nF4+hZ9x1KX4KvfJZhFlm8mPi2BgC+lXPd8K5426A4j/ZjxTtPEfva6qjo8hcBEHIW0TbEGsOSQDGarvLRZIHyKdYzk7HmWnv3To74zmT08nZ2d+bCT+uOsEKq6zpz9Ua1763irEUGks2FtaNaYuuIwhqnUXVNBH7fzInKk6RCbr5/4WFOeWctF30b4bgdIcreXErZ2iZOf/YLDp17mXVQWsUzZQr/vPUHbj7rmX5j+J8UwdxL+8b/f5cpU6aYK1funWr6p0RNJlhw8dOE9RLi3krOu2sm3qCTp85/jVDPDqpqvmfm3602j9GeFM9duxS/0cq5T55J3+LFNF/8G/RbLke6yeqp0TEgwPAnnib+3gekH/snWy58jqZtUcpKFzN4wevUvfc23YedSO/4wQTXWpNtn00b6fziMzouuhSjthKxyUKulLz0D8on78fad1bw1YcR6oYqDHnuYkRNZ/cgnUdPkpj+lUAlQd4br3L9OU8zSq3kmb9uwOXq5YIH5rJxlIX1dg4fTmrrVqpuv52ik+byUf1HPPDdAxz47XCK+uZSOcDJ6Bcu5PNZfwdgzuJL2GdTbqFct7iJL1/ZwtDJPgbelyMQTi1+iQmVk3j0t4vYZ79KRkyr5O2/5aC8dXUSgW9vJBLporbTz9L9b6cmsIDmPqth0NPTrmL1L63FfNc1fyL69rt4XnmKb9Ob6di2Hr60qCtmLfkdom4w4rtVbP2+l8/+uZGzbplB81EzEWNJXp4tc8YiyxL8doTA9C0m9/1pKBsc3byw/wt0N3VhioVhNjlgIooiXYku/Ek/CBKCaSA5UsSNFAE7r2tIAs6K/onMqBrNWo7+lLUYSaaKLjiQUNFxgFtDRkcOxzAUmbDbpEgoRlONgjoOQzfQ+voQkgl0EXTZgyC78OTtky9apA8zEkVwOjFkCSEWxygvRpGcJNtbkHWQSkoQJAmtvR3TH0LTDByJXlIyJJwOnLoPl5nASCfRi7wkTRVJknF3x1El6PNAlbcKraUFJAldEpBsUIUmudFkNyk5gSgJeFQZKdEHgmBR1VdWIoiFSkPtaAc1R8MjyDKRgIyvu1Ax6pKAFAxCd9h6TlVV9MW6MXQVv7+Ujlg7pXaaSi/yI4UjmKEgituL1t6OoengVBBSheFIs6IUxe64mIyGkfrsAlC/HyMSQQ16MNIKpiGieCXEbrsWKVBEMiUimBrOdB9CWQlmh6WApdJSRMX6zUSsF7k3hlAcQnZZ3oa62wqtOaqqQBBQd+/GlESE/LoJnxcUBSMaxVEUwkgmMPsiIJgIigtdTWFIIrokILs9OF0+65lk3h2XgrO4kGdub+JyuaitrcXhKJwHgiCsMk1zyo8c9j/Kf4eQ5L8kiXgvu11jsp8zMXh1/GoGPfc1aqAo+50v5MSpR/DYxX5xp0m8tgSPrSwA/nlGKbeUhVgRXsdAn0jorXtp2vdi6sw4viQUOQJ0A4H1lvWTtLuwbehYTxlgCJaL9+gxIpeXuikHfC5rdtQNjFN0zR/pu/VuJNPkL+1xzprj59kH+5i63GDERcNQUzbDpxAksS5n6XimTye1dStyueVCly/dzJ9ei/LpiARFQHfYioMObPyY7qCHcGFkC5fPesmKQu6C7aGmPqiE3z46G9M0ad1R6Hr7qkso91ZQbHqQdzcyZ/ElhM49hzfs3TQxFxJ8ZWKCNU6Ro52NPPHd41zWuA+ZaSEKImCgGVoWVfTDl81sH+tm6rdJTtwcAJv9c3SLBGh41tXzqxOvxO/3E6hREEQPhq00BJdBqMxHX7oPR9SBS5XxpstxphO4ggItWhdVedU/ziFDEJ2Fi7ep6yRTMaKkELpdoGk4E10kPOW4Uj34h9chCALp5mZ0Zw9GWYher0CFp6JfmKW9sQ/84InttNhcFQe+wYX9nvMlFetD39mEoBuobgcOnx/H4MGIHjcpwxofYdggFFEh4ZCgvBRT15HarDCXJrtJuMtQ0n04U2G6B4Xw9qmIssyu2l78sotxSgXGjgaoyFW+dwShrBfSSoCUswhHyER2iXgdXna0bqQkCq6UiTi4DqenMD+zsRxqeiUcNrxbClnj4XP0L7NSa8txOKzxdo8eTbK+HjMWQxo1AqlbZHCbZdQ6hg1F3bYdI+DFWzeYdCCA3tNDyini1AXQcuFGaZ8RWYWh9/aS3mXH/msqqNfakQQY2KEQ91TgLpaRYqUInd0kA35UM4Sop/HGW2HkUFpLtlPZA9LggShe6z5jGzcgunyINVU4Q9a87vI78ISTOEYOR5YcxAydhFfGpQlISevdV90O3KUVaLuaUIYOxcAg3bYNPSmBLCNrgENGSCTRykP4y2tIGHkFum6ZoqE5T31vYpomXV1dNDU1MXjw4J/c9/+p/KxCUk5n4cq4a4P18h6+3/mYgsSaPHSJaZikJD8dpvUy9I6s5rxzekkU5RbRuxJHU2X4mfaHW5Dee5ayrnXMWXwJNbMPxnXXTdmuaG3lDv7162F0XWbFvwfZvZR7tQjhgMS9d3/HoDqrSrtPaGHO4ktIuBs5Ur+f3gFFDFQ1bnZ5ebjxIDwJ6zebuxsxg06GbrmM0e0PoHV0IAYC1P79Ecp+/ztGrFyRDTEMTPmo3NLFphJLcXltLGZZ5xoG71xH0R5h/wy9Q0l1ocIoE3KLgiAIlNX5OOHPY2CsFZrwl/soeuwBhEf+mt1vQ1suzHeAI/ei7zf2KM7dUMqc3SGefFhnxIcbst+tnlIEgOoQsgSL0XCKqd9a53Hv7iZ591XsPGcW/oitNA0YVzSO0pJSvOkISjqHnjKTIo19jRS7iqnyVhGMSYhIOLQY6ViEhCKwqyaHbTcihTkdgHjzTtixE7/iR9N1DNtDsQ4wwPbUzXQa0e3GW1FDta8a3dSJqXtH8ojDBuOQHNmF7cekV0jSGjCI+WQMuyLe0DVbsdr3KEngkGksg4RbRMvr9ihrSZzJHhx2fqe4MYwrHMeVNBjSalLSlmB3T0O/8zptJuDMfcbNGG7ZjRmLU+kuR7CDE4bWv21otViMw7ByE1IwiFJTg0dy99sPwOstyv5tmAZmzGZMMHVMAZJOEdPlxHBIFk2I3VxIKioi6XUQ9hik8uDSEZ9UMKYJ+77l0lJEfwDRBIcgo9v1Ek5FocERRhfBYefo5AybcXsbpXHLrs4U+gKYNkIxkZeX6xNTdARBsJ+LaIKom5DOjY8kSETMBL1eQBKJCSoNPhkRkEQZURCQJAnR58PjtnJjETdoHieOykr8FflMSnsXQRAoKSkhmezf8+X/q/ysFIbD48MVlKgdG6S42pvtY/D5E2vZWXcoI0O5PhWCKDAgvoh9PRb30GCzhEW19yL/7S8kzzyG8Ng6Oh9+hLamLYjt3Xg35wqylsj1HB++nR6HStIB4rjRTFmwjfe/sSC9brvXd9EBByHV1rD61GPp2WohiAbaymRY0TCe/mggwV1htjsUDtzuofzlRdlzdMTaoC/GwN0q/vWN+OfMpurWv9J0yaVEPvucrieeRO+2FOJWu0hqgJFEMDTKFWuirJz8J74f99t+45RBSTXsiPLCbJEdttG5pXtLwX5a2uDbN+thvZWcdvsdvLD8MS5Z8Cu67dBt0JOLJf/+r+sw7MVn0KtfU7euncSuRjRTY8f+A+kLtVI5wk+oahC6AB7FS+0oC6u+76xcVfKyUSKX9jzG9eVLsttOWilbFNICCF5vdgHPSKm7lGg6SkusBW8yiawlSDv8GH4vDg0q2nLGgpHMLbamaWLqOoa9OjZ0b0ew+6eqDusmTUHETKUw0mmMWAwjkUDr6WF7eDtbe7bS0NtQcC2iJOJwi5i6TlpPk9R+emIHUxJVaQ8ldSNQfHaC3UgXLGBODQQTRroGUiwHcXoCueckOUk5g2T79JomumCSsBdFpwquNAhSoScU6LHGJG3Dm7WYSVOkCa2tDampDWfazstI/UNpSms3otuD4HBgqipaZycetz/7XgAkFWipcZNCo7FSorWmUKFIgoRggitlQDpNMtaHQweXr8i6Hi2NaqjEFQElz8PRTZ1oKmcwqIpET5GMVFaKI60zsN2kzPSh+YKAjiCbDIp5kAyrWFSSurLU8Aoysu3JO+UcMEG0c1JuIaeYqtIeytOuAo/SndAxRIGEAonqYuSaajy+EK6qWkSHgicFQzoNZMNEFmWaykTaQiK7QyZRxVaCVeW0F4u0OpP0yoWhtx+TfHDKv1N+XiGpZJRkr05Tby+HnOZg+MFWQd3Ihhfx9oRJF+cYSU3T5KAn/4jbYb3EPT+sofuSy7j1LAnJNDmr0yBVruCVYOWTd7DP+zkLedTqLp7/tJyKwx0kVJDruyjfDSPejMHtsKK0jxfOEPn9mcey41OVSQ9+SqSvixJAdUmkh9agOkUCq7fTVVdE/bgOjm4JkXCncdhN4McVj4WkNaGFVJru554j+oWFj2+/80703l68+++HXFqKW7GSsrWNwzBFmebObmoAT7wNVd4jHgUoLuu18Bf5iJ16KJ57lwNhivK6FQLE+9K0rsu5J4PHl3Hc7+s5srsSR7SR7nEDmHHN7Wy98Hl6A5ZrbJgGoiDyw5avqAO29mylXFfxhpMEkpW09kSYI7nABDUSwRsMcsljVnV2Bn0/LlbM03cUFjCVdabpVq3f7xWTBDWVuBBENK178Tq82Q5raVlEl5xIWgKX20eopQdFg5hPxllRhdudu0+9uxutqwuny40uigxsNxD8EfRYAkN0oOJD8bsxVZX09lyjJr2nh1BViJScKkDsgJXDMBLg6NyJGvIi5VcGh8NIPh+CnJuaZjoNsTjdu7YiGeAEXJKzgIIirSZRZJl0fT1GRQmGJGYntyE6QBBRHT6cKZtSRZTs5Kz1PhXFQBkzkvjG3HucKQo0SnzQCwGfD9klgmTF9FOKgDNtopoae1Zi6KaOmorh8vnAMFBbWxF9PooFH2B5cK40DBBLScSiDGzVgQRiSEQMBDAi1oKf6SOWdgh4TRkN0JzWnaV6uvAnwBBMhHguPFoUAzHvikKBckIBKzyb0K3fdbX2kChzYKoKqXQaqc+6ppiZxNOXU+CmrWQTLhFZzv1qNi+Rlzsxo5ahpWopHHJOicqmgIBAs9ZDIG1SJgVx9UQxy71Wpb4msLsUFI9EmRxANAXi4U4EUQMn+Dti+CMJNClB2huHupwR9p+Wn5eHYeQmWEoO88OXu1m+oJ6yM3+BKUi05mHiNUPjFw8cwOsfWzmLiB4n6YCbX9K56WWDoa1w8BdrqBs1lX1LxiAIIj8Mtl7kkKrg2r6bWJeV0F48pNCCHD/8AM4+525WvPsUFa8sBqDcZ5nxTdUKZ5/Wxia7b0d8ylBO8nexuaUZdWjOym5OtWUtRID0zl1gJ7jKr72GsiuuwDPdaksyePhU3NOmEsfygkI2GWHSGUJV/OwaXqgI/CWWJVVcLHDxbxdSuSMMQFVVYXOhYLmbiSdYmPIZIzbgCSg4JAU5bk2i4u938dIPLxDzVmbbf8o2n1eF27rfMSVjcMtuKr/L4cs/8zZYz8jIm4x5cVzPrr1Xu7pdPiRBIhhWMUQHoiljiElSRb009DVQ4i6hLlCHKQiYgojT74b6XVnIY8Dhx+fwYiQSGMkkpqahtbUhOp2oooFpmghOJ3E1SmOZRlswgeDowl1djmkvHILDgRQIIrpcFLuLEQWRlljLXq9XEiSKqwYTLLeeq5FKoTY1kW4q7Fee8UA8ERU7pYYhCgWWrJlHDqnqadS8kJSq9J/mskNBcbisUBYWpNTo6kYX7cV5VK6Gxd3eTp/SREyI4pbdKHY/mkzV/d6AM9qQWhwOJ0YkglxSguh0YUSjsEe4T9u1C4+Ys9wN06DBGaGpJBcC0iUBR6g4651qndbzd9h1Gs7+EbECLqlIdyt92zZhahqSy52lyBf7UgiIuGQnETe0hazEdv79ZK4h6jTQ8vqmaHaoNGX2P3lGkXeERDrKFNKigZw2GNhuEuhKEo32YPaEMXWdlG69N4buwi97ce7qwNHaTaAnhUe3n2/EpsfRwW/uHRjxn5KflcIQ8ybYiNEH0NkUoa2+j4++F9k54BD2WZ0HRxTgz5+GmPSuRWEx+OBjGPndKsxQbnF94KGzae2ox3nxeZifvcQpH65jn00b2eYMA9CWaKetCEbWTii4Dse36xl64b0cslKlps16ITOLwgihkjcCVzPBYVnkA95cxeKNpRSbbpSqHKVHh5IssDD9RxyOf9YsAJxDh1L6619lkSurRzu56Pg2ouUR5iy+hDmXngiAYcd5B2wtZLPNUGB0tOa2G8A6f+F+hm6yc4M1Zs0HWUnbXbEm2qI5crjRixpIuizP7dFjRFTd5szyWttUn4tdZx5Ey4Qa5iy+hHk3DGTaWnuBlPNCFHssSquGF766ayYFiajR3KJidypzIxFyhyhzlxFJR9jZtxOnnUiPJQt/Q+/poa+5gXRDA1pnJ4IsowwejKO2Fs3toM9tYqZSOFXw47TCJaWlqO3tqG1tCJJMorSUpxe8h6O6msa+RjoTnVn20r1Jx64tdO+24JqrvlvFR19+iZ62FpF//vOflJWVcfARxzL9lFOYfsopbG1vp8cHKQek9XSWW0uRnAiyjGvMGIIVdbhVgV9ffz2vfbYQzaZkMW2iQsOl0FIi0hEUEHRLA73+3gImHXAAB849hVnHnYwky6zdZFNhGAqBdC16n0BztDmrHDNpA5ev0OAA8KAgmgKmpmGqKs7hwxBcOcXQVpTbN60XhlkqIxLlfZZxoYsQcZuk45Fs7sKt2vkDr0xCoaBnREaiebUQRjpN/catzD7kEKZNncH0Y07gkr/8BVOQWbtmJX+4/A94Bgyiyl+DzyhEFWVCgGW94Mw7kVFmdzV0FcJmgSys1hMqo6ioomCeyqaAyw5tCYKA0/ZEqsMpXB0RVEPLvi9J2yA08jpP/tS79J+Qn1VIKp3HkR9WUhx85kgkSeSJX9WzZ8RPEiT8ig+nzQfV19fJwm+eZ2Skl4yOP/Kx70jPaeWfLW/xQ/N3zH19NzEXTD3CosyuqxyFmVLQWgo9jO8bl1GzuxV96hhSDfXU++L4HQbFQGzbZvRrbyfx93txjB2Nun4DpR0C+993OUw8OwudnegchmkmkUIhKq67Du+0aSh1ddQUFaEMHFhwvqL2OKduK6Fq+UA+n3U6jle/4MC87yOugt2pG13MMZeMo3ywwudvVDJ0VSsiUBoRIFfYiprU6dpq3dv4H2IwBSr91WjF8NkppRzy9BoG+uvIVL789n0D425rlfmkvIPYRIHiUSYPJb7mKn1fNnuuglsbmdNiKSbN0HIvqCiyfGYp05Z2kioLoNZ6SNe3smNkgFE/9DHhu15iKcvS7i5zEeyyFiFZT+KSizAx6UlmGG7zlE8oCD05RShLDkSfEyMWy4WHJIlgSTUOpwcamhB1g9I2O/Gq9mStezEYoDcS4dFHHuGis8/Gr/hRRAWf0n9RASts404KYCdO165fx4qvlnDQSUeRCRTOmzePe/9yE6bdS6Sn0osej+ExHRiCQEo2cWigmhpOoLOvFbfTCzYBo0MHdwpSLhBsmGzCK+PHiYhEWgZFg3OOPJZzjrTgz+u3bGHeH/7A+FEWSCGT4PUqXpwuEbXR8oDSDgFFNUmpSWTRgZwXRlN37EDzOFEAI2E1CjPTucWuImz9L5WVkdRVHEDcCS4ElGQeHNeEYAwMMY0zWIZGd3a8DQHSimV5I8skZQNX0nq/FDGXW/AHSrnq/vu57LLLOOKw2dDQxPotW1AdXsZPmMJ+h09B7ApjdIWJ+J04PVZiX5XA4fNk0WK6oSFmZn9vBuubS3qn/E6ckRSqoaJIEt4dbQXjBxBTTPyCRPYoWcZ0mBg6aFoSBlQiaDo05aIdQm0V1Ftjrufxiv035GelMByig8H171E/+Dg6t3xP1ZTDWfF+PZpkKYUtY4vIsNZ3Jbo4+bRd3DD9F9QBPetWMe7yf/T7zQpvJacvkzHe7EBIWi+y//Ra4gfOIJmOIyXSbK3/jt4DyxhhexrD9zuKxj/oLBzYx9LJAT46+eusC92SaEdzQXu8kUuP28Ld0w9kzIYFnP7pXfwCB4Ps8zY2fE/FmMksHpriwKuuwjVmDM4hg3EcdVS/a6zbFkH552qa7YrdUpuJc2Djh0TdLjxaoboUBIFB+5aiGiqDHnyYzR+9zshbX6Osu/BlFaXccT3rVjKQk/Gffhrd3c24B6S4yljHvEkC+/3jJpJO2yKzE6RDzryQjQte5HDHOA5YuR/hhi2028n1ZTNLmLGolZSgkdFluqbitUNRzo4+ZiyyLMhRP+QsSUWzeiX4g2Xc9eFaNnVbqDDNuQUdE7fsxjAN9FQChLB1kKRh6Ho2vCI4uhAUBXQNI7kL0e0GUUTXVEb5Ba6fVEiDYSTiSMXFEIkgeb1cc8UVbN+xg0nTp3PoIYcQCPmZ//4CBE1g7ty53HzzzXzw8QKeee4JPn77VTpb2jlk7lw+W7SIW/56G7F4jK+PWM8N192QPUev2yQVhNI+8EY1li1awVnPXESopJTvv/uOY445nMn7H8BjDz9KPBzmheefpm6I9aZ8vmwZ9/zjn/TF49x2zY2csP9kPFENKRZDcDjQNfrJax9+yClHHUV7pYsoKaYN2pez553H4qWfUVNTzXO330FJZRlHnDGPKUNH8fX69Zx19tlMmDCBK6+8Ek3TmDh8OA/dcxdSIMDwadM46dBDWbh0KS5F4Z933cXQujre/Phjbn3icRxOFwFF4ZPnnusXDpIMMDSd6x96iE+/XQaqyi9OO5Wr/3obyxd+ybW3/JW0oTFl7FjuveXPOAWZax5+kE+/XIosyxx++OHccOsNNHW0MaCuDlEQMYCxI0YQAZZ+s4SnX3iU+Xfdxa2PPkpDextbm3bSurOZu66+mmWPPsrCzz6noqyUd99fQMb/kG2YbEJQswZkt6Li9kKZUOjyqKKJLAiIuons8likhwIgCCScAk0lIsWqgcdfiscTgJSKRjsu28Pua2siCAiKgmcv3tx/Un5WISlJcdIwxGq4M9RrwdPcds1Bn78O30G5ilOPw8MNwy9lgsuK21d4rdXMmDwWzwO3kb7BQhd1JjqQEBAEEbnaKvhaOwhOPmAlDTErLh8cO4G13i7uD1jVpqGho6g785ecoczkurWD+fjvfyLabVkUIw86ntCi9xg3Zx53pY/n85IuHpni4oZ/atS+l6tg7tJ7ETWdA1daSWejrzBclC/b0s10FUlZqOC+lT6QJAY3fcig2CI6R1fv9bhwRxPSAacy8tbX6AjApkR9wff5CiPisCbQa8HNXNT5EPuf9yi3Pq8zcNB43MkuQr0WLXcm9LbvmjCzH19BdMkSop8voqNIJOHbTlGVi/hFp/CLG/34fXltUVWVMXYxb9QF6+ty9Cz5YpgGjl2F/ExySkcxRHRTJ6UnkXQQDA1RV5FUvaApk24T3pkZTH8GbWLoCIbJjkoBxxArXCgVFSGXlOIoL8c9dixSMMidd97JkLo6lr3+OrPGjWPHlq28/PHLrF69mlWrVvHll19y3LHHU1FRyWP/eonzr76cy2/4I3V1ddx04w2cetjhLPtgAfPmWRDsV199lcP3O4xjjz6d/c86G922vr9ft54HHnmA1e+8w5tvLaB+6w6+XbaM804+mWf/+S88hmULNu7ezefz3+Wlf7zOH2+6hmQqBZoV9kj8CDrrjY8+4ugLz6C8NcmQVpN4LM74cRP55LNFTJwxkdsefhghEkcxJNKqyoqlS7nkkks477zzePXVV1m3bh26rvPUk0+jRyIgigQDQVZ9+CEXn3EGV91lUbnc8fjjvPfY43y96htefzjX0tew36tMvuuZ+fPZ0babxUs/45u33+SsU04lmUzy6yv+yAv33MM7X7yNLkg8//zLdPeEeX/hpyxZ+SXff/89N9xwA0Y0ym/OPYs5c+ZwwtxTePj55wn35QwN0w5jCh43ja1tvPXGv3j94Ye54NprmTN9P757bT5BX5DPPsmhFDMNv9x53mON6iMkeJHlPJi0IKBoNrwWcGoCnuJy1KG1iIqCx3QwOKpTbmgEfSUktmwh2rKT9ioPcZc1DsE4RPwy3dU+IsHCkNl/Wn5WHoaOgWn3TAinwniAEdMq+eLlLUh6CmV9roWlU3Iy4Za3cI/eDH+bTMKOs94xdAPjSrZxcLuEguUirm1bzRAjxfnntCPrEv+QSnik6yiGihW0AcGiSn79mkHvviVwOSx542Hi/3yJMQOnUvvlcgAic84kUFJJItLDzu++wD/yAAbf9yY1HoUth4xC0uspLRqAdtppCLLMPlOOL0iOioEcjHJP8Rx9OG8OaufgW6zk2WdqmoN1HVGHYGMXe2laBoBXcJFJL5dEBXyTZhR8L+X1nRhSZ9GiHPNFnNnrxwDf49Rg9Hs/0OnxYMbj3HyGyDP2gvzdyw8zANgc3cHGiVA+fQjuNUMJR5PMeXsnc16JkDoxgttrW1R5Se++o/dj2AfLcSX7u+eGAKaa5ropxfT4oDitYKbTCG4XfVUBOhOdDG7Jq7yVpGxYQXOICFXl+AKlJNZbhZCuMWMQBMEq/ursIGm60NstOLbo9SLZ3F8FYiuZT1YsZ9HXy1h96JmIgkg0GmXr1q2MGjiB2/9yNwcfPo0pUyZx5jEW/1QmsW/GcsizefPmce/112F2ddNd6cGIWwpjytSp1FTXoPXFGFJby6wDZ4IgMGb4cL54/XUM23U47pgj0MsCDHEXM3BAHZvr6xkxYyJ6yG/F2nfkEvINFQJtn67F6XFRU1cOnXaoTRQ58diTcIgS551zHmfPPc06QNc55YgjUBWRzT9sZvDgwYwYYUHTzzj+OJ56+RUuPeccME1OO/44kCROO+oo/nT33QDMmDiRi266iePmncQpk6bbQyegVFVj5D3vRcuWceHppxHUHeg6eIfUsHnzZgbW1DB80CA6VDj7uON44oUXuPiMM/A6FC6/6A+cOPdkjj32WIRelQuPPoGTzvwF7737Ngtef4NnXn+dz7/6Gk1KYdghrnQ6wQGz9qckDkXDh6PrOocdcTi0dTB6wAB2bM+tD3GfA18kke1HAmBE+sC0EWsOF0nF6s6opHIGSUyLETRCuHUR0zAwEwmEqEhSENFSm3EIEpKkYEpCzlgB3HGNsNBNyukG9//lKClBEI4UBGGzIAjbBEG4Zi/fXyEIwgZBEL4XBOEzQRAG5n2nC4Kwxv737p7H/jtFNEwGNXwIpkE4HQYsbp8D+Zh9f3iKjt4ca2ZDbwO7+nbSFrfikHHdss5//5mTuduKmXL8BQyaP5/aEZMYUzwGl8PN+V/IHPGdSemuCOVPvkeixWp36XrqdQCC6ywGzVFmOWMbTZrDlsksV1VRGrCSA7tWfkHVpfeycck7hD2gxNOMb/Zz5dWlfHdYHfq5J/K5byfbG9cSTecQJ9JPKIyRZgXXyMei20luv5QLq+wsyyVD95R8LLdomNRohfDQjIdR2/Ep8aA1KeSG3Tg35Dh3vmtZlcX3//ord5Z2umjiVHZOqGL6r6/nwie/Yog7hwBT33gPgGQeKaLqklkw1Tpf53fL+ikLVQI15EMWZQSXZf0pGrhGjEB1yaS0FOWecgYFBtHlh7AXHDU16Hlekru4DF/Aol1QBg/GUV2dHYOEWyLmAldb2EL7AGpzM1pLK3uK4HDgHDECRyDIpVf9nje/eJPVq1ezbds2LrjgAgRRoKWlGUkQ6WrtwGnDOCUbpGAGCsc5aVjfF7fGUVS79kGxCv4MxYEoiihO69mKokhaS5OymyYpGhDpxO0Xrb7QgoDiD1LqKiHkLCI+pJKUw0JJFTmDvP7Rh5x+5NHUdvZHPqmOJE7ZadFjyDIm4PF4Cvp1ZMQI+SFDF2KaCA5HFiqbGdOHb7qJmy65hM6mVmbOm0dXOIxhGnSEm0l0tBT05ZZ0MwtoiPZ1FfyOP25mFaQsy3z58sucOvdkFixYwJFHHpmlRa+uqeGXF/yS1x9+GFmW2bb8awLR3myS2qFBwJRImyqiKOKQZZI+B4mA0xrXvByMHE8jAMl0rigz5rSbe9lD50pTkC4DcKZN+rpbMep3WigpQ0WTLPpTWbAL99I6FU0xvMncwbJuhSSLE/+9bnvwb1AYgiBIwN+Bo4DRwBmCkMcrbclqYIppmuOA+cDded8lTNOcYP87nv9FERCQ9CQ1u5cyrCbX//r2A9fjTPdRHcr1AChxl1DsChGwaw+qRk6k9N478XclEDftYG1qB9d1PE271oNy+CyEP1zAEctSnPO5QX3PNhrLyIakTJfCV6MFvphguZMe0YpN1gQHoHmdfPHQmehV1kJVF7B06ciaCdS/dCNNw4I0RXYxc8gcKotq6f1+DROf/IrO+g04a2rZOttCJ/2Uh7HugxfZff6FmPbEqG7PoVIqki6cib0EsoFIXrU0wJqv3yn4nJmwTWWHUj/ZYsNdOUrmrTG5SVTsKs4uFFW7Ytmq5/FX/hXXhWcTaW1i1V8uJ/3R54i2F5eqsiwof149hGwIzNGsex3XYNK7R/lIzO/A0RO1Fg57ocqQtsqSA4co05fqoynShClYCJ8msRdsZdnrgWh3G90tVthN8nqRi3OWnB6P4eq1flBQFIv/CND3CAX6/X4ikQiiojB16r7869kX6Qn3YJgGzc3NtLe3E6pyc8W1l/DPxx5l+NDB3P/0kwB4igK0kYTiwji1p7IWs9qqI3Do1pgbukY8HUNKWYuqyxsAQUAuLUVWXLhtqOpbCxeixEw2rttKQ1MTIwYNwuwJE922mb6GbXT3tZFygClAoKGbtz5ayKlHHglAq21XGIbBGx89g5ro4MWHHmG/iZMwh9ZlUXhOVWDkyJE0NDSwbZtlhc9/530OOiDH/PvWl18il5cz/6OPmDbe6umwY9cupo0bxzXXXU1pKERTaysCEIpaUFmH6EAXYc5++/H0G/PpVQziCoi7I9b5WnazfedODAFefW8BB06ZQjQepzcSYb8jD+Rvf/sba9euRTc0Fn71Faqqojg9tPb20hUOU2dTepiGjj5iEIgioiCRKM6RcXp1KevlynkoS5eNJHQpuX0D5bWIgQBypq5GEJC9XpLOQpSUW8qhTNyhUsQiDVE0cUgOVF3LKso9Q4amIJAW/u9Pek8DtpmmuQNAEIRXgBOAbAWQaZqL8vZfBpzNf0EMUWDjsENQzAC9IYVM09NjG4uBHXSNypHO+Rw+vLIHj10/kPY5WTCom96JAuWhboZ+voSz71lI+vl5/F3/jB3+HdxhHxuaeRDdB41lTMVMWngIbeYkglMr0eosL2J163cMxiJkk2MpPnnrb5zwu6PwhDyohmXFGKrKIdE6GmOgukXmXvwaZZfX4Bw+jCZgXNk4XLKbI695BO2X7VlStL2JW/FgAoYdE26K78qCnZyRH68y9rtD5POehuy2qnuTAwIWY+/Usy6j7LCj4fjLARgYGJgNa0EO1/7I4xdw9ONr2firw6l872vC4wZyyhEpfLNm0vDkLIx/vYXucuSKz6JRPKu3Zn/n8duns2b3Sl6+25pARWEVFSuHkTTSuPLOKckOTFOwKCJ0Pcs07GpPIPmDEE2iGCKKZmLqe7ehPKpIpv2HXFGBmuEm2kNKSkqYOXMmY8eO5dD9ZnDWUcdw3tHnIkoyPp+PF198kccff5zJ+0+l9qB9uHPwtRw89xRO+sX5HHzggdxz863sP3E6N9z0Z8DKYSxZ8iWmYaBjcPudN+PCQvFJiNnKgJSaRBAE+hwaOkY2FzOgqopZ806mN57kgZtuxuV0YsZTmLKEIIgFnsSXq1ZRW1nJ4AFWfq/SBpV53W62/rCDox46mfKiIl586CGMrTuyYULVSOPyFvHss89y6qmnomka40YO47yTT8pa2OG+PibPmYMDeM4OSV13331sb25GF2DmtMkMnDgyS6uREVOAeaefxOZdjcyePgvJNDnv1FP549Sp/O3v93Ha1X9EM3RmjJvEhaedRndvLyde8XsMzeqtff/99+Nz+vls2TKu/tvfcDoVSKW5/YorKBkxGOrrrWJSVcc0DTRDpdhdjGb37zYiUeiyBsLIS8gbIlYRXx6rcDzcQVpNEqQCJxKYJmJPBFeepx5TTILFxRhFQQRZxlRT9KQDBIljaAmkUBBTFOkmQcBjvcXGsDp2RpswMPE6JPo3pf3Pyb9DYdQA+bOnCZj+E/tfAHyY99klCMJKQAPuNE3z7b0dJAjCr4FfA9TV1e1tl/9RJFFCsXsXdLbWU2bTG095axMm0Lt6RXbftR1reWJyCxcdfDa1QHjLD5ReejedZ0xjxryrKVm6kd1xgwpPOb/eWI32fU/22LK0C09DkqSnh5gTtnRvZOIdy4jNngSzYfjQKUTGbOLTo0qIO9z85V8JAufpEIKWaAtOYHPzaqoufQk/IM6cirGji+19O6hKWZ7Irt6dFG836Dj+NHZfcSqHTC1sA5svVf4adgMeuzCxJN6fK2lvIhcF0b96nehvriS4rpFKb0W/fY78hZf4hRez+6s/MOzU83B8uISSLeuIVYfw7u5hSXFHFnkGVmMigEO+seL0Y0rGEJO+xDd4ODcWfcSt3gPYuvpzhmsG8WgYZ9A6ZzzP9V+6j8AflhbR3TIUKKQrkSUH7upazG0NpJwibqCzSCKmJhmiOgm05Sw0JaUTKdbxA+6kgSBJOIJ7jw+rejoLvda78tToXsie//Uvi/E4VV+PEYtx6Zln4RwzOsv9dNNNN5Hq7sRIJhGDLtZ98gnOoUPR43G+euUVTKcDz3ArJ3TeeecR3rUdpTdBa40bf1rE1xFj1kknoogOksDHzz4LdVYB5awhIzjoH4+TQuPJ227LXpNUNwB9pz1NFQUZASQHBjlvc8ZJx/DFXt4jUxS46JZLufqu66l0V6Bu2gwGfPjPZxFNsqGiQw45hNWrLfbixIYN4HFB1HrOl19wAX8551xSAWc2BPfKAw+wo1JglG8ovTu3kRZyvwVWzYGsQ8CQufePVyFUlmO2ttNUYS1bx0ydybGvvE5HEHwpEWfSoKqsjG9feBmlri4bpu1OdHPd3+/kIW8l6XgUfUcDAF0+kbrjZ/D+ueeQ3riJG3/zWwy/h0TzLhxAx/LlWWj3Db/9LeKwHJGfZPesT0V6cXqt88jRJE7Drk/JixypoonulOkqlgk5Q3QmOulN9DCidB9SfWFKInH6XDIevx9nSRkCAn4xtzQ39e2iXAxS5CxCkP+7Ian/aNJbEISzgSnAwXmbB5qm2SwIwhDgc0EQ1pmmuX3PY03TfBJ4Eix68/835zdNk/K2lfQUj2KwniPx2hlQGRCBYUJuQaz11zLrF9dRW2d1GwuJPoa1wpAPu5AHr2NHnYclv5rAqT4QGpuRvt+cPbZh5WL8dz5D41VnUpGCYWoI6MW7yGrxWHbY0TgO2p/jkhG2b4oDn5PUUziBoRNn0XKXwejh+9DDSyw5ZQQb9vdy0VLwOQPZkE5XvJNycZB1ba7+Hc/ypTGyEwfgjlvJ2qo9KI/7aor2ely4t53Fl5zGIeus4d7QuYGp7F+wz1cLokQPvI+JsVUMA7YteofAtxvxpiCuQNlBhwCvZvfvTfUSdAYJKkGSWIuCZuqYX69k7ioVfWQX5sSxsG4JPjPnNbnyOHtmbjRh48dksF0dAfjn5ftwjg8MjGzSOENtUSR68ckKiWSi4IWPBRRc6dyr1O3WEcUYlXux4XTTQMYqOKsI55LSgtvVb9+MJPUkmavWTb2QLDCegEiUjhofIFGLpZSAgkIvAJfkwiRBVXPCStLb46amY9l1KUO250qbyILbrkS2rWQB2rVOMu1/dEVES6YwNT17fUkHeH1FGI4eTKdCwgnuLltJmyaiAfFYLz2xNBlckOh0QjJV0D87I2JpCWgaQkC2QoSSBKSzyiIjQ1pNEhXduNPgTlvnipS4EBMqgTwCwWipB0WzxnOg237yNp1HWS+5xIEtvckwxbbC0FIJ9HQSvCDLSrYGorgzRUlcR/XZ4+5x4y6rJFmfQwM6RAcmIFVVWnU4e4gi5OZS5n2TzNzzM2UJ0dCR4xo1cQ2x2sTQBILtBoR0FPt6SmrqkN0e2ho3IZkC7oSGWVWOr6iMunYTCJMmjO5W8A0dwX9L/h1J72Ygn0Kx1t5WIIIgHApcDxxvmrlO6KZpNtv/7wAWAxP/Ddf0o9IXGITq8NFLjjph5bUW1Na5OdfWsdhVzP5PLkd64W0A9FCAxnMORty0nfUfvEg05GLRsCS6W+H98t18MtXBHy+UePpwkWCJFdoa5rcsEnH/Qvr59xc9wd1/PQb5kRcY+o/PAYtMDkDzu6kfX4YQtF72uk4Y0WY9pkpfFSMPPZmhnyxk+kHzsrHQoaEfp8YG8EybxsdXzqStwrqO1SW5Ra7PI/DDHhXcGfGmRQ5Zm5uIJVP267dPtMuaHNPOtkJQ1YFa3Kp1vZ40TNiWs+ifO0TMxme3d1vhpa09W4nKGnI8TV19jGLRx0jD8vwKqlrzLM89pTghMfqDTZRErdi+2m15ALJd0S139uJsC2cX5IxEgg4ceUVi3rSIL8FexW1X5/pC5YgeD6LHg3vsWJyDBv3odWVajCII2cRqRpJ6Et3UcYpKVhlmFIXe715zzyAtWX97AsVIUl6hnD2u6ZCPpCKg5xEo6sUBylqsz58sXcrMI49l5kmncsAJJzH9lFOY94c/oMhO1E1bSJoqaiJGm5xTip3fLmeQVEZ10oWvK2+AktY0Vvdi9G6XuoiTRu/rY8eWLZTX1SH5c4o4mWezaHbC+pOlS5k8eQqHHXYihxx/KlMnT+WS839PrxfSpobbrkvIeErxYJ6y3sPyduYpm1BCpKTTvlbRJJVJMcQt5ZVMRjGH1rEzoNJi9BSAPTJFgrHudvS8opVYma02nf1hrpn3bEelQGulE9OpZE2AdFcHUsZwEAQy3T57m+vpbNmBPwmelImomwhGf7v4v1249+9QGCuA4YIgDBYEQQFOBwrQToIgTASewFIW7XnbQ4IgOO2/S4GZ5OU+/t0iiiJJtxXSCZfkrKJf6ZbVrPTkwh5Lmpaw8+uFdG7+HoBU0MVVtUtJOyWGhYYxsV7g/udEynvhqF/8hYOuexCf6GHNEIFQsWUBmQEvu0phxZb8FA5M3engdwsMtrXmbjUTqmlYsQjj3MtYu+g1AAYu3sLstxp44zAvm+skOswID7S+zPZYI702o+aqtu/4KRk2ZDK/Pe9RisLWIu0bk/OkAnGT/Tbt3WHL7/qmySJDqsf022fQFEuxNXVZTqEiK+DMTdZli/+V5bRqP2oypfb4FxdbIZRJJ17I6G+WkbrwFAC6k92kXnsboIDFNeqEXXl9YxLnHJf9W1J1jllh3YMkyDhchR0Ek3qKtJ4msAcJYE3EgYq1CDiqq3Fq4FT3PhapoJtYsRtfcxgjHseIx0lu2IAWDu91fwDPoCEYktiP1gTAJbss3quuFP42yxPI1B3kj9+e45AIedhZJaMLJm6nF8Mm4ssUvLW500QcGnrKOibtENDjMQTTYoc9bOZMvv5yEevW/8D369bz7fz5vPrgg4iJFKIJim5Vhw/pK/ScYt3tGKpaAPUE0MVc3US+1MXcuGwIsBGPIzociJ681qpe6x7TMnhtAszDZs5k1XcrWfbKKyx75RW+Wv4VDz7/EC5dIhQTsmisTC7BE8q9ELphscJmxCnm5ndSS2Shs4JhZrmnMhXYPoeX+tguSsI6wV6toHgwFXRhigKulIGu5TEa23MjmUdromf1gPVHdQ/4e1KIydxxgiQTVXMh4Qwtiidp4k6ZSH4/kj1OLpv4tDOYuy+X/OMe7X9C/j8rDNM0NeBS4GNgI/CaaZo/CIJwiyAIGdTTPYAPeH0P+Ow+wEpBENYCi7ByGP9rCgNgyI538aqdDHXkitXaL7uy337DQ8NJzz2UokMPA8AfTrNg5cEoKR1ZdLB911qSGzbQEd6N9OGXOJ+az81PRnjkcZ1mu5Xjut5NhKKwr3MwqgQtxTbFgr8EyksZcvFlrPvT8az/86loIWsxG6hUMKgdxpTty/YbzqCnwktLugPzzBMonjSNni8Wcdw5z9K+/CtcJRWsOmsSgfE/7ZT98OHLrJg5iaq25cxZfAkH7c55FF3Dy7Psn3tK1Ctx2rUyr88UkDWD5e893W+ftq1hAFo/+wCAbUYb9cEk866R+HofgeDIMVQ/8RgAV125gq6IZS+MuuNvtP7jJpLlQT79/B+0NVkhPV3L9XnIX+CDgTJ8sy3W2qgLut+3oLcrhgvE8yIihqFDZRn5ItdUYQysIuYwiPhz96qHwxjFQWJOq1uaaRh77QkOlhWsphKY6TRSyAoBmoZR0A1tT2mKNhF3GOhiYS8FAAQRJJGEniBt82ulZZOOUgdiRXnBru7SCigussZBV6hr0Uj19hCJ96CaOkLAj8um9x6U8FGhe1HclgWsqCauhLXQuux1S1fTdDVuprtpe9bazl5WpsdFIkFLsaWgmksEvClwpLQcyaEgIJSXIhng2gtQQIomsgunIMmYmobaloMgB8I2X5JHzhLwmXkWN1i1UJIBzqSOkEwRs+m+M5xwml0PA1Z+Us5r/tRl5hblSMhFp91TXc5z3jIenaqmGNJq4kmaKLpAvDjHYeaRvQgVZSBJOPK8Fl+H9fv59OZKpRVZyCh+V8rEF7MUmWY7QI7SMtx5fUFc/hDGgCqkUAinL8hOd5x2pzUeGUPBlalFArQ8qPF/Q/4tOQzTND8APthj2015fx/6I8d9Dez777iG/1MZtPNjBu38mM5dQ6kcPRnIvaJbf3tENkFb7iknePmtWWrqVF+Y+CefAbCpZzMlehAF0EyN9QtfpnJrD5lMQmDEGLY+8Dsm1EymN/k8SkRj3b3nZa/h3dFxHr0gzMKRY1ibWMS729/icPmPABiVZfRcPJeiYYOZefCB/GOEh3ikm/Nf6aLolA7w17ILmFg2AU9pFWff+NL/eM8uQ6S4N+fKrtz4KUOB9iAU1bfTVLz3h+DDxRXN++Lw9gANFDv6Q3cTvdaisE+JNXLDr/8rO5rX8fjvbqXl4FFMO+MPqHnhkbQ9Ca5ZdTPH3Ps13591HEMeeY9UdTGe6dMpK6oh8v4LrGv8lkE+d5aKQW/vwPvOYuu6kuDSBMBk6lYTze0gQ9NtYNAV3k1+EbhLcqGICp16Nwm3gD8PLewyZDq9Ml6754Es9Q8xAHhjGkoM0sU+/JVVOMrLSW7ejKD8OHtocWcaMQk45H4hqe6AQJ/LpNQRAtOwwA2SAyGtEot248kntVMUtKCXpJHA2RvGgUVvrhogp01aPRGq0HEio4d7SKOCLPejHM+IFI0jI2BKJtKPrD9hnwVt7VISFPvLocuqRxJkGdIqURdE1U4qsQrVXK5Cy9cwDUxDRQkEEJxKNveypwT6NKIDZXyAYJqIe+RvMgosHHJQFignGUwhRq33SbRDSikHOKvK6Yx1Uoz1XofyFtkqV3nWa8jnkzMUGTGZJqUlcQKqLBBxGZSU1JHs3oRo2oSUsS6SIZnaPI/bkASLOTjPG+zTokSLoFI0ClB6sp7zWPqiXRQVVWCIkuWtyRKm28kOvYOAIlAV92IaOgmvhtMmHfS19JJUIOwTcSgShf7zf1Z+VtQgAIsvsKzxTG8EyLmQTdvWZLe9v+N9Xjh3P5retYruMqGLj87bh1E33cGoYouYrdJbyajQSIrcRdx7jo8PpgiUVA1m7Mzj0W0m0YWh3Qy/6UUG7rKsqjmucTwQ+jXLbruCsy98kzefK8PTZ323yx3jotB7fN3+LSsP2Z8py7o51XcQkY8/ZvP3XxAdWsHX1xzBzlKTtoYNvH7cBD55+4GfvOe6yQdTdust2c/SeCu0VN4LKRmMIQP2SlFt9kWY8fxqJi9soLfMw6Apc370HN02sZ+7rY+iNQ2EmvsY/a/lvPnG7ciKkx2zR9AwIkBlwApFnf9iG3UdMF4Zikt2Is+Ywh3nuOjxw0PL7+eJ5Q8Tz+tU19XbgpK2zMMlowWEqgoidrI+vyrYISmURO0CKrvNanRXPclt2yjXPVS1F66QalcnJd05619x7N3lzyw07tJKBEFAcDhwjRmDMmTwXveHPOWjav3ILUukIHWOSkr9FZQGbMs0pVHaB57ewsRwrLUJramZPp+IZvcqMV0KLsUK5VSEc02fTExUPV2QwwgXK4j+nAISnC6coRJcRYXcKnpRbp+KAftQHIHaLhNPQ1vunqotz9yXMLOwW0Pqv4yIgoCkmeh9fVbhniAUNGjK5IVVCUq8haGlhGIREeaH4gKyHzXcgxCJ0eG3w4/2qDpVaNK7CPRaz7G8F7yp3IhHmxtJbt9qX1fuWqNBhc4iEZ/XMvWiHgElUERf47ZsHw5NVwnEwRXTCvIHyaDlJeR7pHI4SkkERHtZTToF0krhk3caEh1GHw1SD4IokuzrwdzWQHlExJ8SkcNRlLRJ8eBReH0WYs80TQSPh8HVo6ktHdpvrP+T8rNTGLOXWIpiYHBQdltX0BqGaV1F2W3jysYxZx1I26wEm8/2NA5x7IsroVPvCNO4bxldxBBNAUGUeOK3C7ns8eXs3rqalgMPY/07zwFwcJMff0Sj5H4Lbun5bAXVVz/KPk6rSE/b3ZJNlA3udvD6V5OZ2hOitgvKH32LriuvZduc4fhGjSbqFnjS8Q27CSOnNMZuTVEa+2mo3Q6ll9PNJ7KfDzr8wuzf/iQMWbb3moJIOse34+qJsyy16UfP0ZG0wgMbHr0L9y2PZrcP3B5Bx+CaGTu4+uQ4XWlrlQl5rMVKGzeCNU9cwtpJRQz5sh6tr4+Lb1nDQ0/o+JO5yRYqq0MtKwJgd4mAtKsVf3MYsOCxa6aESCigC2Y2ZyCXWOdwSAqSKBHPa7IDVp8FMU9P9vigy7v35Lrmc9Pjg0jDNkzTsLrlNTZi9PXtdX+AzkBuYdyTltrs6kZoaqG3fguRzVYUNmVXJItyoZfjEZy4VBjQ58Btc0QlUOkz46QdNr25kKn0lvA5fCh2HifmhLCs0urPg6v6nTQrMVod8WyoBECpqrY8CJeTaGM/oCIAXVohQEKQHRZh3h4iOJQs5YoRtxfVvPxHxnOQDYi358J6ApAs9pL0Ogri9WJHN6lEFNGAmioLJZRv5NT2iMha7h7DfTklpxt6FjYg58FVfWkRt+nIFsOF+gy8ERVnHouA026qFkhYRXcZcTgtheEh52E4VasiO+NRuNKg7MG9rggyRWmZ2l4Z0zRxCg5kA9yRNM64imqoJJNROnZuJhYLZ8fEGY4T37iBaP02/pvys1MY5hYrv5DvYay/wGJx1fMmf427EsEwUVyWFafJIvHaEhxPvcaa+28iMrqOJ84uwSgLsTq+mV1yH1v3258tU6biVUV8SRjlGwKA7wcLfZUOWC/ZajtJ7bSt2UePEdFsMrNUTyfmkm8RdJPAdVcSqwiA28Vxj77LyENOoro+wkv/8LNfuJRgaQ3Fv/wl+0zaa8QvK85tTdzwfM5aW/D4Vdm/t9WIpOXCBjwZ8TpyFqdTg8qt3T96jvEzTwIsOHK+DAwMBE3ntTs0XrtDI9FnKYynDkhy49kSX7p38sj6x/Ftb+G413ZSmpSzkzq/T4JcFGTVJEtpn7KifyT1/SG9iAYYNrGeqojZSm1JkBARSMgGeXOejmoPkiMXUnKaEj72HmIKeIoochfjyaN7MKJR0k2FgMBwOMyjj1oK0+MJonld4JAL4t+QQ0mJgpgNw3y/aTOvrvqS3pC1b6YfxvSjjmL6vNOYcvjhbFhn9Uj3pkUcupClCtFsKhBdEkiZKrpo8uvrr2fhewsZ1G7iDeeev6GqFMXAHzPYWSYQ9ct8unI5U8ZPYNLxx7H/8SewdNESwnuJfQRtlFTULaCJYGoqyXik3347ilUSpdbzEm1Pz9S0fvsJpmXFZ0QUREpiIsXdKqamUdabey89gRIQRVL19ZimScqd9x6ohb+teHLvrkd2s71hJ7NmzWLitGmMO/F4LvnLXxDDfWz6+jsu+90fMEstLyPe141cmvN4DFmi09aH+XNEbrPmgpmHnIqXWudMaXZOxjStcfLknr0aiyCpBmLMGkfB5cKoLMUQIaElkAQJhyHg61P73ZOgG+h76Z/+n5SfncLoqfaxcKJAX3HOepk35w8AfDk2t5q8tt7KDei2BWdWlHDeOb1ossDwomFMU2t5pu9kqnQf4+56hKoXns0eW1Q9GNddNyFMmwBAS6nEC78dTu91vwRgRNCCwf7QsxFdgHvv/g5/wLJkMt3ZVsc2cqT5AMLgOkKqgwd/OZmVn79MONKO2txMQ8cWetwGZwz6kE+de7cGM1JmeKnYmis2q+7O3eewZgNF64/9h0L3HaCC/pZk+QgvVCRoD1iTqfiaK+l76a7s96vbVhd0hqu2O+0dsN88frOugsN2FfHUQzr7fLSF3hIXHekevp9gnSfhyp2/Zcd6ZnxseUJSMk34rsvYfkSOgeb61wycGsiChCIpBQt0Uk+iGirlZQMRqnKJ0QFSGSk0dBHcY8fiSZg4+/beMzne0YrQYS0SgpAjhhP2CMfkKwxvewRHNGlN/D1Cfu6aOsRhg3HaaCmATZu28sUX3+A0c+M1b948Pvz6Y95Y/Aaff/Q2g8ZbuSJdT+My89q42uGelnKZsF9ETRXig73xvI6F3TFccQ1X0mBIq4kvohHy+3nroUf4+r23eOq227jguuvIz4J0Biw+L8EUcNTW4q6ozib/DDWNtocyqBGLcQdCOEeORPTY3RZL9kIvDPhLcwAU3dSzVDIpNWHVZgCmy4nhVoh6RYRkGhMTpTQHbuj2mUQDlmcW9Un4QrnnnNKSXHHrrVx++eWs/G4ly99/l9+ceSZpl4PJY8bwyL33US+HSTsEZFGixZnXrbCrk1DMpmPJgztnDI+4lNsWMeK0B0F0ZmDSIGoGpHLepYhAr5gk4rPDVoJGA12YoogsypYBIcmIPp/V1wSySsdRU4OvMr+C4T8vPyu2WoCKN1/hLGeQElfu5V13zqmUAdMqp2W3TS2bRKosiFJkWaluTWRRzT00/a0H75jJbFr8Acptj5CYOAJZjSKk1WxBUJeU4ITw7VxUdxFT3eAZOpzpb6/nxRkNHHTipbhFF3FgxEHHE/t6O6tPPZYJ/3gFV1EJdf462oDx1PH0RwORN24iKZgc/rWONDtMvNpSdB2xDiq6+7hskZfqqiQM+fF7bkm0FXweYARJ7LGPidlPaUTd8PThInPWGgxpgx86f2AGswr2ad8SA9zsXraIAYefy8cb3uGJZQ9wdQUMabM4ufInWlu0lepAgDGPf0Zs7W4SuxoxTJ2mCdW8MKuae6rLCZTWoEptlPhyaKEiTcle85IxAo93PEzx1GIe/rjwPgxMqCi1Fuhnrfoan6ZatA9fgaxpaAc+Yu389mV4k43omkrqCwtSasoinPAAVI2D1S/BGiuM6FRTpPd/IDtWoijhqKwqyA0AXHPNNWzfvp0JEyZw0JTJVAaLeOPjj0kLcNJJJ3PzzTfz1ltv8dBDD/He+29Tv7uRY047i8+//JIbb7yBZCzOqmWruP7Pf87+ZnFCIpRw4x40iGSsjy8+f4O//vpJAsEAG9f9wMlHHMH4Aw7g4cceIxGL8ebrr1NSYVnJny9bxr3PPENfPMZdV17F0QcfjCEIVgjUFLKggskj90Hw+zAjUUYPG0YymcTRkwBFoXT6NH550sl8+s03lFVX8MYbb+Nr6+KIc89n3KhRLPvhB84466x+/TD+fv99uAcNZtCgQZx22ml8+MEHSLLAi7db/TBe/vxj7nzsCRSHgtvn5s0P5lOdZ1w4TRkD0HWd62+7jYXffINkmlzwi19w2ZgxfPbRR1x/0y2kTZ3p02fw93vvxVRUbrn5L3z82SJcLg+HH344V/7pEnZ3d1JbW4ukGbhUqx+GWlnGwvc/4PEr/8gbTzzObQ/ew862NrbtaqS5aTd3XX01K7du4eOFn1BVUcH7n3ySvbZMt8H8kFRl0gmGiTMvlOZJWCi5qAuk4mJ8niA+SUALaFbHPRWG9DpBSyKJCrtKdRAERNGkXDbwAnplCe1qDK8jhSzqlFL4zv0n5WfnYXxx3nF0TDyQjq3rsts8VikIzkXLs9sGV49l8KcfU3ya1Zcg1d1Jx6WX848Pb+XNtoUkXFZRji4LbLzjBlqvuTZ7rLMnzvOvlXPMRjeBBPgaOxixGy5/03InF4yIcPdZHoKHHMrqwwcR3NCEplqWreaUSA+tQRBFAqu30zF9GOtPsJPU3kqq/FbSeHL5JDxxneGLtjEs9tMvkNPhLvi8u/GHfvvsLekd8BbjP/1UnHbTlmLnj1eU7yNb1zXto0Yee9ykrkeid0CIiZffXBC7zsTpt29aBliFe5qhIYejPFX8O6rEEIO1Ihw6xPJi2/m5himRUl66V+fhW3OwyoZyK4FqiNCqddOmh3PHyjKiw4GpG5nmdrnvBBFZs2LPuiwgKHtHSWW8LVMSs4pVLi3JhlsycueddzJ06FDWrFnDoQcewLbGRpa8/DKrVqzI9sOYO3cuZUUBnrjtLn5/w5+55urLqaur48Y//YmTjziCpe+8WdAPY9qsOUw//Ej2Hb0PPTusGPb6Hzbw8P33sfrdd/nXggVs2ryJ5cuXc+4Jx/PAffeg2UmCxt27WfLKKzz+yuP8/pZbSKZSGA4RSbCI9vJluzeGLsIbn33C+NH74LT5yeLxBJPGjOG7t9/m4NlzuPnmmzE0zep4p6p8tfizfv0wNE3jkWefyf52MBhk3fr1XPqL87P9MO5/+HEWzn+TJR+9x7v3PkhpU8SysENF1kG29/bM/PnUt7Sw8tNPWfHGmxz3i3kkkgl++7sreOnue1jz+pvokRgPP/A3urfV8/FHn7Lqs0+y/TAqywZz1VV/Ys6cORx13HG5fhi9EZKoaBgIdt/srTsb+PipZ7L9MA7af39WvPUWisfFgg9zQFAh0y8lmQv1mbE4ZiJBIlaY55FMAQWJdq2HtlQXcjyN0pXXsS+RpKVEpKtIpMxVSokUwBPVsucItEWpbkrgau5CaNt7P/v/lPzsFEamSK0vGc5uq73Ciul3p3PbnlzxCJfcMwvN5g0yBKs69TcfGBzxYQczTvotsxevoW7UVEYEh1HqKWPLAMth80puXNt3o+2wKAY+3rdwlZo94wzmnXMbC1+7mymvW4u3y8ZmN1c7Ofu0Nr4pshZD94zpjDvRCmU1RnYS9cnsmjmURjlMV8K6tu/aV//kPZeVD8I1eVL2s1mWx8IqwPZZw/qFnwCMrh7m/fJVarZbE2DAoP7g26N+V0Jd8WuEy6ywgyI7EXQDOa0T3NXDv9Y9X9BLva7YcoVCShFgcUkpkpOqzV3sPP+XNG9fy6deK+eTyENJtUVyysO9M6coADoHh3jqCAlRUXAgURkWrBag578P579Pz5F/p+uge+HEl0nPeiR7nHDmE0RnP0x61iOkZz2CcMK/EM993/IuACaelf2NxIkvACANHtiveO3HZNFXX/PZN98w49RTmTp9Bps2bWLrVgut8+Bfb+W+p5/B5w9y4W+tkGgmdJf/LObNm8eX77/Ft/Pns/y11ymyk9uTJ09iUE0dTkVhSG0thxwyG4DRw4fTsGsX6bSlmE8+4giSPgcHDZrI4NpaNtfXIzqcyA4nisOJaTPOahLUaQHWbd/GTff/jSefey57DaIocorNYHvWkUfz1VdfWQu7CacccQQGJps3F/bDOO03v2TZ2pxRdsYZZ1jbZ81m+dq1gNUP44ILf8Ur/3oD3Ua66bpKg9xLU6lAyr6HRcuW8atfXYhoF9oFE0k2btzAoAEDGG5X2p9+zNF8u2wFQZ8Pl6Lwu6uu5c0338Tj8dDbtINTDjmYjRs3csppp/L56hXMOussjLYuimLgQCLihrhb5NBjj0KWZcba/TDmzD4IgGGjh1Hf2JC9HwvKDSmzf04hk5PqKpZpK5VJOEyUpM7AdpNQR4JoXydmt5XLyzA8uAUnXtmD0tSBq7mLQE8Kp2G9D5mKdKcKPuPHSUb/E/KzUxhgTfrBQ3IL6NVdliU0eEcOIjdLGcP1LyaJfWNZwt7qAYz8bhWmJCFLMt+t/5S/PXgWLe07kG6/FsezD3DCJ+vYZ9NG4h5rWDf0bqG1CCbW5kJdAL7XPmHQxfczrTOIw9Ylus07Okyo4I3A1cxwWbFq6bk3aL32ejRFwusOkqwt4cY5HewqBcVu61r0EyyyAB2Vbi48MVc0NfHux3NjYcKAlbv2mvTOV6pxBZYX9U96d5eoXDdyKbtLrUlSH2ko+H6fz3aAIHDatTKnXSvTKljAgoDL8lrSARe7zjqYlgmWh2IYOlPWWEVRQSWHpS8rKuwKuHSf3KJdWt/DbS/oSIk0mpa2rLa8mLpbE/GmRZJaYSCuuacByZ4CHUFQu7vobWlkb2I4JeJOaOuoZ6+Mg3uRpGhw5QUX8O38+Xz9zZfZfhgAzS2tiKJIc9NO2us3AqDayd/8nA9YdSQZEQJ+Im6QXQo9chpVFhBFEZ9dqOcZNBhBceGxUzGqDElRQ+/oQBet/IsuQWuxQFtIQMgs1CK0rt/Mub+/nGfuuJNQ0Y/AixOxAuoMbyCAJ9CfsNGFXFBTkX+MIAh0hCSrH8bvfkdD085sPwyAql6R0oiAMy9iriZi2QI/XxKLqTevgVdmzDL9MI48fHa2HwbJNKTSVFdX86sLf8XbTz2LLMv8sMMCwJiGjmfAILyKj4DNTp3ph6F4rcS9Ly1iqDnDz7CT5E53f+8+027ZVVRCcaiqYBxkU7Cepz0emd7jRZ0JXF1RVEPNMg1nCxqzFezmf71w72enMFIyvFm+k145l4i6cEF/iu86l7WAZUIUuprm3U8eQdB1NvVsQV29liMf+450Wwv3Lr6Zh7+6mxePGc2zJ4zGYb8EY/Y5iBLDQ/HmwhzC6i1fkmrahWeIhaneMIAsF05821b0a2+HxiYcY0fj6UsTTArs+/16hp12HtUxhQU95zJb3IeAuwgpFGJo2aifvGclkuTMrbl8wJMv/zH7d0OliBhPZV/SfAmUVLH9YMsj8KShKtzfst43VcaHG45mXK+1uNcGBmAKAl9ebNGB1AUGYpomL9xjoaTiYcsr+mRAmNdnCizZB66rXkrHSCuBWemtJNhiKYx8lJQyZAjLjrWuxRRAHWqhsbYOcpIszVWEG6ZBt9ekx5c3Sf1BpOIQ6T2swbKWBLJdte1NiQhmbrLvKb5AKW5/yCK6+wl9kemHAXDocUfz/LvvEE0kcDo92X4Ymqbx6yuv4B9338WoIUN4+lGrV3wgGCASjxMJ7mFFOuRsgVgPcQwBZEQU0UHaRkdpdgYtkuxF1dPZxXTBBwsp6jXYsWsXO3da/TA0CXymE6+pkLBPlejq4+RLLuGWP/yB/caPx9ueQz4ZhsFbdvz+jQUfcMABB9Bn8/CZmkYyHe/XD+PFJ55i+oScR/rqqxYB5RvffM208eMp69HZsWsX+x1yCNde8XtKQyE29LUiSQ4caR1XygDZUhhz9tuP51/4Fw6b7qO7t5fhI4azs3En23daTchefucdZuw3LdsP49hDD8v2w/CWVPDlmnWoqko6GaeloYGucJiqaovk3zANxK4wZm8f6b4wki8HDzO9Fpx6TzF7bUSllps3KbuPRqZ+xLujDcfWXTjTpl3FbiWwpXxvXpYwbRrzhJbArK1EKy0qOJdeZc0Nk/8+l9TPLunt1OCEb016GrdQPNJqOVq22a4hGO3LVno/2PcWS/9SxSeHWpBVNdzD+CssJNSw0DDKi0exG6j0VnHZ+yJCuANhuzV53ZIL6YAZmD4Pjr4421o30nF4JZPcFmX1sJPOJTx6HV8M7uKpa2VWnr0ya2m0JNtQXbBe3sUtx23hSek83F0xTn94Jtcdex8VrSm6H3mE9iFFlBx8CBdf7uLqwSmO/Il7DnSn2P/5NdnP07/JUbGXhi1a7yxRXp7ILg+DbruLtYvfYPwNr/QregNo3b2F+Dvvos2ZwaBR++A/7HB6ip2oowSuvGAlZ4+H0wUBp23wD5ItxVX1m0txffYJR8oTmLVyf/rCFmVIa7SV5fsXM21hjJikZ3ljG5rWI2yxQnyCCbMWWIip4Q0p+iqVbGWtQ3RQUlII7e12pOjSuxldMZpERRx9244ss2ivlKavVKCm09qgSHt3+RORHoTOnr1+ly/5/TCOmD2beUcexayzz0JQFPw+f7YfxoEHHsSBRx3B1INnMWPOHOb+8pcceewJ3PXAA8yefRQ3Xn8jYC20i75chGkYyJrJ/X++gWASTF3HkzRxJK1KZ9NeXB0dPZBKkxRz/TAOPOMMIrEYD910k9UPI6kjxeIgiBiqVTH/+Msvs33XLu54/HHueNzyQJ+Z/wyeyiI8Xg/L16/jriefpKysjNffeQd30J2lFTESCTzBkoJ+GBOHDePiX5yXHZeenh7GjRuHJAm8cJvVOea6++5j665GBFFm1uTJHDBgZGFxHGkU4PyTTmJr0y6mHHoYogAXnDiXS6dO4sk77uCsP/4RXdMYP2FfTr34HMLbW5n3+z+gmVZe7v7776dTSbFgyedcccMNOJ1OSKW4/YorqAwUsRXLWxG6wta7JYp0+ExKbH2ZjvZhul0kFMhva+VI2E2ORC377nXLKdxeKHYUvkO6CEgCkmoiuj1E4zGcts5IOwQaAikCQQ9F7hAulw8MGY1wNnme7O7AB0heH46f6Hvzn5CfncKQzpuH/s9XqXVV9fuu9Jhcw7+jqw9lqjEQU9MQFCVbG2CGArinTaOhdQcK0BnvRMQq3BNLStC7ulDdDk4+cCXnmQGOBopnHMiStk94q7yDj4CKKTMJjJ9ExQ8bGLl8OB+Hr+aY39yNpDgZeeBxNC+aREVC5a4FGl9Wt9EQ/4E/39+Nq2Y7icED2Fwn4RcjVKVNTlTHUGn8dNK724zQHZSy9CA1A0YTa+giFXDhiiTZNWck+5hGf/qKtkakOacyHotuoTu2lZkcUrBPZ7wDDxZp4CBgiX83T0Ve5G+/1jlAhvhZYwv23x1vZSCV7LciRufDi4nII0l9vojO/Uew8LfD+U1VOZHzj+f8GS+ytDTX96S8U2P6Fps51M4z9xQr1Lak6VMjWcCvbuqYrR2Wy19jQRD9KRFP0kN3pB09HMaXV5vn6UujxKyAnADE1VjBwpARI5VCBHaWCYz4H3IYmX4Yvds2oSQ1Ljn7bPRB1fjsyt2bbrqJlJZCMzVSbpOPVn3C4OBg+iJdLHv+JcRgAOcA697PO+88UtFeDE3FXVRKcmcjZl+E/U44ikiqDxfwxT9ewDnMgmrPnjGTQ2Yfim5Q0A+j4F5Mw6p9EAQcNtjhmosu4pqLLsruE64rpmhnN2aHAKbJPVddDUA66CZYVkaitZnFL74C8QSKTW9e0A/jhx+QXDk68Kuuuoq77rqL3k3rrbaxWP0wAOJDq/Bst3NUhmFZ46aJy0ZJybLMTXf8mesVCSHcR1B1IIsOZk+ZwrLXX7cgriOGIHX3YRTrfPLefHo9AkNKhwPQsWsLt11zNcUPPYaRTpPaYvVQ0UqLOGD6NA445gho7+amW/6Cs7Sc9lYrVNWxfDli2sDRkeTOG2/BUZxDVpouJ6hxPK6cd1uddINo4tyD/FIyyDab8qRAr6zOKkanKTHYLEEJhJAVJ32bf0CTBSLVHsplcGN1joz6ZcwyD6IgUsp/T352IakHOy2qj768KuaUz3rhhcXLstuGNKYYeuE9JL+32GoztAb/mBJlQXFjtjhHM1W2dW+hJdHKaReEOftKCdHl4pGuozheteoEvN4gv/7I4MZlVhz+o3v/wNJzj8exYh11n21k+GMLMVLW78X7utm56guEHbsYfP9bHPDCWuYutEI0Jd4yBk08iBMXrueQIy/G09bLYX/9lCE7foST2xbPiFEsuDfH7vrQlE5QNZxdUeS0hrLih72GpHxiLo4dUhXKDuxPDTIqZIXDhpdYyc7J30W4d761UDg1GPnhJgRB4NwbfJx2rUyyyErub3j6fgC2RHfw8QRomVjLnb9/l4EVIzjs/VaevaWXRDiHCMmP6/ccux/eFNS2WGHF2rx+RoYkko5HSec1iZKTaeS+BHSF8fUWVlzLaR2naikLXRKQgkV7HUOX2w9uF+XS3tTJ3iVTfwCF7KkA0fZmEjsbcKdMgjEze50A6T1qKIzuMLR20tLVQJ9mAQG8RWWIAT+mYIWF0klru2EapPV0ltk15oTkkCpaS3O2YdrtIF1dilpVWBfRUCFkIaDRuOVNCbpR0GrCYRPsGd09EE+gyqC6+jMNmJgktP7vZUZZZPkKRTFbdwEgCSJydRVSbVUBuMAZjhOKiwQSArEBJRh5JMCCCUIsjtFhvS+evjTlkdyxgbSEN219zieB1ASDnWUQcVqLeV+sm+buBgJ9uX1MhzVueksrZh48PB5QMAEzr8bCiMUwI1HicQskEneC6sgtsboI8XQURRdx2a12zVQaoa0TdctWehu3IQsyiqhYeYtMrY9p4o5pqD3dpHv/Zy/3f1N+dgrj0gXWQ4/kUQwHZ1j05tGOHBLnhbVWXFmwXcBM0u6CTwwObwgy+bhfMmj+fAYMn8yQwGAqfFWc+5XMUStNnMiUP/ke+nLL2vI9alGVF6+zwigTE2Xs2yyyvstCSEllZVkkUdPqr6i69F7WfDGfsAeKdnRS3Wlw5dWlNO1bTndLA/+6/1es3/AFHXZDpLXta37ynoOGk6s5Ivt5rJ4ramooh6oeYa+xezHv9XDE0wxOF/Xbp1PtIVnmJ2xagAG5rRupJ7cArG5dBcCdC4LcO9/LcKcVLlLGjaH+0FFM/+2fufDppYysGMPyGRNo/H4p8TfeASDSl1MYO+tcvDTLuh5x0Tf9ruP8yyTSRV4U0YEiKQWhpYSWxDB0fI5CT0yqrspyhAE4Q6X4AnsvLks7ReJOcLWG9/r93sRfXYduMwELe4QSvIYDb1rEkwKPXYWt2PBntWgPenYzhYZOUUsUv12Ap6VTBN0hDDvHllnTdSzvIWnnNrwp0Ds6qQsNAqyeE7MOPYZDZx7GITMPY9qZp3PK5X9Ak6DKW4UhWo2M8lu3dizPwc0z/UMEnzWWomHVSewpWnkoW8PU0NBAqV09nUngZuvdDIOAKmevbcLkyUycuT9T9pvJlP1nctplFoLMoRoYpg6GQW93C5qmFiTStdbCPKEjL8Sq6mo2WSxKMnH7Ubg6+hjUZhKSLP/UF9Eo6kkX9M1OuR0kPNbczIeeywmrA2MyrxNkxEavizY1iCdVWB0uGaCoEGnbhdpggStUU8vSs8iCBRSQ4ikqmmJZGvbMsSV9JiWx/+6S/bNTGBkZUJZrOnTNZAvqWF47PLtt/1IL2ZQhsBM9HkrvvdPatr2R79P1XNfxNO16GHHe8TjOOZWjvk5x1mIDU1XZWQbr0w0AaAEPH00SWD7CesE9khtJdjCi2MppLHnwTCSvtUjU+a1QxNhpR1H/0o00jS2nNxVm5pA5BLzFRHfuYOKTX9G+9lvcI0Yy/7GT8c/+cVJAgPYdP9D6q99kPx/weq6taW2fjGCae/Uw8ulTAJZ/9kK/fVrqvJx7YYL2EdaCsGGARTmekUw3wOo1zdRt7aW+fg0Ak+97Gu+JxxFp3cWqP19G5OOF+MMp9FSKdKV1TEkgFzask8s5QZhg/VZ3YQMegGs+86OEY2jp/gAGRVIQBZG+kEJfKGfpN4m9iHa8ua0IEuEOelp/BCWVTOLq7f/bPyVtbTuQUhopB8T1PaxtrwczFCCuxbOFjVEXNNU4CRRXFuzqqRmIPGRQwbZUJEx3SwNSylpVXHatjKeqFn9Fbba5FoA3opLeaiWjD5s5k6Xvv8uXr7/Ml/Nf4c2Fr/KPxx9EF8G5YzdOhzu7mHfntQ+JuC3obbLDZq2trgBRtOjN9wLccReXZxFG+aLlF9TYkrRPeNjMmaxauZyVr81n+evzWbViOa898CBgeY7dQZHuIomqHlBMkVRVDp0lO5wIecnqnb48KhTTyPbDkB0KPnfGS7S9jlgUfcQgBI8bWXQQzaM3dxsSbo+1fz7c2RWxPAtXHqtwcXkdYiCAouSOl/z+AsYC2bRQb5nfcvqCiMMGI8gyDsmBaqhZJZMyClkHdElAFQ3+m/KzUxh/PV3k8l9JxPy5FWduo4VCqJ+Qs7wzbSAFe0ERFIV36tpZvK/Ad4Fu1EVLOPuPC0nV13OD+RaP+HJWmCEKJJ+9k31vvg8AfdxIhh57OunfnwvA921r6FUj2djvoncexrRjnBmSOimpcUhkAL6USHGPxtyLXyP43XbKPFbSeGrFVEqcIa4dfwXjSn+aId7hKAyH7E7msY/aFuNeUVK+QrhkibM/fHKKZx+WjniCcU4LwbTv4Wcw4Lbbs9QJAwMDC/bPWGS333MC5Zfew8ZXnqT43W8wkkmq7ryDgcMnUXTAwRgOCdWfu279h834FuUaRf393v0568pcKGTkurB9HwYxSSMu5e5HkhwIkkQ8HUXPCxGUtCeRPV5iHpG0V0HW+pPFZcSpFRIV/p+IL2Y9U6eaoWPPSbcjxS4lahfP2YWABlS1pIg2NRTsa6TTmGmVngFBdpdZ9+yWXTjyck6ZmoU+RadXzoWk9iZiPIUoSIiCSG2nSSBh3R9YCeyMFOdRRPkVP6LsQLbp3LtbG7JxedUoDPMBRLZvpq+9qd92JVBY/CmVlhL1ivR6oddjPauMmOmcJtJFKHeVUuQIgiCgGzp9Royoy85p1dXQ5dbRJGgqFbLklgBOpwenTbOhqkmMXssQilYXAVaDJVHVSaspUlqSciV3rBGNQqfNG5V33UbmceYx8CY62whrfSTEnNcqdffhTuY4zOIKOCorkYbZrLO6DrEEhqaR0BIIRUHUkgDd5W6wvdL0kBoaKkV2l0m0h/67Pb1/dgpjnxH7M3G7Sbh7d3bbhAWWxZ3+KhfquDP2Jh+eMRS53FImRiJB5e//RteYGqaedimj/MPwxA0q3eX8ZeUgLl6SsypkUWL8FhWaW+jxwo72zQy/5WUmv2M1CRoyZn+Ufcfy8VSZBVMFrn/VyBKztcateom1KxbQfe6vCXbEMW3I7e54K1E7ht3QW8/ONV+xdf+ZLH0zV4y2N/E7Czmgirv7m4QZlFa+OIqK0b96ne4J1qJf7a3ut0/Tmq9oPv8CWld/DYC4fC3BfyygZ5il2JYWtRfsPyxoTZS5n1r3MaZ0DIqkUDJoFNf4PqJZ7GPL94sRVZ2+npxi29nbkP37m1ECv3lP4/rv+/OhOF1efLWD8NbkEubhgMj2Eo3KqEyoMw+qmzbok1UcaYMBzWkEQcC1x4KWEfX/Bf7dkbf47dFympK0Ql3Si0t2ZVH6rriGZICkFlqRqdbd6E3NaKaeLebSTaOgPsNMW4u22dqO0dbRr6DMUZcbD8HhwCHKhWFI0yQ9oLBxU0biA8ugN4KYUlGqLbh5cS6imy26yxe3KuAy+i9uCbPQat4qd1GGH0UFXcrVIwEk8qjDHaphhZ26w+yosOpLSntNq3e8E9p7dqGoJrJuhdP8LbkcZVepQrzEUhj5z0E1NRqrZXwllQj1u3CoFvAjsTvH3tyv8ZUtol2TkerL5RSEWJJAHCSt8GEbAqR8Cu11ftTyIlqiLTRHrHOkElHEplZUp4jk8+Msr8BbXk1N+VDcNn19e7SFMvwMUaoZpBR6n/9p+bcoDEEQjhQEYbMgCNsEQbhmL987BUF41f7+W0EQBuV9d629fbMgCEfseey/W0655SvO/dygysgtovUha3KNSeQsi+MOvJDx512OZMdqMU2Gtpqc9HYH0tpNbB+g8MmvJtDtA3lzA6IN+QSLTjty5Y3suPXPhGJQ57IesvsTK6le8auLKHvoPg4bdhSjKq2q4syiMXT8QUh3Xc/oaUcBsOK0sTx4gaW0PIo3W8zTHmvLFf38D4V7ES1W8Dmf4hmgbcqgvXoY3eEWPrz8NIrXWGGa7zu/77dPe8xSCJl+GNtWfob7o6UUb7W2l88sDJftDDcAubacaS2FYeokV69h7n0rSdc3kJ5mIatCWs7DqHHnwlP7bTLxfLqc0QutUOLqIQIP3jKBLp/VkcyIRDCjuXv2C25q5FJSWjJrFQNEAg7cKTObiA17TDqFwrHKSCak0d0/yvKjkp/0TezRyc+MJ6A3Qo9fZHe1s2AfZY98kktyIosyZU1RSrrsxLieIpLKLYqZY7y6jN904s4LlagS7FZz1fG6IpHSLWs6I5oEbl8RgqIg+LwkinMJ+95oDlUQ7ssYAALY+ZO9tQ0VS0uQ/f3JKpVw4TgMaTVJdXfgTtseja7TW+Ii4ZFwO3LXEC3zWddrGozwDsYlORESKQQTyvqgPGzij+WebX6Rph6PodlAAkmUEd2WcRdqiVLXomer4oVgAFdVTcGCn1H6UlVlYfGh/b9TyD2rDK25w8jtZ8oSCOCMpCnfFaUoLlIagUobop55bp6KGnwlFXQ3badvxxZiG38gEbOeb227gbe1l9TORhJNO/uN6X9S/j8rDEEQJODvwFHAaOAMQRBG77HbBUCPaZrDgL8Bd9nHjsbqAT4GOBJ41P69/3WJmbnJsv7KYwFwbM9ZFmPWhBl8w7MYMWsBERwOGs48ACGZYt2nrxIrdrFoWBLNo/DGkE4Wjza5+nyJpw8XUQUD0eFgkMdK8JoHTi049z//9Sf+/uC5SK9/wLD3LJqEDCJC9bmoH1+Gs8RSEuXdBtM7rRhqyF1C9bgZDP1kIbNP+gNFdiX0oOCPN/EBcFZU8fGVM7Of3z6qqOD7r5TGvVrQvrTAsStyk6d0LyipqUedx/AN6xh7hEX9UBMoZNPcd4c1iR87I8izh4rEyq0VtzVmeVJbw1uJyTpCIkldfYwaqYR9sazYlJ57Rnt2YsuXEUIF5Z99T0kU9FQSraODdGfOs5HCUZzNnf2sxVjAkQ3JJZ1ilpZ+b+Kyw4euYEnBwvFTkl/bkjk+Ixl6c0WQ8dpotExcu1/vDIA97t9bVIaUh8JS7XtL+Z0kPTJGHscRxUWUteQWUNPQMYr86EX+bGhFlB2om7aQMNOkkjHa5Nz+VV15TLc2m69u6pDOtJbtf+/bpC56pP6DmQnrJfIc2vzaC0mQKJYDeIOloObeybSRxiW7EQ3Qtu9AS8TpKS70is28/fPHvixsEohY59BEk27RvjfTRDBN0r09mEPraPGpNOmdBc83k+iOdRd6ypn3mL1wj2WU1Y5KgdYqJ4bbaT0900TtaEcScnxkmXkf372LrrZG/EkBd9JA1M1+b7yBiW7+35/DmAZsM01zh2maaeAV4IQ99jkByJDTzAcOEayncgLwimmaKdM064Ft9u/9r0nS6+CjSQKxYG4Cn5OYCNhUxLa8svghUitWgc21Izgc3FS3EoDhRcOZUC9w/3MiFb0Cx1z+ALN+81fcioe1gwUkxYkoyVBVTn0FrP7uw4JrOGqtxFmfqlmUlHUC6/XYueoLjHMvY8XC5wEYtGANM97cwhuHeWkrEYmR4oHWl/k+uiW76K7tXPuT9+zzF/Orcx/MflbGF+Y8Tv7aRBH6v/hinqWb8joYNXByv312dWznxc/uoz1s9YVQ9siXLFvyCgBlBx1K39H7MWGA9Xi93iJMQWDSyRcz6ttvUS6y8jst0Wai/7KqgqOpXNxjW5nO+rrcFOr99dzs397trZzxRabwzokjL2YNkNATmKaJR84tsABVfRIpGxHjL63CoZooPxJ5Uj0KsSIXnvbIXokaMyJJEhMmTGD8+PEceMppLF1neWWNu3fjdruZMGECEyZM4OCjT+SVdxfgjahMHz2dfffdlxlzDufw886jvrOduXPnMmHCBIYNG0bF2H2ZfsLxTD/lFD7f8j07q2Q00SRYXIWh2PVBtloJuwy6nGl0Oxdx2C/PZ4VNb5NZ2EW/n6KyWopKa7ILuJBW2dXUzNvvvI+iweC+vfcFyRAWZmp2kg6rXemeMjDmZtEbH7Jhw4aC7RkOprTH+l+VCqlPNHT0tnaMljaSeQZDKFrYWVHV0wRCluf+3FtvMeXY45h68klMmTuX9z7/HAmRG2+8kU8//RRd17IGkWBAke1Epry2V+bwUh/bhT+sUtyjFTzftN+6NleqcKHOhIkTeWwEmWZWGXRhdY+AvyuJFM8Lw8kSMTWOZnv0metSNKvhkuTzI9geUAbpF/bbOS5RxvkjhaX/Kfl3FO7VAPkt25qA6T+2j2mamiAIvUCJvX3ZHsfW7O0kgiD8Gvg1QF1ePPb/qbhiKkc1FlMt58JPPdfc2G+/cbNPJV7SmIVDmprGa8umkeRLJMnB9l1rUTZsoCPcjHPhx0jeADc/YWUJxUsMYkaSDeHvGRqDYtdQOv2rszA5b0klWkWY0WdczJIiCVdRCaPs5FmdUonSDvKY2Wy+YSi+D5aipMJw1okEBg4juvEHjjvnWZqvSVJ16OksPWsS40f9dNI70rKTDccelS1uO/HNNjKvcNeIckq2tKObOtIer0PEL3LatTJzvzY44wuVL1+6h4POuqpgn93LPmf61f+k4+GBVB1WR326FcMP154vcf4nBuOGWbXzp/zmDQA2FX/IqBlHMfLp5/i2fQWeiiBfff4Mzp2NDAU0XUMSZECjxJ17RiOHT8c48nh40oLcJl97iyAWLNgUYLCd7tAMFbO6vADDr5RXkiiOQzyJLrnw9VgLkdkXQRhcTSwZx9tsKby4tvfCPd3U0dNJSPOTHobb7WbNmjUAvPjmC/z5jvt576V/EjPTWRZbgOTuZsxolLhtjX7++edILpNb/nIzDz39HG+99RYAixcv5u477+SN1/4Fu1oRvG7Mlhgpo5NeI41TMPFWVCDZnEZVKRua605DPI1ogjNlLU7ZGgg1TddOGynntOCfgmkptdfe/4DTjz4GM5mkPQhByUeXlKC8JYUsy6T1lNViavAA6OnF1dmNUxNhD3tDiiR4f8EHSG4vo0fnAg6dLpXKBATDdqW0V0bQ08iA5hBx5NXbuAMl6G1hAIRUmnBQRtElPHEdl+Qi2dRMU2srdz/5JF+//RbFgwfTu207nd3ddLjS3HzLzYiCyLaebRQ5/Xix2rpmbAKHDXDQU0mGdJqAhuh2EC5xEei0notbdqOVFiOECzsrZqhT3EJuAXfXDEBv2Jld6DNKxhTsvuMqOCoqEcNhBFtTK24fyQFVyL1RHF4/DWI3TlOlNGG1BXbhwuH2QiRq90k3f6TF139G/q9Jepum+aRpmlNM05xSVlb2Px/wI2IIVnvMcHv/tqRrf5/rXDfp8LPZ50+35PoQmybJxV8CsLlnczaXoBkau95/g/pP384eq+ppwvdczqQTf0Vx1Krm7Lj7d6z7y6kA/O2gXq47C3xVA/hyuMrtxoLsImRUlNBz8Vw848cz85Tf0XDt6Sz83TTOe7mTwO5eQm4LqTStchoVtSM4+8aX2HdcYfX1niIKIoG8+G7PNsvqWzFcoGRLO6uGCdmQRr4EBDfXdu9HndcKrZXJRf32GVtq5RuG2sns4b/4Ddpjf+XOBUGU8eOYeupvC/aPJa2Jd863vyN9xZ/5/vkHGfbHJwl98T2e6dMZWDUK37sv8MMzl6GW5GLg2qq1eF/M0UtXhK3/B7VDcXWuz7FuGHT1NNMdbuX8j87n7W1vo0gKV3zxR97Y/SGq28HFm29hQecXAPx+8WW8F16CKcDFm2/h49bFANljM39/vPk9AnHQ/IVU8T8lZkuYYn8Al6DgMQpX1O6AwM5SIBTI9sSWFRcTJ+xLY0NhQyxTEix6ipALNW6Zx27JhTttFR5uFtr5y19vYerUqYyfOZNf/+7SguTxy++9x/RTTmHK3LmsWLcOMZZgxZLlzD7iBGYfdwozTj2VSCzGjQ88wNfffcf0U07h7lef581X3+bk88/n/HkXcfSvfkU0Huf4s37BpEmTmDBxEs9/OB+wEFrPP/8848aNY/z48ZxzzjksW7Oa9z7+mKuuuooJEyawfbt1T1VSIdKuY/0Ojj7/fKaffDIHzj2Fhm07ME2T6+67j4mTJjN17lzmf/QRPcUO1LTMCWf/kumnnMK4qVP4+utv6Ojuxuf14hsykE61B5/Hg3dMLc7Scs4//3zmz5/PEN9ApoyewrXXXsuEyZOZOW8eqzds4PjzzmfMUUfxxAuWN59yS/R4TErLcsg+va+Pvng3bUWFhkI2TeHOeUfxZB9tRRBXCj1QwSRrLIYjHchFRYhldr22KGK6nWzzROlyqlSmPQRMFwmvIxvd8HbESDks9tuuov/7UVLNQH7gutbettd9BEGQsWhZuv4Pj/23yhKbqiKaV7iXkaZNK7N/337rUXz2u9NyX9oPb+Fhxexz+Q2MsmsoKr2V1HqrqQ3U8eDpPj6YIiBJDsbsdyxC0IpzLgjUU3v1Y4yJWLbreZ5DucJ3It8+9leu+P1XvPxwbjHZ5YpxUeg9Fqx8iVVz9mdio8ihiSFEPv6YlubNqBXFfH3tkWwf7GLHuq94/bgJLPkk1+1vb+IuKqXkllxDnvXHjkIXYOpW68UOTZqO29F/ITR7epn4xBJmfrCTvnIvww4+rt8+7XHLtA/b1PBKTwzvkrWU7OhmyitreefdewHYdMRIGkcWMWGixXp142M91HXABGUoiqTgnziFO85x0VwMf1/1EE8sf5jeVDh7nu071+KMW7Muw1TbMagIACNP2bmcHkr7oDiSm7Sx1l2Y8QQhVSHUsUcVtZrGF8tVM8tS/9Ac5GDHP9Y1LiOJRIIJEyYwatQoLr32eq656CKEVBpULdtYacKECRy1/5HsXLGdoKcYSZQQBAFPX4oVC5dy3KzZhdeYTJLc2Ujcr2SLyAy3E7evCNG0EscXXXA+K1asYNkH7xJPJHj//fezx4dNlRUffsgD11/Pb266CdHp4pHnX+Dh++7j2/nz+fS553A7ndx8w7XsP2kS386fz41/vg1vEjat2cDLt93BwmefxaUovPHWm3z33Xd8+o9/cvef78U0TdZv2cytt97K559/ztq1a3nwwQeZMWECxx5xOPfccw9r1qxh6FBLqRs91jPV7TDW+ddcw+8v+R3fvvEGi154gbKyEuYv+pTvtmziy88+ZMFTT3HdffeR6E7w0lNPccj++/Hep/NZ+u0Sxo8cxbiRI6koKWHEvuO5+rdX8f7ixYRiAkU9KgICpmmS3LoFU9eoq6vju5UrmDlpEhfdcAPPPP0Ib77/Cnc9ZHVITLglHEWhgr7Zmq4SiIMrVmhQpUJWeDOWzq0jQncvxRGynQoTbhFVzikZXRZxq7DbDLNbsjyUdDyKua2B6rCAVxWQe6O4DJHiwSNx2RQjBia43QwoH05dea5W7L8h/46Q1ApguCAIg7EW+9OBM/fY513gF8A3wCnA56ZpmoIgvAv8SxCE+4FqYDiwnP9FmfVtHBOrqjUj7aUy5Z0ah23Pxb3nJvehaFWOzz+jMGZLY3AmdHY4emndt4wgMQTTil3//bJPQJKQFCc/HHo4hsvBAODI5hJ8kS647Wk4548En38fvWEXFSceSRorNJKRwT0OXv9qMsKECoxuiP7tCUqae9g+ZzhTK2tJKwJPyl9ztXAAMxKljN2awkj+9GPUHRLzeIJH7c+nnHs7O+efmP1+yGvL0K5PoTgLlUY4b8GWe2N8lljDkXvQHLZGWwkBPakwNcCmt58n+MT87PcD6q0JddOk7TAJXtWaGU0Qr+xBoxttwijWPnUp9EYY8uVa1MGd/OKWFSgRndJThCzj25CJs2gZugDn9maSdhSgrMG6vtDaRtZPLqHOQbZxEMCzR1qKNNHSzOMjb0JzK5BI8/jIm6xxkQQem3A7YtRC7tw56SakivKCYzN/x1NRwrsbcO5uwj2i6EfHOj8k9e7Hb3LhJVez6q23SBipwpBU0y7MSJTelkZMVWX27Nl0dXTgc7u5+YYbCn5TRMBtyPh6BfSElQSPCWmiUpSQIiGndZYu+YZ7H5xHrLeXnnCYMfuOhRlW/cJhJx9Bm9/ggClT6ItG6VDjjN1vIpfddD1nHH4kc+ccQm1lJXKxndB3uYg2WnxKc/bbj+Kg9RBM0+Sqm65jxdcrQFXZ3d5ORyLBsm9Xcuqpp2aruUOhEKnOToS99FgpQKnFYuxua+PIyRMhnsbldCJ7PHy5YR0nnHwcPncAT2kpB06ZwneLljBu1Ah+d831mF4fJ554IvvYxa7vPP44K7dvY/HiL/jT3XezesMGrrvkt9mCyExO4vjjj0cURMaMGEE0kaBMcBEo9qM4FcJ9fYScpUiiiprKJeGVYAi9/f9H3n+HSVGm7f/wp1Ln7unJiWGGIUvOICqioqgooIA566prXrOuuuYcV9ecs2ICMwqiIqIkA3EGGCbn0NO5u6p+f1RPV/fM6O7z3efZfd/D6zg46Omuu+Jd95XPsx1Pr75L2eYAfDhTGPesKOhqFEtEBYuRkxB0A9wRQIpryMjkhhSEWBwyQBFl0EAOa8hBlbAag0AUX/UOPPklWK0OI6zoC+Gv3AkCuAYP+835938t/7aHoet6HLgQ+AzYBryl6/oWQRBuEQShB83vWSBbEIRK4C/ANYmxW4C3gK3Ap8AFut5Pfef/ougVxouQ6mHsON0gSYn7zDhloSUXOWUBFQSBcF4Gyqff8NPT9+Dfp4QnT85Gzctkh9bATrWBndNnsHPKVGLRMPm4KRYN99uxzSiF64E43ta6lYZQI0qicua1Q8xJF+loQ/9mHVZvNp7rriBWnEvQpTDvH8vIHz4Od0uAV59zc2htJnkDhpJ15pkM2Wff37/mQJCbnzcTb6suWJz8XDHAmAI92Fip4knp33BEYOCWvmxfk2ccQ/7ttzJ87IEAFHvSkWJL3YZ7/9adBry5f+uvADxymMrVZ0isdFTxyC//QN1TzVFvVVPiU5Ix4NSkp23QIDZPM6z7g39Kd/njbjtvjupC1CEeDRNTY2mVRj04VH6bTtySwlNd6ECSTGVr0SUcev9JRYfVRYbNm+SY/ldk/1mzaevspDkcwu72pv3WUyXVkzxe+eWX/LplI8NHD+e6Rx9I35EsQ7aXeHcXqCoCBqCiOyoiR1XCkQgXXnYJS5cuZd1nH3PacYsJJ7DJJA0KOsHZad5LQdO49rw/8+g9d9EoR5h9+mls31tFd1MtKjqEwyihGBEFnHbzHXjjo4/oqm9hw4YNLFv9PnnZ2YQ6OohF+lZD7cqK9Vs9JSTut6SazzC1yVASZRxxEUdABbuNWMo+DjnscFa88w55isIZp53Gc599aOxTEJiyzyiuOOdsXrz3Xj5YsQLVbUdAQBAExERVktVqRRXB5xKwKgpiNI69M4SATizDTTweI9TVjpJvNvBqkkCn0+TwTp5no/Eu6Cnw5qFcI6LQU04tqBp+l0TMmdKAGgwiReOIIeP5CIqCVmAo2mA8iCTKyCq4fLE05WocK55WCfbfkP+VHIau6x/ruj5M1/XBuq7fnvjuRl3XlyU+h3VdX6zr+hBd16fqur47ZeztiXHDdV3/5LeO8b8lTYMy+GYfgaDHXBgWTD8DgA/2M7/7vOJj/KS/CJecZUzywd7BTIkW86zvWIpUNyXPPsPw+/6e3E5EwHvDNXCGEdKq82o8f/FwfLddAECZeyDZzly2thtVUhdd905ybEOi8mlFaANz9YfwFg/C4Y/x8JmTqK/8iVDYT6yujt31W6hxhjmh7BO+t/TtqE0VCYHcPWaD0eAac9INrU2gaPYTkhJ7TY9i3dtnm3pbiLeGtNKZcM4yFi+i7WEzMb65FxvgaIcRmthvzhlcsXkAh+/N5NmHVcav2ENXto26SDNb9jF21u0xV4vNX7zOtNfMPpC2m89l53SjPkLuDnHrS3GscaMuXpEUrLL5kvbwE+QVDkHJMxeDQjxEBBUdsI7aB0dQxervqzgBwl0dSQjsf1Vq1v6EpqrkWKwQSw9p2ItLEIcMMiuEdJ2s7CLuvOs2lr72Nu3tJllVVFBpELsJuywE7YlEbSyKM2H1GspBICcnh1pLjKWff4YaN5/x0k8/xRHW+W7jRjJcLnJVmbrtu5lcNpTbl5zJlH1GsW33LvIlB/6A2YcipKyS3XboDPjJy85GURS2/rSL6nqj+XX/mdN5++23aUuwU7a3tzNAzCbTnZHkBukRNSUE73Y6KS4o4PP1xhyJRKP4/D5mjB7NO59+Smewg87mdr7dsIHJkyayq60Zb3kxZy1YyCknncDW3Xupb25m09attLt0ghlWft6+naKBxbhLyhEEwUgU61qyS1tAwJFQ+iF3AsUBkWq5i3iCurbBYt6DeGcn3kDfxsueHQYVc1H3RXw0Z4DkSMECi8UhYs4pAYEOOZLEnYoJGlW0oQsgi4pRWi2KiC4XSmIOB2wCcbsFR9EAHEXpZev/afnDwZuXvvE6+yhOcu1m4rzyrNPJBA4bZPYNjiydjFVKr4xYWvw36u5uIGv6bLav/ATL7X8nNGEotq4mLJ5oEsZOFETO634SVVa53g1ZBaXMXLqDf8ysYPqxF2ATrOiyjRFT5uJ/cSVV5/2JvGUrARjoGUgjsH93EWN/KKUjtoUs4NDvgihdQWIJvJymQBO5TT4uXeUkpzyUngnqLeI/T5SpqkrvrbrsOo8dKXLoRo2hDcbiP4t5advUrltF7r0PgUXdPgAA/YFJREFU03JHGblT5vJTzY/csPMBLhgoMLpaJ8uenuTc1V7JGCYx9a6PCW/aS3C/PWi6RuPQLJ49w8lNw8pwZuUTkRsY5jWr4QZHvPQsPRsHCzzQ/QzjF03kiu/TU15xQUMvyIGUdh7F4yUmSYQbq9E0lZ7iWq22AWFQEe1qAGnvVrz8Nry5/i/Wv/fkMADikTBP3X47kiQR7u5I5jB69nfyqSdz7onHG3+j09mwl8G6jeOOnMdjjz3GDTcY1XtWVaAwYMFeMoBYJES8YhdRNYoa82MDvB4PZ59xBqNHj6YgL499J09Dlk3jx2a1Mm3JYtRYnMdvuQUdnYeffYZv1q1DQmDkkCEcMXN/JI8bRZSYduyxnDx/Pl6P4WF2uyTcfpXjjzySRZddxpgxYxg/bBjDBxn9PxNHj+f6669n1qxZSJLEhAkTePyKKzjuiCP589XX8Mgjj7B06VIGDx5MiyNOQWL97LbDnc/cx01X3MyNrW3IiszSpUuZf/DB/PDTTxw042CEeJzb//IX8r1env1wOf944lmsFisuj4fH77ubdjXI5Y/cT/sNndisVrK9Xh548B4aq7YY/R06dHrlpIcg6iRLp7W8LEKKDwQYGLRjtYGoyHhaTUNRQaK/J99TjpwaksoPyoCCzepMhsFcIeP/LgdYMrNw2Ty4JN3khY/rlHdZQQ+jSArVOVFimoBV1ikWdSxAtCCTzngQrxJF13X+30t+/n35wymM1accybSdOsqK5WSWGACEitUO+LG++iH86QZ0XWfUrffjVNJRQ1suuYJPpuoMGCIz3CbSXmDFIQk0X3Md9WVFyTVbQ+fWTzJQFCty917UmlaGtcC1b2twKzyzbxAxZuGKadNZOSufyV+ZKLlxi0R0cDHumI5n0y5qzjqUVmuUYRuacVk9SDYXLcC0wqkofp2hqyopOfH3+TAE8bfLQHskrEWwkN6nkOnJY/CJZ2Pb+SbQRY69LxL/OGs5tTVQKhs18YM21vP4YyqaJBByW5jw5+vTtu9JErbs/Bk3UNlRQbGuonZ18XTWldjkQrAUocU349tbSeYgo7hASrF2x9TJvHJfDCN9BppVod4dJ0sCVRRoiLejiAoDE4XEVpcH2ekkWFmB0uvtt0k2lIQm6nbLOPL6h8ewyFb+lWhUKnJrYE8lYsBYfIaVDyOUgtPUubcCORBBd9jZ9P1qvDm5BOuN0OXdN1yHe6gBG3/ggQcyrXQghEJ01u1B9AVQMLCkwoQgYabceMN13H7XXQT27IJYDC3bCw2tfPb88+iyREOWQFGzsW1clrj/bzeCriOFTU9ktzfK8uefRReMUJaowykLFhArKILKGnK9mXy99ltsso3u7VtAN6A4olqU0047jdNOOw0wcgbhLVuYMHFMnz6MQtWNnlD97hAcUD6RD597BmvIODdb+VCijQ3ccfnl3FVciFZnvBshq8g5CxZz9tHHEizKxKk4UXdWImpeVj7xLHg9hOIh7P7E9QTgueeeRUkozupqoyoyHotyyoIFnLJgAdG6VrptOl9vWEluUwRN1wgLMWxh053o6W8J2UTSfPDEc9aDIUigyejhMGg63e1NuDLT55EVmaZYBz4hQqHqAlWDPBdoOoTCNHvB7hHJFbKJhoOo/iA4NJAgo6GbzEiMkLPVUETl/z2V8f83ZbX/W9JDwhNMgWoouuQvaAL4VeO7UDzE6Y/MYtnHD6eNVdFYuFZnv9WtTFt4HrO/2kzpyKnk2/IozShjd1GCtB0BV0MX0ubtACzr1Yq48PDLOPqoy/nm02eY8WVDktcboK5Q4eQlTXzhNhaPgTPm4DrcSDR3xrqI2mRq9hvMLrufOr9hXf/S9uvvX7QsYxk/Nvln0JVeCVR12mxcjr52tdbSztyTnqKkwgBrKxvct3GvKUukatE0ujONF7PHjRZVHXt3lLe3vJG2/fgh+wNms9aonFEookJxfYTqM85k14aVfO6sAsCXgpa7s3178rMSTo/jdswYwUMLJARFwapLFHUI5KUA7fpaG/Dt2oFVtCClNGeKI4YSaTKVdabiwSn1Xzbb0yWuD+yLp/VbokiWJJx375CGTbIhCRLujFyySoYgShKWBGdG722jaoSYFkPpDpsc8LKY1sTVY9HG9TiqrhKJmvM7ZBcpUc3nK1qtWBQbimxyS+vAwLgHVYKYImAfNjy5vdSQwkvSaSh8WTBi7WDCpqRKeEgxlvy+uEepBR4A8YYGrLrpDcaiYaqkTmpzBIIp0OHWrBwjvBSPo9U1EO7uREjpdI8Huk1lkRBZkFC1OL7K7QRajVCvIEk0JhZ4SzhOdqdKXtxhhNxybahFuWmNez3VcX5ruqWh2hPAgLoZatQS43ooWNuzFBqyDS54WzBOabNObmOYYEcr0Q4jfBdPjFeQcUh2LHWtOOs78HREkPUEnH8CkdipyjjV/66N/4dTGABCppfCIrPS4LqGJxB1yG81Hp4sytywvoQxr6xLG1f67Srjd0lh05YvefDhk2ho3o320gPYb72OI1f+ysjt2xAVhZpgPa2aj0YvzBx4QNp+cu55ldw7XmRsV1+snSFiPu94ruIAu7HAN7z8PEW3vUTcImFRbGiZbm6Y3cLOEhF7ImneAxHyWyJaLJy/yMxhjHxvedrv2V/9QqwfWPCOkLlQRCX4KrelzzZ7PVGuGrqBTo/x0tf400NEQ782MLaWXCuz5FqZ7ZnGQmZTDIUR9dipOeVAGsca+QhVizNxg7Ha59lNK21wcXpz4vfDTY/D/e0v3PdMHDkcIxYLQzyOnmLpWzWDdyLeC/6kub06madpyYB4ezu+xv6xejTZ4MNo76jv9/f+pEuJJau2grH+Maq6Ohpp2b0VNR4nHDfujdIL68siWlAkC5Ikc9yllzJ5ySKm7D+L8fMOZ9riRaxYsyZZKOAZNAz3sH1wJsI+QSuEhThqW1syCR0XdZq8Ao1ZJFmIogrIrV3YFQeOuERbu/kcxYDpGYXDiWKRnhCP223AePQSp25BSVEEF1xwAePHj2faokVGT8hxi3kp0ZyoppRFC4JAcYdAdkDEkaK8Yz6Dq1zXVFxhcGEllmO+P3I/fC6hWBBN11HCZrJYEqVkLk5LdGurkTCOkjJyHXlkqum4WEqCNTA3HekfLdfQOla76d0nIcsTGG9WbxY5WUVpsOiiDlbJZPDs+T+zM461I5iG/Nsbyiauq2n36r8hf7iQVKsbfi7poliM4U6w8Z7zcXphliRIZMqeRKjKlI9XPsV4YEfHTjI2xZn7+Eaisxu4Zt1VzCo/mIKHjHLSU5ZtIdedDyUZ6Lv3oq/bkbafiop1KJrAqAVHEQGqCqUkl3hwVyXqtXdgPeNEtNH74OiOErFJjN9seBGqz8eHHafi1sehu6IEMzMpzh7M74mu65y4I4eehvyHbjqCHmCNPYUig/a2Egp3Y7Wmh6S82QP46chxlH30ExYVytok6AUQu2+gkE+2HkHuQQ7IgkJ3ET7g12PGMfrdnxjoMfIQTz0O3s44LfvsgrzxrBocZuckkRGj4R/qN/yFORSRgENvTHh6aigZBnAcdCBfnjaJqS8ahEz6yCGwo4JWj4CttBTLL1XG/dFU2l0gJegtARSnC1XVifg7wCojRYyXLqc5gjgwF607gDMqAlq/RFIAdocH3enF0d75u/c6VZTMbGRfA7oi48jOT/strIaRdRU5pmEJaqBrCBYLUTlMKNtKmm1uUUDXUUMhnv/HQwRtUJhbTnvch9DUiisMMV3FCnSHuoiqYeySoQodEXBEEl3FibVGl0ScKOi6RsBqkCz1NJZpQePeu1rMKkLd7UToNhRez/3x2XQ8UQNtVYsEsFvTw7fqrj2EMp1kFBt5jscee8y47uZG9ObWJCWulJdHrLMVCehwQaHFRjyuYY8D+aYHJQcjyA4nuhADNUJMjRH0t5Fa0xZ2KtgCiQsREl6QIEFuLpYEiKgaj6F2dgIQtQjY4gYZlaWtk2iXDx2wuN1oiYpJ3W6l227QpKaKnuj87kGZBojmZmBp6iAYD+HCg3O30aOkYFRbiaqO3yXiVsWkGymIIrrDhhAME4wHEYoLiXR2Yu0MJr2/aJ4XS3Mnqq4i/A4szX9C/nAeRk43HPSzTneTWVmUvdtwD38eYSiQpmATx8zdyqZr0xvVxl//OgCDvUPSGvfueU1i/odtTKnQk81w7qkzEArzsbR0sbu7is/nFxOeM8M43llnkXn2mXw1wMeSa2UmfPhF8hiN4Wb8Nvgoq4aFR+0k+5RT6D5iX47/+0w6fM2EOltpffRRtn3/MbUDHZx3mY1NA/55dH3ay2a10sLvTPe6uEUj7rLhsvb1dhSni5Jr/8r39xltNcW1fb2Q2l0/0f3BMjqaDMvcNX4CnRcfT82MMi4/S+KrUcZ23k7jxZoYMuKvrqsuZdqoQzlKmcR76/dj4mZjgar2VfPjdC8A3bKpyL/b+AHdm00+jBnvG0i1OT6duNtUdDbJSnZuCVmZZujIJ8eotHTgHDIMuayUSIpO6JZi1OYIOELGPfkthREJ+RH+B8oCjISnEFOJyiD0KjywZ+Ui5eVic3iQMjIQBRF34UDCJblpnB0ATW6NRo/BqeCIQo7PCMFktISwo7C7wESO1Zuasda1EZbSjaBUsYTjONtDuNpCOOK/vQTUZwnsLhCIFWQlWeHERD+Sq7CEumwBJa4nlUyf4/SDe+SXEphOib+7u5pRErS4mX6DHa9HunTTsxGtVuKFOcSLjPkTVSN4U5ozQ5JKMMMom/W7JGz7jEKx2FDRaHLEkr07qd3atqAxJ626hNDWiahqiJJEi9vcbywUJGKX+6AUK0HjnQumzNE2IUCnEyRrX/TeHm8Gu52gGiZCTz5JYI8nQkOegpSTjd3hxmE33sUe7yPuM9wbu8uL1fX70YT/a/nDKQz5xGMAyLX27dgdsOQUADwWD38rv5Cxll7mtGw8QPv4cexJ8DO0hloRdBBFCdFpWlk3TqjkDo8BJZJ9yGFURRq4qtzoSSyeM48Bhy1g38hA7v26hA1P3ZkcN3TmEWSuWs4hM0/h7shRfJvZwqvqd9z0WDtiQwuaIrN9oESt4scZFVkQG0W2lu4Z9BZBEPC5zQVL9HrBZiWc5cQSh91LpvdZpABa6iuR9lvM9CteI2iFDcHtfbZp8BshGl/MsLgqHN081PoWh1/5AXe8qFIyIB24eGfY8HLmrA0x5sFP6f7yCwJfrqRN9fHin4eiDi6h8+S5nHVjJgMGjEyOG7Mr3qf/omGQ8WJtDJjnFdPjUN+U5HcGcEQFBoYctHc04G9tTKO+tPmj5HeYRJrBeP+LX09Io6Evh9RvSqCjmbgEVn+EQC8yId1uQ8tw4ZNjVLlCaKJAa1sN7qpWcprSFXOBkEGBkIFr6Ajj2QERPUY4HkIKxxjSZcNCD7GSHUVUsGtm8EDrVfOgohOJh4moEQS1/+qvzhIvRe06g1pFIk0NyXxFWDQ+iO0+igMJzKR+4M3BBChM+64tPbbjiECHLeUcEha7JgpkqKbCCboU2rsa8AfaESwWnFZXWp+CraSUnLjBFui0uKlo2oo/2o2mxrG1+EzU6RQM2JjbRtymJMET5eIinEOHo4TMCWKJauS0x8l39srHWI1zc9pMQ6soYCFTdONweftct5zwat1BUEoGIJcaJTKyLjJIz6bEU4LLnkGoooLu9kaaixyoiVIse9RQgt2ZNjqz+irh/6T84RTG423vA+kLQ8RpPAT1HQNOwSpbGXPLUix/T6ckjSsiH00WWJVRT7QHS0qN0x5sZXd3FcddEObkBAvcRd1TuMq/X2J/dv70qcYNa4ywxIpLjuOLq09F3lJJ6Zo9lD/5efIYoe5OqjesxrZpB4MeeI+yj3/h/E+MiWOzOPAUDmTh579y1Mk34a3pYM6tXzCwtv/egVT55OFFyc+XLeqGcARbu/ESBb5aTTDU3WeMRzAVkT0K+YfN67PN+NxxAJQkQk8lu7q56XXjfK1xGPKFAXL3t/vGsuRamfbhxj2oeewhAHb49/DZBIHaUbncdfEyRpVN5fAVHTx7S0caY5uUUiZaM9VoBizcYyipWZXmb6pFJhYMEA2aIRUpEkfuCuBs9uFs68UNEtNQVMPi1UQB2dO/BWex2MFmJUv61y080e5ATECN2Hsl0wPN9YSq96LEEjzNmoatO4qg68TiveDNW9qgtYM2XyO+cCc64MouJJyfgSYY5F7RiDGfY3ocVVOTDI5+G8QGFdGUbS7eqlUhVpSTRnEKUJUvEBeNMYGgsbALcRW3L4X3PMuw8OMd7RCOELQJRG3pke1kZVEKJ0WP2BKXlurlKZ3ms5JFGamoELm4KC0PpXQGyOsSyAwIBEqyiaY0wwEIgRBas5FjE9o7KWnVsagCiiDjDGrYEw0gqQn6uBqnOUuk2W3cq65AO3tbK8noNo+bzHM0NKYdL+C1oZOojOrZNhxG7+7G12VAofttoKZAg0QUg3HSqgrJ8CDxOEJTK/HK3XTV7kEWJCzJYolEwYSm4wiqRH0dxDrNXOR/Q/5wCuOcz4zJkVol5ZlpLOx6gxFzrOyopKmrluZ4r4cTjXLkep2ZdS4mzjuDsqVLKRk+iUyLl0HeQZz8ncK8H3QEQSDr4x+xvfslABl/T0B8/2pY4xPbPYzt8rC1PVFy6DQX5tqf1lB44X1s/uYdOh1Q1BjFEtW44qocYgVZRPw+XnvgHH784QOqfUYYaEtrCkz6b8iF8f2Tnw/uMMM1uwtgwm4dVz8YmFJKsk7QYXikLxtdk9pBONdNdyJ8IPkCaXHWTY1GzuG0pZ08sNTFLJuRzI+NKGP38TOYfsmtnP3sd4wbdgA/TB/Ptq/eo+uddwHobDMTzN9NtPOPI43zKfkhnXc7lpPBOVfYCXvt2EVrn8a9UKJjvLfFKxTmEUvpCLdkZeN09+9CxBWRkAWsrb5+f+9P3IUloKposoiQka5onJqCMypgiws4OsMImo7FYkcXBAJZ6coloseI6DGsTV24wsYyEouEyM8oRu8JRfWcpxZH01VCSqIPIAzxtjZKvCagnmyxkmXNJNueTai8EJ+DJFyOJhoc3cVtKd5cShhHihqLqeQyYjSipvdJxAoIxPIzsWT0vZd6Amgx1cvr6VUwzj9Gk7+BSH0d3YRRE1PQEtWSTXhd7Q0Eg+meSqypid6iCHIyxJWENxeEZJOpPRinqD5CvmTMa2dnmJy2GNEU3uy4XSFiEfrUgSmhGAIQjpjrSFdiv3I85d6nlLxZY6DEdIK11YRqE2W+upYM9ymijCiIyMEo+bUB5JRSclGDzIBAtv9f42L5v5I/nMLokbxME8Li2tHGgusZaoRA8hx5ZAhOMlzpYaucG42eAmFvPT9H93BdyzM0q52o55+Edd5cjvw2zPFfG5NtvVxLS8JbjeVk8PZMga2JRg2rYMFucTIk0wAS23jfKcljlLiNjYYddRJ7Xr2B2iwdTYD9Bh+MLFuIdnUw4alvaV3zFe5JU1j6+LF4pv0+NAhAy58uTH4+4h0TqXdgRyJO2k/1RUcKlhTAmuVP9Nlm1zA3p54donuA8dLVZcOOFID6LJuxaAz6vpoBFZ38stooDJj0yvu499sfX8NeNt54KS2ffYi7M4IaDhPP9QJQmFOW3M9M51hOtqZXm/VIsK2Ji77LwNYZMjwL3bRyIYVXoMBFINesamnEh6gYC26TF8IdrclcTG/RYjHsvkiyqui3JJUPY+zY0fywYSMBRWPzrl/S+DCmHX4Er6z4nFA8xIjDDmPsxAmMP/QQZp97JuGgkMaHUTppOrOOOY6Z8xfyfQKLKtLVjm/HFqREyaXVYSzgrtwiHEUlOBKkTIedcQbbv9tIdFcSXAHdH6B7TwX+XRW0+RoRdIjL0PjNj7z/6RfJ8FNPN7ImmB5BuNMI9YkFRgWbLUq/cCn2rDw++fzLPn0YMSE9BLZj926mHnMM0xcvZndNDbMOPJgcHygqeDy5SInNNUmkPkegLUuhsAMyohLRsgIeffllgqEQimJF8Lh58b33mLJwIeOXHMPoyRNZtmyZMT4xH0RRIielaRdA6+pCHVaG5PEgCRJd2Tb21tXx5kcfYdVErHY3opzuRVl9hhFid5jJjZy8MkSPB6vNlZwnsieDoCMlHKzpWEQlWQm3e281R5x3PtMWLWLirIM47/rrANiwZQsXXXJx+r0TdeL/U2L5/2X5w1VJ/e1EEb9d4C27RE/GYfHeQqCJn6bnMgGD8N6iCjic3rSxHw3qJDZGYKCzndxVazj57s+JvLiYM/XnOdF5IoenbDvw1tsNEpsjL0QtK2b6ocewNdMIh9R0VaFKHkZLBxMGNq54lZNmXwqYST9HQOWg7oFUaiKiDgvOfRPpy3OQEhAe0wun47Xnc+24v5g0sv8P0hNbDcYC2En3IDJc2aTacTm2vuWTB3kms2bYkzhlI9RUNm5/Ou66hdg5t6CE45RmlKZt70/Am19900zOecfP9hP3o2TZWpoOGEHhXXfinLgvVdO3EKldRsTroCc6rn62Cs+7XyX38/xDc/iydiWv3KeS5Yes7xqJnQSqHicoqwiiSPMpBimTFo+hR2PEj5pN1tEL6HzvPUKbNmObNAH5gj/TsmwZodWraYlooMj4LFZKX36JeEsLdX+5HIDC22/jXwE5SwUf/ODF57nxoYf4fPwLZISENPDBen893dFuxATv9RefforFrXDn9Tdz41VXpPFh3H33Xby79C2CRGj1N0OLjl22EyMAibOKxiNYFRtBRSMkRHAE+3bu94gYiqCLEggaA1oTDWiiwN76et547z2WHGLA/LsTESVRkhA1o5NPThBktTdXJ2dLVI2mNbXpuo6/cgdL33ydYxYfl8aHYfVmobcasCe6AB+t+545C+Zy5TlnIerw3Zo1hLdtM34PGicQj8fRFYUSRzECAqrQTUyL0xLs4pFXX2H+MfNwDCxiy68buPvpp3jni7cZUDwIISria+lA0HVsCX5sTVOJtxqhq6YCK7nNUeJqDEtMJRwNIalxCuV8vqyv582PP+b4s8+ERPVUqmjoSIAumXc50tiAPx7AJnnwJO6I1NaFI3F/BU0nZBdxlQxMJt8vufgSLjz3HI4eO5Go18n2yl2EMx0Mmj2ZBxcZ+dbgoHyaQy04LQoRVeO/iVf7h/MwRpZOYewenYDPxOoZ/YlR9qqs+A6ADU0beOigIE0zh6eNzbrlGdpybUyYdzojPINxBDUK7Hk8+/UIjt6Y/noOqldx7qilyQtNDRWU3PQ8B35iNIlljZlM4Zjp/DDawncjBc5eYY5rDBqx0l8/epmOU8+lQPQmf4tosSRF4+6OXWxf/QEV+85k/Zev/dv3xWPpp0oqOwf127dpmWAs+gNcfbmt9nz1IXVnnEXbnkTiubIK58sf4Ss09ve9J713oyfncdZyw0IbnTMaWZQpKtmHa1yfslNqYce2b5EiMdqazNDTjtZtyc/VubD4w07OruyLh2J3Z+EcWIar0PxNEwXCio43IODqNmMhgqbjl2JIqo41QXYjSv3bUHHtX1EX6RIMhpPwGr3LIbOjFgaGncnQmSiIuDoj7Dd6HI0N6eEVPRwm2lCHhmY2y+laWojt9ptvZcqUKUwdO5krzryAcAoT3OvLlzP9hBOSfBiCJLP2xw3MnL+QaYsMPgx/t5+//uPRJB/G3196iZfff59FF13E3D/9iSNPORW/P8CRx5/IxIkTOXT2USxfuTJxLmoaH8Zpp57K5h838+nnX/Thwwhr5nl9tvprHnz6Kd54/g0Wn3AmMRncidDd1z/+yOxDD2XRRRcxccECol0B5h92BJPHT2TsogW8/OlyPnjoZZqamzn6tDM56MDZdDa24XY4KZTduPe0kKXYGTC4lNYiJzsa65g7dy5TpkzlkNNOY8fu3Vh1mZNv/SvXPvAwB82cxfgDD+GDz1cQrq9LcoNMnTWbv7/0Up9nK6oaqqpy1RVXMHr0aMaOHcvjTz1NRhC+XbGKSZMMLo9zb7iBSDRKxGPjiuceZ/oR8xk7fiwXXXYRAA0N9QyQrKgSyC4XEw+YhbtwIBVba1g43yh+v/mmv/G3C27kpMNP4JBxB/Puu+9y1VVXMWbMGObOnUvsPwhI+IfzMI6702jGy7rNrGiqyFUZshfGtRrfDcoYxIFn3sCAgQemjd2nQWJkZRBhWyW7ShS+OWc8i90Cyk87EPLTUVo33vdXyjc3YweCpaVQV4n1k2/gQci99SZsko3saJifM0uJ1ZgJtfIx+1F/9/UMqq6GdS+z+dBBfBsROfcTDUmWk651c7CJkfJYQoDH0qvmrx/RBBP/prfUzJ9MmUXqTZpGW0cd7129hEWbjIEbmzZxEIvStmkI1JMPdMe6yQNq9/yM6/N19Pg8udPTw0g72rYzhcORENGBSDyMhoZ/+xYWfluLes12gjNGw8YmCuJmbmdwRnmSJXBgC/DFjxyY+PuTqRLVC6Yw32VYu7qvG02SKe0hxokECYZ8WOvbUMMhvAsX4l24kG6PgjWi4Zg1G++s2XQ5QczPI89hhFvk3FxzH34fmj+Az0E6REQv6cGSCofDNNTV8fEzzxjfx4LpWFKxGPdfcw1TFh+NKgmoskg4HGbFmjUcfcghafsUELBIVmwtIVx+41lE4hEkNYokCKDrXHz+n7nlttuJ1tdz+nnn8dXXazlyrEE97I+EWb7yXXZ8tIbzb7yR71et4IGnnuTeG65n/zHj8AeDWK0W7rjrLh687Q7eff55AorKO8+/zuatW/n0m48YErURj8d58ZVnGVBYRs26dRy4ZDHzZs9mV0UVt912G9999x05OTm0tbXhiseYd8QRHL1wIYsWmXNG7jSLDuYecADnLlqC0+HgstNPh0R6qDPHRsQq8fOvW1j/zruUDRjAGz98S0FuDm8+9ySOohK6/QHsk5p45MUXWfH0c+QUFKBpKvnZ2UydeQgHTpvGEYsXsGDxErRAgD+fdz5PP/UMQ4YMYc2y5Vx6++188uyzOMM69YF6vnzpJSo6Olh0xhksPGQOt156KQ+98AIfvPcuan0DUmHvrnWBZ5cupba2ns2bNyPLMvXff084EuH88y7kiy+/ZGA8ztnXX89Tb73JCfOOYsV7H/PzurVoPh9diaqtSy+6mCPOPpvp06Yx98gjmXfIfuQpdkJ79yTxy9xBnfUVu/n49VfYvm0HB514Eu+88w733HMPCxcu5KOPPmLBggW/Myv/9+QP52H0SCjF0qm45EgApGbD68gQnUz+27tIK9akjak6wkjYbvnmA4KZdlYNCRO3W3hzfIh1A6Ncd6rEM4cmErPesuS42AHpkBqPPHwyL792LcIX31L2XRWK36y0iDtt7BmXizPX4OvwdEQ4oMlw/mXJgj0nj8FfrODQc28nN4HtNMD9zxEs11xn8li8emD6Y39f3UhQ69tj4Q4JLFpjapnsww7vs80Bp1zD0K2/MGj8LABynekNavtUGZP+rXOH8/whIs2jjYR7D/x4RUcFQVkjGg4ycE+AcjGfiWIZYCyyPSLpvz1VZzrHony3mWw/xAN+1OYWom2mZyP6Q9hqWxE0HSEFVjvitiKHjZBcxCriiAp9GrR6RElUO1k9fRP/qdITktq+fTvvvfgcZ//1enRBwCbZkiGpzZs3s/rj95k+aQKyICEgMOeQOYyYeQCff/stxx4xt999x1I61Z3Z+UQ99mSs/IuvVjJt2jQmHHIwX/34A1t+NQshFh2/mNymSJIPo7PLx9SZ07n23vt47NVX6fB3I1mtxKtrUdEIR/y0KMaNOGjGDIZohiGl6zq3/fUWxo4dy5Gnn0Z9UzON7W188e3qdD6MrEwqpTaiQl+vrCcnEUypseidxs0W3djcGUweP4GyAYYhNnjYIFatXcst9z7I6reWYotGaMhOnxNiLM4HTzzBqw88wNCyMv56w83cdcsd2Ku7WPf9DyxevJgJEyZw7rVX0diSqKjSdObtvx/C0DJyJpTT2NKczqyXMNACHc1pxwrmuVn1/fecdfppyIn8htebwc6qKgYOLGHo8GHsLhCYe9Yivtm8Ca/Lhc1i4U/nns+yz1bgtBvG0OmnncbGDz5gwaxZrPj8E+bNPw49GEVMT/Vw6H77Icgi+wwdgqqqzJ1rzJExY8ZQVVXV5z7/X8kfTmF05tr5dh8hSQAPsLgrPfT09e4viW3+hdbairTvnxlilHkOyRzKuCp44EWR/C447KanmHncJcgOJ7+UGZPNbctA87ioLISta9KhOE5dLXLohjjbO/r2NVRv+gbt1EvZtOJV41hraxi5sY135jjBYUcT4KGG11jn+5m9PiNks7297356y/FLbjbvwYjCtN8u+lDDHe0b8e6d6Bs3ZL8+21TU/8IrX96PL2goW6VXs9a6794GQB07nPC8WRw5/rjEvhVCBV4mHncBw39YR86FBpXr3q4qOl5+BUhPuq8dHGftCPNF7jz9yORn+697OPNDY4GzyTZkqw1rSudxKq+GoJjXlNMeT1bEOLLyUGK6We7YS1SLTNBrw9rRP8RHfzJ7/jG0dXTS0tqKYEuvQuvBkrKFVURVY+Unn1LxzbeMHT6cW574R9q2OrrhOQFRGaoLFeKiTlbxYDSLTDgS4ZLLLmfp0qWsWr+ahaccS9hvlKpqImhRwzjqqTgSXQ5uvvVOnn/hRcLhMIecfAo7KioQMelEy7oSfQa9+DDa2trZsGED65YtIy87m3YiaL04zgUdSgO2PkCPgEFiBcTsxnPQBNKqsADU5hb01nasdvOeTckfxJp33mHU8OHc/PdHuO3+e8nNMr36mBZDVUSDG2PMGK48+2xefe553nnvPTRNw5vhYfPmzWzatJH1by1l07JlRBzGGuC0OdgTqMHeFQFNT8eSchjnYAv3upjEPIqkQHmEU1x0AYGiThFHZwQxriHLMl+//joL5h7Ghyu/YF4CqFHVVYry8jh94UKWPvccssXC1t27k/sAiCoCVosFu2zHIltQFCWp1ERRJB7/jUn7fyB/OIXhbYuw306JLMmM2ftvvittm+G5+9BwwoFkTk2vPrp3nQHBIYkyu2p+Jrx1Ky2ddbgffRPhy++45QkfDz9lWFVbOrfRIvpxhWCMrZzdKR6tJS8PZ24RI444ke/Pmcb2m45P/lZiyaOsGYbOPJJdfz2BWovx4sePPxLZ6ULt7OSoU56n4+VXcZYPZcNJE3EP+ucMXD8fbJbVXvCEiRPUNszwCFIJh3rE5zHwn1482JgmXz5+fZ9t6j9bxrSLXqBzl6G0mtQOWt1wywki340U8A42Ks9OuGAZ51+6ih9eNChby99ZSteDVxEszGDFymfZu9fgulC1eLLDtSiFFXHmjMUMnX9y8u94omcmZIEtGWYPSUyNoQ0ogHwzQW/JyiY4KB9/toNgRkqTWSiM4M0gYDXr7FPLrVNF0zXUSBgi/zqD0tebvkFTVeQiL21yL9dFFECSCCW4OmJqnO4sCzfcfytvvf9hGh+GYLVizS/EKluxaCIDG2KEWpto3rMVzWlHzcgAweDDsLRH+WrZl4iysXqJGix/zyAaWrfe4MNw2W2s/+ZLijOsnHfBWUwaPZqK3XtwORwE/IZC1CMRAjbQbBZa8oxF0+f3k52diaIofL3b4MNwRQQO3f/APnwYUncIt93Zhw+jzWrcv4xE539MEZIVbfFezaOy1VQY9TW1hHNszDvpGC4940x+3bIDubIGt8Pg8FBEhVZVZ9PWrQg2G+1u+P6X9ZSUDcQ3LJvSQYN4++23IUHb+vOOHcnyV2Jxyht1nAka1s5cG67Efq2yFbwZCLb05kRHUxcHzZjBK6+8mVywYw4Pw8rKqKmppbKiAltY5f13lrP/5Mm0xIJ0dXcz78QTuPf6v7Jlu5E3/eLLVUQKchAcDjq6g7R0tmMvNeZuksMj0QsS02JpZFP/Dfm3chiCIGQBbwJlQBWwRNf1jl7bjAceBzwYJR2367r+ZuK3F4BZkCzGOV3X9c3/zjn9M1F1DSmuEehqxZ2bjjy65tJZjATys0rwXH07Xqs37ffg198iAjs7d+LJKTKw6tUo8eWfsz3akkZJUXTp5US+/xHvQ68RdLsQ77iGlTU/MxK4YEEbM4qGcUVOAcuGdNEVWZ3EdtLysuk4byEDZu7PvqXlrKn9lq9z2jjzzQ708cEke9yMwmlkDZlI6Q2v/kvXneHra+6tHi0w69cmPpkkcIqs0bvWyoOdmyNzac3aCewkV+lbVz8hbwINvEZBohN2wMw5NN0f4M8PPMOWsRlMnH9W2vb+YCcAB393En972s/PCw9m2DNf0jZpEI5p08grnUDzO6/w4+7VFBblJAHX9WUrcD1hUr/mJNYhexRKJh0AlQYwpKrHaW1vwiLbKMw2kvWKoOCSney2tJLXC7LegozPIeNMVIspv8HprcR13CETpfS3JJUPQ41EeOr228lU3HQH1bQcRkyLseCEBVz/l2vRJBHRakGyK2RkuZh/9BFpfBhIItithKIyik9DABySHTXox4efNi+ccZbBh5GXlcnEkSPTGOJsVivTFy8mHjf4MKRQhGeefoGvv/8+yYdx2P77IwoCkmTwYRy7eD4er4egECPbmQdUcdyRR7I4wYcxfMxwBg8ZBLrO0CFlaXwY48eP54krr2T+0Ydz2bU3pvFhFCjZ6LQlz80a1fFnGIpCjvWao5pp6X/fuJu7Lr0EURSR4yoP330X6DpnLlrE/PPPp7BkAPc9dAfX3X8/tW3N2BxO8vLyeOrxJyl3lfLaK6/y5wsu4LbbbiPq97No7lzGDk+PLIQcEjpQkFOGa5gPSZKYOH4iixYcwRkXnZ32fmvonHHMMVS2tzF27FgUReGUE5ew6KT5PPLU31ly3HHE/H4mjh7N2UuW0N7ZxZKLLyYYjyIKEvfccQcAK774gksuuxTRIqKICnfceAODcoupsZnl3Uoojuqy4MuwEHH8dxWGoP8bYFaCINwDtOu6fpcgCNcAmbquX91rm2GArut6hSAIRcAGYKSu650JhfGhrutL++z8d2Ty5Mn6+vXr/5/O+am/zmf/pTvJWfURuYUG9Me2EYYV/NYcOzf9fSPvfP8sbffez1FXPEbhjNnJsWtmjGHLADjq+c9xfrOZusv+wqDly9i9aBGWxfN5MPoxg/YEueLlrXSEO6j4bCnuqx/glQVe5n/pR7j6z0xZdD7ffPYsGTnFtG7dROHtL0GGm5HrDNiQn1t+5qSPT+LMpuGMeX8LY59/nV+eupeijzYybN33CHY7z79+NfuMPQhPWGDrHX+l/LqbmDRjYd+LTZHG99+m4xqDy3rFLA8HrPFhTXiyDdecxKxTr00qox4J1Oyleo4RK1VlkWGffo5lQHql1PY3nkb/2wPkvv8GOSPGEeps5af7biJjqVFBs/uB8znyiIt548qFZFY2c9Bjb6MUFfHruDFIkTjOC/9E4Iln4cSFPDy1hQvGXcCrPz7Fhh2rePyUdxmSY3hPn954JqVvrcVnh3Y3lDVDTbmbkt3dtB93EFlvriT22KOM3n9/IlV7EGw2bAMNhdHdUo/c1A5WK4LVkgaxHct0oXSYncZKYSFydl/YmFgwQHz3HrTCXJy9gAR/S6I1NUQD3Yg6iG4XtgEmIVQk5EeNx3GkULdGq6tRfT50UcCxz6jk9+27toEsoedlE2toICMIQnkpYntXEkhPKC/F5nDjq9mN7AsSsytYgkbOozvHQUZAR0vwcWjZXqxWB7qmEW80Cy7iGS7kLuNeWIYPI7rD6NLHakl6VpZhQ5EsVkKVFRCOoAuglRbhcpnGhKZpRLZuhZws7AXpRllg+zbEuEpUEbEkFIRWWoS412jSFMtLiezdS8gKstWOoyNxzgU5EAgi2u20xrtQrHYyGszn2DDAQU5rFCUcJ+CU8MgupMxMonoM9tYhDizG6slMcnUARG0ynS7I0ZyI7V1057nA5cBe24acaFDUi/IQ6pvxOSC/fLT5TNrqsDd0ECjIICfHUCVdO7eCpiGVDcRpddO+ZwfWcDyZt4nbZNChPlvAbXFT5CoiFgkR3rXLQBkoLEBqaTdg+kvLzHu29VdiTive0v9ZQe22bdsYOXJk2neCIGzQdX3y/2hHKfLvhqTmAy8mPr8ILOi9ga7rO3Vdr0h8rgea4b9HGnXAZuMlSmWCa8g1HK1F6w3rcox1EPtv0bG0pbvTubYc9qUcJRJnt9zJ3jG5tAkB0HVESeaRv3zBZY99D8Dqq8/AfbXBzXxMXQHu7jiuvz5i7OfOl3C98RlDXIkehS7zOGWdCm9/O4k5LfkUt0Plkw9R9NFGdh1QjmCxICgKT8nfsUVuwhFQGV0RwR3554/xCssHyc9n/uX5pLIAyL/3dUKdbX3GdEZMZ1GKaywLru2zTX0CS6onlFO3+buksgAorjJCHLePruSKBT7WqDsT+9PRbBaik/dh87MXUzFrEOVf7yHe0MBxt63lkSdVilJ81eGHLiE8YRiekAkvUbLbuG/W91eyfUo+YcVobjIa90yx9AAKRiKoITPkFFPE5MsMRqduh71/bCXdItPlhEhbS7+/9ydtLh1N1xBUjW4iab/pbe0IdQ34O5oJ/vorYX8XkbBxryRbeh2WXZOw6woZQcgIGv0LHbqfPY4AutW4NouQwDlTHAgIKA7DXwzYoF0O0+Q2rytmk2hUgtQpfmIpNoKlqBBBURDsNgJ79yS/j6vmZAn2opGSM7PSlAUYSWxBUdJY/5LSA/eRQurVoyyMwQJduXY0uxWnbFbJiY2t6IEg0ZCfwoIh5GamVyUWdgkoEWPfzoBByNXV3ZoM4fSEvVIT2pZwHK9mI2wz3p+MkIC3PYYUS4EkcRmha0+vSGXPM3KmcMBbFRuWOAnEXB1bjLT5JUdUFCQGBKx4E6kwSZCQNbDEdSwRlagaI+7301K9w2AMxAgrWrsj+Gv24N/5z/OV/5fy7yqMfF3XexhoGoHfNb0EQZgKWIBdKV/fLgjCz4IgPCgIQl98CnPsnwRBWC8IwvqWln/9pe0teqXxIgRTcG52nzaLiCIkAcpyE3hBveHNfXIM6Zed/Pz64wT2GciTJ2cTynbRYo+xI1bDzukz2Dl1GgBDnGbDmm3bXuJeM+DTFmxle+dOLAk+i08ONMtiw53t6N+swz5oMO7rrgC3Me6Qh99EtNvRg0Fefc7NsdszKB4yjqwzz6RsSF9io97ypxfNKo+a+ccmP1cMEBFVjUC4L+RFhjUdzmLYxr73fd9DTyf/9lspKjUs4kx7unXeA2/+1p1x3rozTmSFETq6a7HIX05V+cK+h4d/foyO6gqOequaIa0Kdtm476l4X/YJ49ky01gkCjp7ncSYEbwyJYSgQywUIK7FiaT0IYgJzylgE9BSEqmdBU6klBCUokk46D/kZJGteCwe7LF/HZrB7vCgaAJ6VgauXmXX4XgEVVORBAkBgwc+mumiJVumMSfd09OzvOD1EA50cdwllzD92EXMnT6HRfsvZPrR81mxZo2hKDE6qTVJTCa4nWEobdRwdZkLvaAZpZreANTkCnQmyK869lYQFGKo4TBKOJZUJnJKb4rFb+ynxWvcB7W9nZC/M/18BdiVHU9CZYDJhzFj0WKmLVrE/kctTPJhpIoiyOSFLHjbIuDNSMJmAMjZ2dgzcojs3Uu4qYGuVMzNWBwtRQnF3HasdmeSqEuRUvIhKfrN0u5HaulAz8kkEgsR83VgKTaflSYKLPtxDdMWL0p26Y8fP56TFxrFG6TgXUXyvYBhPOmajhiL052hEHMn1hFdR49EkELRZIc+koSab7wzoXgQWZQRdXD5+vZWqLEYxP9/PIchCMIXkA7Pn5C0DKiu67og9KFKT91PIfAycJpuEiRfi6FoLMBTwNXALf2N13X9qcQ2TJ48+f85jlY9IouWeAd5NnMmHjl2MZ2xL3nyGBsPAZ/sWM4EQFfSb8/DJ7u57s42BmeUUxgr5lnfsbj0LJrfe5bR7hL8rx2a3DZ/yUns9TpxPvceNZ44nx9fykneOQBkKG683kFs79hJPnDEWbclxzUFGpGBt6JreU3fzqf55+DjS144fzbnPrUGXYdYXR27an7GcuBwLi37hHuVg5hE+oLUW/KquvrhRYOhtcajyLT1LRcVetkTA7S+wHtVrhBfDWnlJJuAG3BNnMQvN51F/s3PAvBT60/M5qTk9lPtBvXozPl/ZvR9HzKwPJNZD6kIMxvozLYRi9Sxa6iNEc3QkWmhJ3X9zfN3MOEx03NpvfIk2j9azrCtPpzrt3Pbeog9BnbBQlSU0xaIiBpBApxFAxFVFc1nKKKciIWoEEMB5GFDceysQPZH6MVUC0AsHETo+NdxpAAcLX5UXUf3+RFdLlBMA8Q+oARVU7FEdKKAJMhk55YgdjURCfohpY+yXvJhFa147FZe/MfD2GJATha0thsVRrpu5DmAoMdCs6xT0B1Ie7ntEfPpK50BZFlBj8Upb9eBKDHJ8F5CFrNfJ/k2i4YC6qFtBcjJKIJGo5pHi/YtBBggZmNJwSfr4cPw79qJFErfXivKQ6w3DJqYHkfrMlKabeE2snrWR6uFiNdhAPM1hIkTx1lUApUGzE2HEyyaFWdHiIBTInugEW4O+doRMKqRet74zEQEMuJQsAZjWHWJ3XInxYoFOarRIHYn550a8HP0lJkc/fZM7KPNkFSgYgdEYvgtWrIvx9fdhpYBWRke05OJxtDi6Yt/uy2O1WLcHU3Q2Su0U45BAiUKMXRAdLmSxEshmwGi6MovTqL5/rfkn3oYuq4fouv66H7+fQA0JRRBj0Jo7m8fgiB4gI+A63Vd/z5l3w26IRHgeWBqf+P/N2XkS69zyJsryXaZbG7V5xslnSeMPAGAcQUTiORnIrvTu5/vH3Q5oVsuwnnEYWz7/hOabr+dxtrtOLbuRWpKByp8PvYVZ+Qvpz4TCtyFzHpjO/duN14aSRdxWJwMHW1ULnXdeV9yXInHiIfOq8/jmU9LqWo0XNBZ3/vRdT1ZgdgUaMRd18mlq5x4W3tV4PQjgd+A7e6RSLzvProc8MACkV9LjYNubNrYZ5u9K5aRe8XD+GoNz63JV8/fWl/gx6HGmExruiLa3mZ0bB90zftkbthFsGoXuq7RUmDnketGEp0wAps3m7ACg/LM6q/x3VnJxWpHMVyqv8HPl/XtC4mJOlpRLuSYx1UcbiLZbiKN9QTCZvhPaG5DyPDQ5obWOqOE+jfhzf8fcn2hBMWoGFcJtfTq3tY0dFVNlvzGtAgde3Zgq2khoy09fFXst5AbksnILSZjiKFwQ72quRTVuN9Zkofh1lJs9vQShojVfNV1dELxcFplnKKC4HKm4ULJCbOu226GVqKJ/Qi1Zu6jN7y5oIOlvhWpuy9abYvNPECXE2oKZFqkIN1lObSUuBEspoeXHUw551iccH0twbZmLHn5OLPyEZvbafVAXbZAZs4APBm56NleMgcOpXnvNlpaq1EViQ6vnGb89VxjMM9NuCCTmMPCoIADmyohCgKe5hT03N/o/+lRpi7dVIq5fpH8uBO3PSM5X9who0y53QXBAdlI5aU484uxZxvrj6jplHcm6I1Fhfpskd0FAvWZejKMFszPoClbwi/Hae1dbfcfln83JLUMOC3x+TTgg94bCIJgAd4DXuqd3E5RNgJG/uOfkFP/+7L6xLl0TJqNv93UbYLHeLns978AQOm0gxn42Yc4J6WHeqr/diObXn+Ubzs2ELGJNBZYCRDBeuEtbH3pkbRtj9wg8PpjFoo6QKlrZVg93PSa8dbdeXSMj6eIuEaPYf0EF9EGM4YbU0Sig4uxBmJ4Nu0iOmkfOnKMF1IQBEgQ2EwvnEZut8DQVZUURn+fDwNIC730lrACAb0vRHpWRj4zT74Sr91YfPPsfVNPUy1D2acGchJhPHd1G48/piaJpMadc2Xa9j0Ldmyv0UNS0VGJpusEu9p4OusixlvKGeoZjC0GHdvN6SClTNXhdfDKfSqLznkTgOiAPGrzJOIixGSoi7XSppqKQbE7sObkYg3GsKRwHeiigFVQyO4Gb8DgHJBz+k+vyeL/vKAwdYxNSo+2huvr0PdUI1oshDJsCLIFS9SYH6YDnpBgCD0cobutkfB2w4BwJMJ2PaCAPai74bYWolV7SOVF0iWRNrcZrtFl0QiFCemv/y5XkLhk9Hqkqkd3tlnebEkoomgsnOTZ6F2SrSXOvz9480LVDL9mBKBU85JX68dd1UpuTTcKElKi6CD1HEI2AU9IwKXKhFwKIauA6AuQ40sg6za34m9vRGjrpLtyOx6/hjMm4nZ4KRowog+bJIC3qp14LEKLHEboDhDVYoQlDUvUPLJO4locvcKEPVwcAVNxa2ocPRDA11idBn4JYEOhJdpOTaQJa0cQuUeZ6kA4QpsbfC6RHFs2uboTh9/0JDLruymuDaO2tKI09M01/ifl31UYdwFzBEGoAA5J/I0gCJMFQXgmsc0S4ADgdEEQNif+jU/89qogCL8AvwA5wG38H8vkSuNBRuPmAll44SV0ugSDfAd4+uv7uOK+Q5M5jR7Ru3zsu01nwro2pi44l9lfbWbIPjMBKM8cQm2eeTs9fhUpEfp488D0xebk429n9v6nsOG7d5m8yU92wJyMDQUWTl7SxAq3UVY3Zb/FtM82OswRRQRJona/oVR4w+zqNFJBOzvTGwz7k4zpv41o67vhT+TkDuzzvdbcwrRFdzNgu9ETUD5yep9tGgqtVC2aRtiR4Cju1bj3wbZ30v6eNunoNGt9dM5oJFGi1G+j+owz2bryHT51VwHQnsIpvr11S1pjVKp0HziOf5yQgW6RcWoKJe0C2T7zGEFfG6E9RvgktXRTH1JKpNU0HDIsGTik/smAehZBtaBvBdVviSJZUGURzdJX2dhkG5IoYXd4yCoZgtXuREokrntnSXpyMkIonLRs9URTpTWxuPXc03hiDoej5tyN2mVKVNNbFqw2LIoVJQEk2LPwl8TcxEWDBc46LKUip830noUEIKBFsiQ9PpV0BSeIIuEhxVjz+qY0UyvUALTmVlID2ZFwgD1iO7U5Qpq3Z8vOxVi+daKNDURamtBdphKIBbqxJXDCrDFAELCICoGuNnyV24mFzX01Zhp5FgFwtQUpDFnotkMo20GkOCdtfvY892CvLkTNYczzCKYBouoJ6HckRFGkM9tKXbaA3wYOf4zSZp3C+gixjjZCCSw7LXHvJN1AA7DUteBu8uPpiCRDUmIiCe/CiiP2322d+7eOrut6m67rB+u6PjQRumpPfL9e1/WzE59f0XVd0XV9fMq/zYnfDtJ1fUwixHWyruv+3znc/47YbSCJZGaaaZkb9zyK16/jSOiQg9oLuPKVANHaurSh5UsNB0mWLGzaupIHHz6JxtYqwitfwnnWqcz5egsjtxshl5/bjdK9Ri8cWjonbT8DL3oY1ysfMyyYAKZLiQGXi3m847mK/WxGEnnjm48x+G2j5BZRRLBYuPmQdjYOEXHJRlbRpfxztNrb55mubNnKz9N+k5etJNzd1XsI7cHWtL8/ym/ss83WrCBXDd2QVBid0fT9DPquCoAl1xpNgGsHxdKY0qJeOzWnzKZxrFF+GddijFtnHDcV7HBI+WQsKVbi+iHmshr67EvueLgdJRw3iITiKnpKg5OiickwhJryfVdrffKlbHMbCVxfkwn9niq6JBK0gM//+xZeVVUVoxOx7i45ZlRJReP9hPwS4YZAF627txIKdBHXYiz78ku27TJrQq688komH3EU+x+5gJPOOZ9On48OF9SonSz527VMOfYYJi9cyCFz5uL3+3EXDsQ2ahSuROVcwGrQ0KodHUnFEJeg2SvQkGV88eEXX/Lz3t0obT4cFhe/btzC1OnTmLZoEROOPppb7jQYIT9ctYo77rkn7SqknGxcmXlp3wkIOHULyu/AuXTl9K+YBUFgQBtkhWWcKT0z8c5OdF0nqkZwx2Q8mhW1wGzOVEQlrQJKR6c72o0Wj6GE46ZHABRrGWlKinAU24CBZNmyyNEcpPo2ssXw5LK70j0GLcfInFtt5rvXQ+9rlSyAgJKRSW5mcRpIpKDrSAmSJCA5/7x+HYsvRDSFolbr5WnGtFif7/7T8ofr9K5yh/lhsE4kBefm3PT1k3xLNggCgiXdpF2xxgCiq+isIL7pZ+Y+vpGu6l1c8u4ZrKz8lBeO3odXjjSgnMuzhgCQac/CveLHtP0E9+5my5512PIMpbW3xLTKQ7t3oV57B47OMPLofbAkwNoGfPeVQRivqrzXegKnx6dSkFGMlJlJcQo5zm/J3EpzYr9x/mHJz7uKRLLWV+Lr6ktAk5k3kNoTzA7xYS19Tfy5XaV8svUIshKxEY/NCE3V7mskHXuqpB571cFbd8bx/7wZXddZO0Lg/oUiX4yBq4q+YXepYe0O8Q4hN0FRGoiZVrLrtJP45dxZyb/l0WZ9uXeICZ8d1+K0esCXUuAm2+zoXiMUojvMhSqzPZpk2Oux3H6L01tRrNidHrzBf71KSsnMMnIDXg+WAf1XSYmajjOoIcQ1opLAe998xY9tptKaM2cO6z//jB9WfsHgQWXc+8wzqCK88cSrFOUX8NUn77P+vfd4/PFHURSFUDRAi68hSTvqjBgc4JCSzBZFnLoFp24hYIUPV65k145KALSAn3Ouvpp/XH8D65YuZf1777F4yRIA5s2ezTWXXQaAz2osXAF/B6Fwup2naSrqrj34WxroLUKesch72oxnLOSaHluHywh5iZqOwx8zjLuESMEIgqxgszjRdI14PEp3Yzp3SY/RErYAoohFtOB0epFzc1Es5r7URFLdn/hK0HWkti5CDXWEq/ciJzjGATSrQsjStwtdT+wjNQkdyzPGBeNBNE3FubsRS2Ut9pCKKhvju90yAkJSUSAI6AnYmFAsiFBckGQA7YEGiWQZijOux5Mhsv+W/OHQasuaoaxZJ9TdgS3TiM1mVBsu98ZhMiOBR7I3sfHWEj4pK0sbO/w+I0VTnlGO15tPHVBqL+LJR1WsdBDZaVohmcPH0Dz0O6wV1Wyz+6k8vpTDawyrJHDxiZQNH8fmvBCXXSvz2hGvJMc1RloJ22BZaQ3vT9jDmtHXsrZuDw+/fgpPXPA5qCqtjz5Klb8a5cwT+MtlNh7IizH+n1z32Ld/SvI5TN9hnufAJo14flZaEUCPKE43hRdczKoZA5h98euU7gnA/unb7N26FvGDZbj/fA4ZWVlYi4pp/vNCNmW18+A+ezl3hM58ILc6QafanIUgSURuupAFG+uZrExh7o+/EivUUYHdnbv4daqXScuaabfE6Dmr9z97hPa1nzIu8ff4901inni2GW6xy3ak3FJEUeS9+40kvaqrhONh7LINCKOGQ4wYbmPoSDvLntxB7miJaSU2Pn63A8ESQFD6Ks9hU3Mpz/zXqqTi8TgnnXQSG378kZFlZfzj8UfY/VMN1111HX6/n5ycHJ78+8Pk5+Uy98ijGTN0KGs3b2bhMcfw2cqvWPPjeh5/5BneeecdDj30UHZ27MQh60yeNIFl735Ajg8a99YwKCcH0elit6ebYd5RWGUrvoYmPnzhVR5983Xi4ShTxozh4b/+FUmSyJ06lT+ffDKffPstDquVtx9/nMpdu/joq6/4ZsMG7nrqKV5/8EFa2tooyMmhMROCVpmRo6bC9l28/P77bN67l388/TSXX3cLmhCjcvN2Wro6ef6FF3nppZdYu3YtU6dO5Ykrr0xa0akSkFQcmEnjcGcbFo8TwRcg02+g8PZIC2a1kmizES3KwSpZiXe1gwqZKSmSoKQSyXBgCUSJW2S8pUYXdyAWoNMRo1AU+vCDuFKcPrG9C90qI4giLW6NrE7jey0awW83itFSMaGVbuM8A4pZJdWid2N3gsvuQOwVWNQVGeJRVIeVaCgAWhQroAsCe7xRLKpAUUYWFosNzRZBC7abHpPfCKc5nZlowu8Xr/xfyx/Ow1AWzwfAo/SFBB96loFRf3T+wVxScEJa6ATAmWXEZG0jR1LVVQVAW8AIn8iSDIppnX5Y1s794wywwtz5x9DQWcMlYw28pOLFJ1EwZX9Gx/K49/M8al95LjluyPRDyVy1nPkzzuTuyFGsy2xjfWg7F/0jwW8tiuwsVdjrCOKOiiyIjcKj/Wb7SlKqXL0SkJkZ6IJRHVN53qGo7r5JweaanUQOWszsi18HYF1oW59t6ruNsF0PJpLfDq/WfcBRt63mzhdUBhSlwy9sVevQ43GOXQuD730H3+efE/pyFW1dDbz456FExg6h/fiDOfumLIYMmZIcd/AmlYW/pPfFtO5jKPyV3RuS30W1KHpdQ5KkBwzL2qaJxGNRtHgsrZlKUHUygilgc/pv1Lkn4totfSuL+8iOHTv485//zPefLcflcvLUk0/zl/MvZOnSpWzYsIEzzzyTm+64Ey3DhSZAGyG+/v4bzjxzCUfMns3dl17Opk2bGDzYwC4rEbLJEdy8/v5y5h5uVIYtWTyfB557jsMPX8DLN/2DvRVGjmbvnlqWfvYZq95+m3VLlyJJEq9/ZOBuBUIhpo4dy5ovPmX6lEk8/cZrzBg3jiMPPJA7/vIX1i1dSnlJCReecgrj5h/NJadewsrH3qa1xmzi0xIrvRCNEWv189Urr/DAnXdx9NFHc9lll7FlyxZ+/fVXftq+vQ8lLgDt6dWE1hh02MwHIkSNkIwqi+TGzecddCm0tNfiD3ZitbmwWtLnq2NAKdmqHVGHDLuXmvbd1HZUoQUD2Fp86GrfclRNEohlmeuAtbAYx8h9kLtNTSLHNHK7IN/ey6CyJcAZHeaEKOoUyZI8uL256IKQBqooh6LookimX4dBJViKjBCsiMAgPZtSdylOm5tgZQWB7jaaC+zJXIqiQsApEXRb6Mj+5+/6/6X84TyMZ9uWcypGGakjgZ4UdVqwBKJEnnwR5v+Jkq8ryLjvYbQfjkHymNZrp1Vl5xABr6eFfDWCAnSE27EBlV27+ctlGrIqsR44IDCACRXlQCWSLvCnTzUaRhXAJfDDcfOwHHogM8fMo3RDPWyoh8seBCDc3UX1htUM/KEG50vv0ebN45jvzAVNkGXmf2Yonu6vvmLOrV9QOPZP/XfKpMie286g5LiHAPjL2RIPPNOVtIH2fPgmHXNOxZEzKG1MhminO6UAJm/BsfSWSXmTaGIZWQ4jtGBvDXDZB8YCYInDwNW7YMkknn7icFbsXcFfJg1kajRM2yN/B2CHfzcVEwUKh3m466ynAci+/wfmPN1O5767ySk1Smtli5V4yLDqOnPteFtC5Gw1Qh5H1uUAhuKK2RTEUJAocRZePhGAuK+LWLUR5tGcNsSAuSDMO7UEPbGIzV2UCQOLcbr69qTo8TihqggZ/XUv95KSkhJmzpxJd2MNx8+fz/1PPsW2nRXMmWPkslRVJSfLS6h6L+g6x889EjGmktEZQ4yrkOCuFnoW3KYW7nrmWRB05s2ZhR6HqYfMYe3mNXz/3qes/u57ps6Ywdq1a1mxehWbtm5l//kLQNMJRiNkDh5Ic6aIRVE4YtYs4haZsftNZ+WXq9LOe2+eQHGbzsWXnc/sk+bxyyff8dbyD3n7k0/5LMHrISrG9avRKEfsvz9+j8ywiWPJz89nzJgxAOyzz0j21tUxUg31aYN0RAVAJ2glmTN0dZjPQxFl4gUFiBYZzZ8C2dLhpziqI4oQLcgkFg1jT/mdYAi1uRkBiLa1kiPJ6DYLVreCEtQQ9X5CiZpO0K0QBArboSvYji9QR5HfzGL0hPbijY1Yss2cSSDTjssXQAgEwWkoDS0eRQhH6Witw5NVgM+up3WIBy0alkgIW1xAQgDZqLYSmlpRacWX7UERZARBQ5cFE5FW1XEEVQJ+H7FQNzj7FhP8p+QPpzBOXWksZlE9luzPch1wANFPvsBVY1iln1YsZ18MlNBU0To6mNSp4260U3jk6UTHzUHPzWIvUJ45mBPXfk1Ij8I54Npag/qTERfOfMiw0Au3GEnjsdUCYiSbXZ2VZAK6w7Skan9eS+GF97F9mJtsB4zwe2gBHvzLIKNrEXjrwfMpHD8DV1fUUFYdFYxhzO9e98LQyCTk28ytpkVXWQCHb9DJVvsmIcVeFuKYcF+K1gatg2iumwgxLKQn8AF+atzEgSxhvze3c2Stm/32OwBBEPANzqd93nRmnH4FsyQLLTt+4ofp41GuuoDYu+/gBlqb9iQVxuuH2tgZ07n2bfC2pHtL0fwsrj5B5ZYMG27ZSViQkVOqnSLxSNKVlgTJXAwKc9FCoeRLYMnMRulHWYDJ2mfvCEBhv5skpedFd+QWIMZVnG4XI0ftw7oEXhhAuLYG3e9HRCBLk1HiOnHFgq7IBDwKqbVSz7/7Dh99+QUfvf0mzp6mt7jK4JIR5B8ucMxBhyBlePj444/RNI2Tjz6aK2+6EneXYa0HM+1kePNRZBlBEBBlBY/Ng6xLBMsLkqW5ufZcNKEZaxxmeEqYcdxxnHnssQycNYu2HsyqBCCgKMtYLRajwAAda8q7IooSEbetX+4QXRQQVLPABMASMw2iqBajOdSItwVCXhvORMOgWXKs0+1rRY+m08LGmhqTz1HSQFAkREEmHA8bVKop+qLTBe6gsZ2nuh231wP4sHWFcUZVolYJJeGQaFbFKFHupW8s4TgCEI4Gk+fR4RLICoMS0xAx4ESiMknIfINrRSe2t5qwy07GwMHoAsmmSFmUEQURJRwlv06DFG9W0MEbEVHTi8z+4/KHC0n1iMduTuZrB28kLoI0zqhMGpdhJFEFJT0BOvACI+EnNrTwS7SK61qeoUUOErvybGzTp3LUN2GWfGtM7M3x3clxsaIcnj9EpDrXmPCCruO0uinNMCz67TcuSW5b4jGSo4VnnM2eV29gV8DoVxhSYILRjXnyK7pWfI5nv1ksffxY3GPG/9PrrbzqsuTnY1M8lrKOBK5/vG8fRkc4PXzw1Zv399nm5/EeTj07RNRrJObCDoVGr/l7Twf5yFV7KKroYP3rj6DYnUxa9gXOocPpqtvDhr9eTMNny3F3RoiHAsSzjTeltHBEcj9LMg/mwpxj+r22+pqtnLzRib0rTNjXAb1q4OVED0pXvpOw21zY2jRfEga8zWPE0zub+6+SQtOwd0f7hCn7k+rqatauXUtrSw1vfvwxYyaMprGlibVrDSyuWCzG1uq96F5PsuolHA9TlyNizfUiSy7ERL/Np59+yt9feoX3PlpOZsoCvHr5curWrEGSZKKxGDsqKiktLeXwI+bx/qpVBDsM07a9q4vWLbuI7alKjtWDQUItDcS7fXR0NeF2OOkKBXHsbcZmc/HFyq/RdZ2IApXV1YiSiNdthG7UuKGweuC+3aH0LnIwFKbFlYFiT0cGBpL8I6mip4RuBCC3ywjDZGQXJcOHmmQ0tPk9Mtl+geyghDrULPZQLDYkj7nCtuQo1LliaP2EGHNsOcn9CjqIHT6igwdgSeBGdWSZfpGii8h2O4olPRxq6TTur81hRiDycssQPR7sDk9PBBPJ6yXgSrfLJUSzSkqUEMqN67BIlmRPS59eHCAqqMSlf73o4v9C/nAK46+nSFx9ukRMMW/8iXuLkTX4+oBEg5qcCbKRAEuVTwa289UYge22dqJffcvJl39OS+UvnCS/wHeO+rRtRxx3DruW3oouCqg5Xo6afR7rrzvKmBC6ztb2bUmyoR1rPkqOiyXK6rw+jYO7S5Jx0KOu+jBt/9MKpjLIU8q14/5CqeufM+5Zlf7LGOUErLcv0resNsOdQ9xpjuuvce8Y74GsGfYkXtEI77nzihHv/SuRDOMFG+hJr+DyR7oJhnxceO04ci+8hx0vPkbe8nUEaqoovOtOxs1aTN7kmag2C6FcM74sPvcW7sfNvs/3H5zPKZcbHtDwapXJHxmlqKoWJ6joBESzPFESZRBFwrEQUoolnN0SRXY4CdpFIg4LsgoWvZ+4O/RJYv6eDB8+nMcee4wD9juUTp+Py489gTceeZSrr76acePGMX78eL7csJYai58e01UURFxxiWPmHMLdt9/GhAkGD/aFF15Id7ePIw87gkmHHMzp9xrIOTU1Dcw94wwmzz2cGYsXM2HCeI499lgGjxnBFTdexdEnnMTUY45h3jnnJNnlktcSjiFikA0Vt+mcNOdwHn7ueaYvXkzFtm28vnw54446igPmL+Ksa6/lhb//HUmSjMrBhNcZjZgVbKlMgGAsduGGerpb+1ZJ2bxmVVRcFtGzvNTlS3S4wOcgrXRa7zZDTqqoM9hVhteSgYqGqqvUdVbT5TDgTBhQSIc1RlyC2hwBt92L1+7FYXEhKIpZlQTEW428Y3WuQMydmN/RqIEBpesUiybYlBoKQSCEHkr3anv6J1I7yKN1dXTEfbQr0eSCL7V24vSbOFcRq4g4tByloCeGrCf7vYKxIKI3g2CGlY48U0H5SrOpKhDxeyzU9nXy/6PyhwtJjS4YR3TDZqLhIFansXgM/8JofMtc9h38CR7y/siAEwczstdYx7Pv0a3A6NmLsH29kbqgRpFUyKufDyMzRye1uDC7Syfzl2pa3DrU7Cbv+n9w1FGzkeaIhEeXM2jENLaXK7QNgKN/MRexxkATMrD7lacYUBNixN13Uc+baeehC7Cncw81y5/Hfv1DqM/ezeiZR//udXtsXuK0/+bvPXSvqWLNzUf47GUaL7mCgg17KelHMVUufw3x/mcY8NXnuAtK0Du7sL71Kd0ZFqxdIX5wNXNYyvYTc8cjReJcssx4oUZljyIo/Mjg4jFc4/qUs+RimneupTwcpal2B1lDZgAGF3h5Yh8acNAnDYSycoD0iiZnZh6SJyNpoQNEbCK12ToDW3RExWwzEzWdkBhHjmkUNRqWndXVf1b7X61/LysrY3uiGztSVZWMw48fPpyvv/7aPKf2VrRwmK9WrCBSWYlFVPA0BDho2Bg2vf8BlhHDkWSFyspK/Nt+JW63IhXm09heA206Jx+zkJPnziXmsqH4w4jlpQiCQMzXxZIZMzn2o1k4U7qFlQEDaPnBCIkJosiSo+az6NC56JEIMyZMYNMHHxAuysLa0M4L992bxv8uDBuMvnMXp8yfz9mjDO/7+TvvQQgauYcBJQP49VezK//5554jsm079KlLgrAaSSJMiapGjdRFseoloHYQVSBCHB1DjYZ87clwjxLT0Sv3EM/LoT3bQiQcY2CTTpfDQOQNdNZjjwvIKth0GXu9gbMVKMqiu8hJsdT3XDJ0G00ejQJ3LpaaZuI2BQGINNQlLWntN8pYhR6olPZWHG7D0FTDQTKiEI/qCNZ0YzOa6STisRFRIzR07CLHmUOuMx9d05EbEoUzThcWlwcbkJ2CEhAIdpEtOsmRveTofb22/6T84TyM4+/dyKkrNZwpwLg78g23dUKVYQUccdgFTDzl0j5jJze7OGyjjrCrmt0DFFacM552u4ayYasBBJciGz56nqybnyavCzxlRk+GsnwVoiSR8ezfyV98AiNz9iHDlZNG8zho9L5Id19P7jgDVuunSZl8MklI1maDEXBpCjQmG/ecyj+fRE3h30b43XPBkcQ8fffR3FbNazccR8EGIyy2oWlDn21q/UayuafhKOjvJGPFenKqDY8lZ0p6h/mOtu3IKdMuokbQ0enYu5OF969H+2EzXfsb+ZiSiNk7Uu4ehJY4RxHwfP4DJ7xhKIsPZtl46b6DaXcZdKy6z4ceNC1CCzI5PQUOYdMy9mUoKBE1GWPuckCH2BfOIlWC/4MilR7e+KgiJD3HHtGDQfB1E5WhtshCyC4aSqkn0Zni0UiChE22YvfHGNCWjlRgkY0T6ukfcWDBFgW73QyVxEWoi5gd7aoiEYqH+ngGdqcX0WJFcrkIek3PstNvNnBGo8b9EQQxCVFu740lJYiIuTkozr6ViFKnaVaJOgxs0ZFaOvCEEv0i0RgdOVbCDhl7Cry5Pzfx/NQoBdZcSqyGhZ4RNMbldOnJMtmcthgRNUooFkKNRvogNkheL0giGa0hiptV4hHjmqxZOVhKSpJ5GgA50X0vFaZXlfTkqayYYeueMJMtNUQnCGiSgLXNj6emg4KQlbIWcCXyS8nEdl4ODk8W7XW7iGzbTvd2s2y8sCWOu6mbUGsTkQSkzn9L/nAKo0eiuml9VV94FABCAjp42PJfKLvrrT5jKicZ1Qnb1n9OINPGqiFhGqwh3t1XYFtOmBtOlnjycOOWlmaWJ8cFDzQxqQIhH/ffehSfrXwaNv5K4fZW7NXmYq66bOwZl4szrwhEEbGti8l1NmwpoZKhK1ZwxHVPUJhguSt0/ZMsLNBwqVnhtHRmenjlKf+ndGp9s2mekMApq0wLK2v+gj7bzLn0PoZu/YXMwjKgb+hreI0x/uPLpvHsHJEdB5XTHTWPVdFZQUjR6Y74GLgnwAihkOmyAUuR2rgnIxK1999Ud2DGZIKbN5Hlh7jPh9bUQrjdvKdCOIqjxTimlJL91Jw2pKhJFeqICWnJ2FTpCWn0BqT8PVEkBU2WsNidKL2wqJKNe4g4RTsSIkIKj0d/5b2pmE1SXi7hDBuqz+gN6VFIcYtExOtAi5iVR1p2BnktKcUIkggZ7mTeSZUEdFFAq9xNUI8QCvtpVcwb4Q2YC6CUCGFG4wb/dUwRiSjp80lDp1Jqo0vsezN7AA0D/UdIsQgyubhwZOWllaVGE3D1NtlGtKGeWH091bm9jpsSNpIlGUWQcIcFcltjybJogBa1E1TjRIRYHFubn/CAHDosMXbG69Mwtno8DH9XOupBMC/RCGo152QSRiQWRBdgd4FAwwA7qstucITEVbQWYz+9S4615la62htwhQWDcEtLzwuBgYLQOz/3n5Y/nMJoLHOzeZCAajEf2NEt6V24X3/7Gs0/reszdsVQY0KWe8sZVwUPvCgyWhzA7NueYfzs49A9TraWGJO4p+PZZ4fKFSaekkUVuPBDjfG7NHZ37elzjJrN36KdeikVK98njsaoHSFyG0N8O81cqJ5seY9VnT9S0WGE0nZ17e6zn95y8CHnJD9vGZiyaAJ3vqiS0903Rt+bAGfyyIP7bPPr3h945cv7iSb6MCQpfWFc//37ALSWZ8HRh3DWrCuSZD/dE4Yw8YSLGfrjOgZfdi1gVHy1PG/0pbSlQJN8MCHOinLTOm0/0YRbsf2yi/NeaTcS05INyWLFZjU9pqiWwo2RUsiQ0RomlogtWLxZKDE9rWInVXRJJOSxovj/dbRQS0EhaJoB/+1O9+B6sKRkVSeztgslwY6HRSFil0gty1E1lbAaSVb6VOcKSC4XmSVDQO6ZxwnPQxGot4fRwsZ5Bq2gRtMXbtFuJyO7iKw8owtfUg2MJkE3ks22GJR29a+ce/J6SuIZ+mwaqpw+dwQdSgM2nNG+c6qH4jZmNcb3rnaNCipqaxtabT3BuGkwZCUohjX0BESGSnGmmR+LqVFURUruU5IUZEEiEksokRTlk5WwVyIOc642R9qw+COUtAlpWFI9Xdi2UHofR888CqfwrgQT2lASJEQEinwSGc3BJKZcz7npup5EKU4VJQ5SorhASlFaoQTBk0N29gGM/C35d5hUf0/+cAqjoAPG79FxpISkQnenI80OmLcI6cSFfcZetNFo3pFFmd21vxDeupWW6h24H3gF7act3PYPHw8/ZViG27oMZjlXCMZay9lUnpiwmgb5ubi8eZTPOIxvTxvPjptNvogBljzKmiHviKOpueFkKhMAg+1HmsjvB5zyOOFHnsI1cjQbTpqIu/ifQ4OsP8W8npteN72GzuGGlxKJ9Z3AHRkiS66VeeZQY5p8dvdFfbZpePs1pl30AqEOY3GPCzqtbnj+EJHvRgp4BhnewqkXfcJZF33ONzeejz0zl9JlH+C/7hxCRZl8/uXT7K7aBICqxpKEPT1Q7wDz5l3KAQvN40vvr0h+3uw0ji3U1NDc2Y5aUoiQYyZXFVcGvgGZ+DNtROzmIiFEYwgeNwEr6C1G0fFvwsDrRtdvD1XpvyJNgSZETafLplFl6eXBiQJIUjIsFI6HaMlRCOdn4B08ElkxlbVYXIg9pwBrAvF2YItOsGoPLbu3YikoRMnPx2JL4IqpMkNCniQUhiMC9q70ZxuPRWmr20X73h3JEFtP1ZCccGz0aJQuB0SzPXRkmMZVXDMWTrGkGD0zg5yQ3C8gntQdQoz29ZJarYmiji5jP6khvrhFQpBNReUoTMmZxVVaPAbsh01xIKsg7axK/qxIFqy5RgRAcrnptum02GKEvHbqi/t3Z3oY+sC4p46wjhSN05ZnnpQsWcDlMPhMUsTW0AmAPQWFOGPgYBAErJIFXdOwBeM4IkboLZDYTC4diJA4X8AIWRXnI9jtWO0u6mwhfA5QU3JmukVBJ9GU+i8oAl3XaWtrw2b7DTfu35A/XNI75u9GAaKREFY5Pcb62eUzGQmMPvasJOtbqvjWrcUCVHbtwiLbUDDi/N4PV1ExJI/UtHH5nIXsqW8h58VPiBdmU3z57Xz66wpOVuIsObODaydZODojixfKqsm3R5LctlpeNh3nLaRwzuEMGTScLa2/sqLmGxZ/B8wztrFKFqYUTCF/9P4MG90Lq+M3JCuc7gL77LAnX2DcjkZePFjkfLuOt9cYLw7ulY+jqngLsJk8S1+k1skFU2hmRRIA0ZqTh37bFcx79k3Wj5YYfdgJadsH/B10xH0cuPZY7nsmzk/zDmDkC1/TOGskjmnTKBk6k863FvJ95UpyywqTcAzyE68jbExSqZARhKAFHFEYOvEQ+PUTpCeepH5ICbsa92BR7HgcRjJS1zXCsRBdUR+ZFi+0dZi4Slocf6ADZzBR9RLoTpZMporBf92ELolYtvXteO9PIm0ttEdiEHCio7Ot2RzXGekkEo+QE43gD/uwN8QJxIOIaitidBsOT3bSW4uoESRBQovFEBLIsbokIqgaFW1thIiS15yHLMrEAn7o8qFZZMRo/2Q7mq/TMFziKqLaf1I3aAE6IKI0keXKpaXJCPGJ8RiStZG2YCtqLEpmAHS/D0tKvkJT46hNzcT9Xdhb00M5sW4/vm5/2nfdDhF34v7LkTjx5kS+RY1Cq3G9fqeEW8im299KvLMDIdQr3JXlJdjeiMMXwd/ZhD0ji7gWx9mlga6zvdGkNo01mYUSmiQm70HM30lUjZIh5tOR2EaIxwh2t6NaZTJT8mKR5kbEuIYei2BJEGtFAj78UT+WuB9nWytqU3pBBkCwqwWHxYnYFEfqNMaF4iE6wh14A51I4Rid4RCaKOBMzLNYfT2qCPGon3A0SM62f27n22w2BvTCL/vfkD+cwvjhyEHMXLaHmBajd/6y/qe16LrOU5cfxvCMIRx7Z3p1UkO+QsgN+y06E+vXG6gDhnqH0AIMyizn3mOdFNQFGQlk55VSNcDILbxh+Ynjzl3HQTdfiVu083DmuQxShrPtq/d45uZ2tIwoJIqc6q1Bzs1czqlPrWbMpk4O/egHor8GaK39lEF3GEih6686nMJBxVSveJmqR+5n9J0PM3L0LH5Pii+7gs4LLgdgxXiBGdt1xlUZq+aSk26jKKes76C2DkpvfZUe/2XUwtP7bFLvr0PGAEZTMOK0yrKVeH+u4fCf4auZz3Lo3D/z48IR5Fe2ceB5txBt9/P6fTpSDOxKOSHhW8oGT+TOCbWcVi7yyeYnWLv1M0YOnk5OAuNq5y9fY2lqRrIacBKyBntLbYysCCdhHwSfjzEDhrDrxONRDj6AobffC8Avn7+J/eK/YVNkHJecR+i+R5Pn33r2PHKeMUuWC26+mczjZvS5zpi/m8pjF9Fx1lGMu/KePr/3J7uveJLmtathylg8P+xk5HcmJ3rVtnX4Az5GTz4QAD0WY9dhcwk6ZZSKarI/XkpeuVGnt3zOGCJTRjH40qtZ8cBFHPWDDleei2dLDZGf1pJZ14H9zacpG7cf3798Pxm3P0O7VyKr07Cg1501jf1WtxKrNLzV4EUnMrhoDLGWZlofeDB5Ts37jSDvW2NhHfX5R9QeeiQA8jFHEn/XKP0u/34NVm8WmxfNw/rrLuqywHbXDew3+cTkfkKdbVQtWoL14rMY/ucr0u7Jj4fuj6u6lW3D7IzcaSzA0StPQLnXaG4VnrmHwFVXsWqsQJmayYQfjGIS5dKTiK3+kazTTuWzjrU0rvqUJV+bHsJdD07lxNcbyPihhu3TM1h42CWEdu5kd7Qe7wffMvrXLcltty00+3nuuXwg5/+Yifvrn/j1rpOoKVI46Jw3cbUZ56b8407kP1/LVzPdnP+s2Xi5bOsHDL3+Rb6+9ADOPe9JAL6YM4lINIjw6K1MGrmQN/5+CRO/Msvt62eNwPXTLk46X+eKyVdw2sjT0DWNHyeOwiGC5ZG7sD34IqI3g8HPPp8c991pi2gfV8q8pz/uZ5b9Z+UPF5La/1djkXRYzJhyTb5hfZ/xhWFpHNacz/DdfUMPQ93lDAt5kSMqe+RO9o7JpRPDGhVFmQeu+pKrHjGs4E0fvkD27UYs/qS6MtzdcSx/uZN4WzuFVz2Gdc1mBjoM+G6xy7S4BnYpvP3tJA6ry2FAp8zGNx+jYFszbfuYie1XbJtYL9fg7lYZXRHB+S9g5D9qXZP8fOZNb6cBr8mX3kagrrrPmLZQOpT364HVfbap8xkYVz1cInG/H++XJjNf7h6jWureEZVcMa+D5fyETbQgxVRig4qITx3DpucvpmrOSMq/3oNWXcvRd3zLI0+qDGxOaTA87nSyZ8zCGTETpyMrjItQP/6SnfuWsHq0QKXHqKVPLYPNcRr9I0IsTkPF5uT3e8odOAPmdh9NFlg2uv8qKcFm49OJAntXftjv7/3JiyNb0MJhmndv5YfcdODCyPOvIVx9F7W7fuKXUSNZ8/jfiNXXExM1rCNGkOk0e14Gd1oZL5UxvFY3lAVwmu01Tpm+iazEdgVWw7/dJ9eAVneNmwDA2hECT2f+zAMHp/BBFFp5MH8TlxWvpj6lGTv/mmtQBpagTBjHjxedlvy+ssPkW2mWjLyCTTdszXHnXcN+B5jKAkCRLYjFRXhzivrelGbD47BkmAcuSCgLMKqSXrtoH2zDRjA+w0Qhdj30KvZNO9mzayOnLLqFs899Im23V39soXSXcW4zvu9iw+q32P3hGwTCviS/eY9IGWbp9Jn1Q6iYZIRlD6hUOOnlWqwpIbyckcZ9PHBNekjRnoBB2S9khs0GDZtCeRNM+mgXaizK8Nr08JG3shlPVOb5L4YwY2tC2QkC7jB4g1BcHWCvby/RNd/z3FXzkuMyfRqDv9nD+nuuZf0B0/rc0v+k/OEUhra7CkhvNqo5ZTZtWUbsVNNUPII9DVSsR1p8DYhtnWz96BX8I0t48uRsal0x2l2wO1LLzmnT2TnVeKAlTpPLwbK9iniZ8fJ0JEiBtnXsSHYgf7e/GeqJdLajf7MO+8SJZF11OSSSXGOuuzO5zT9eUDhrg4eyUfuSdeaZFPYC+OtP5i41FULNwkXJzztKJBRfkA5/a58x3l4832O+78vAO+uYi8m//VacbuMaxF717gOyygB46844b90Zx/LKctqtMe5cLHLx4U184tzFQz89yt7arRz1VjWj6mXcFiO84Y+aitQxexY10/qSPAE4xo/nlf1UHBFoWrOSQNRPZVdl8nen1QiXVRWIuBMlzgDrLjmIDLd574ujTsZq5nNLFVlWOLD4AEa1/3N2wx7Zb9SRZAZg5JKzGfKPJ9N+q+isxBfpwiLbkFVwKE6+PW083508jlvOy6AjJVoaOXcJwsH7Ur17c/K7v38/gnM35/CLuxOARouxyLXoPkLZLtoTDHsztus8c1+IOZ+az86l29h/U5RF3wtcep7M62eUAbDyujPYRC11u3+icIc5H4bmmygDzt3Gfl4+xFAYrXfcxU+r00myAorGolOb+WJM33i7y2t4jIN/rO/zG0Cxq4grK4Zx+Ivb0M49keZsMwginbaEMfseza6nH6H28r/w1n7m8iU0t9PmMD2OzH0PIDB7EuOyx6QVQADceEQ3WxPrfM7rKxn6+Gc07j+CbbWb6F7xBcUPPmBei0tmZxHsGZ6+Hlhv/QcAWldn8rvqq48jaIFNTRsJdrfjrGzg8/kDqDvKqJJ01LVDMITzx+04mwwDQhAEWs84AoCfWn4i12EYAGO+ru1zb9paa7C0/c945f+35d9SGIIgZAmCsEIQhIrE//0C8QiCoKaw7S1L+X6QIAjrBEGoFAThzQSd6/+pVI7NYWuJEbvskUOHHEF2e4x7F8lo6Oxs3kptpG/88YNjDCu/LKOMKbFinvUdy8TymQjLnmXEsWembZs1ZhLdiw8BoNoZ4unjMoj97WK8NqOLdJB3EFXdRk316KNMa64paBz3cfVLjhOfZmiWkTT+9i4T2iNQu5dd1T+x0d3KCWWfsFtJh/DoTwpb+o9nD68xXrJ8Z194c6lXRcbAeF8luiMjyFtDWtESeP+Sx0PDxabLv7UlnXV3mjwElyuLGYsu5J71Q1mwK4sXH1Q5YHU7Xdk2KsI17BhoKJ22AjOPtOr2i5AefzX5d8u589k90Jgujm9/5pZ76plSoTNJLMNlcTE8y4QVqQ0YvSLui8/HO9XsCzl8TYg6p+FJWl5+lPE/+xm4vu+LCkYS2LZ8NUpXoN/f+5Oypz4DoH3TD2Ss2JCWsBxz5yO433+JLEdiPmSWc861rzN56IEM/bnD6NNIyJ8d77HUsQ21OI+KhKPpXvMrY9/9BUu+YR0LbkMpNo0r5pzzNPbWpt/3EXvNxdT76TpGVIQZvb6dt+6Mc8LzVVTnwKxtIroArnCv0iWr+VpaEqRIB80wc1PB6vRqP6suca/jFKYK5fSW1oF9y5Kbzj4y+bkqWEvgnfcBeGDzw2R3JDzXsiJ2HT+d2NCB1O7+CWtrN3NueTo57p3JMfbOMt6VdVM8TDr1Mg6560UqWrcT1tKjBceu0dmnBqqHe+nMkHGH4cHBFWhZxvy+D7OgIrJ9O8PqIbs+Pe/i7DRyKKsGm7mUj5Y9wJOHi2gnL8CR6CER9tbR/vPGtLHLpwpszDb3d53LmCd5zvzkuKL9zCrArUOtNIzKZ9bp11F617197t9/Uv5dD+Ma4Etd14cCXyb+7k9CKWx7qS3JdwMP6ro+BOgAzvo3z+efyoRnX2fauyuwp8AjN11qxPYvGn8hoiCSM2AoWQOH9Rl76YhzCV37Jxz77cf2dZ/SdPvtNFf8gmNbNWKvhWSLXsdZQ76iKg9KhCwOfnkbf9v1WJLxzWFxUTpovLHxq+8lxw1wGYmqU3fkc9/n+VR2GXHnsWtNCzGmqbQEmsna28mlq5w4u36jeSBFehbN35JwH0Y4aHfo3LlYZEOC3a6/xr29779G7hUPE/EnLB9d5xb1A1aPNsa4Sa/UqGjfiaXdz6HXLsf9w3ZCe3aho9PuhkeuG0lg/7FYPBmErALDi8Ymx01r9VBeaywedVlwmftD2u5LYHvFUnpqvCrBOy5FON6cZnmDx1Bx0BC6X3mDHd0mm13GW1+izJjCy7NFPnjIqMBa37i+/xsk/s9flaomIx8gff0j6n1PJOlTAWLhIOHuLtoihrLfvHsNHx4+AemRFzjmuZ14u03l8vTqYSze7mXUjHkcvWqbwV2eaKCb6DWs/8KIcZ+n2kfy9bDHGTvsgLRz2THEfA7hWIgtrVto9JtW/sBWECePY8xeHUcvbKhvi81wjC/HeG8GPPJ+8rtR2fukbS+GopTe8DzutVvoLU8MNhvPXj1Q5IxLJZ4aWU/1e3fxxIMHYhlpKvorPreZ1VtV9VReezlbv/mAacecj/voo3Df/QJ3Lha59jSJhWfeyYGHnk349PkseexT3n35Bu4+awy/Tszi82PSEQpGVxvX9/ll+9J2zyU0TS7jhg0ljIwb1v3ht61MbpsRN5Slpzu94qun+fRg1aSyPXelzNVt0zhi0gloCcyxOZt1xuzVeWquyKaHzsD+wiOMvOluRh1hhvGeeN84bpGrmFtPs3LCVRL3HGEqua8u3Z/HT89lfUY7TxeYyfv/hvy7CmM+8GLi84uQLPb5pyIYLY4HAT0AQf+j8f+vsvr4Q+meModoCsevmgC7s/31IdRIhEFPP0P5bXf1Gbvz73fR8PxTbO7eRtgq0FhgpW7vr1gvuJkdXyxN23Zgk8qb9+qUNYPU1M6werj9ZZU2IcDNJ4psHCLgKCtnS5lEh8/0ZuIWiejgYmztATK21qLuY0xIIdt03pxWF5PzJ1PUJTJ0VWUab8BvidPy2zSuu/Ohk76x+5zMIhaeehv5ifh4f1hSM6Xh7FMDtkR5oR6N8vhjKrMSuaJhJ/4pbftAxE9TZw3R3YZVWtFRga5Du6+Jp7MuYqZlH4YVjMEe0WndaPbCSLqI6jCOUdwOr9ynMmXJ3QBEy4uoKbJQkwNVRRIXNz/K24FvkmMzikqRZs2gbGsbxY1mKLI710mRkMkpqzQO36Dz7YwM8s/8DZtFEPr//nck22NY/+6iUiyCjJjyum3/29VET70Ii9PDr4cPwzpkKIP3hIm1GaGgZr9Jhyv+8DNqVTWVm75i8+iRyJpBOwvwrm6UIzd0Gp5RzbqVVJ92WtqcUm0Wls40jy25PWTYMrCJ6WUf5038ifpM2J3S1KwJcNCh5jP05huL7w7fLgPFFajqSu8+9sf8aAL83PpLn3tyY5epyE76SuOxFSXccPkmBi68hvMu+4oyOR/P+cbxUmlVd5bbOGSzzuhwNg3DsnlvSDvyZ99w7dsad76oIj76Ml+/8zC2Fz5g1dH7MrQ6zoJ1cNYJ93Dl9cvTzqHLYZS5nn3ex4jfbeCVkmpcv1Sx07+H2jyR3JQmx4BqrBM/T0uf+z1l6PrX5hwNxYNEv13LJ5csIqSmV9qN1gp5ovIlzq+4gxEvfIPnJ9MrE+qaWD5V4OsJCmeWn8iJrcMYtsF8fmde+y23XPkr7W++weDrX+hzT/+T8u8qjHxd13sQxhqB3wJqtwmCsF4QhO8FQViQ+C4b6NT1pNlVC/QfQP5flIm7jIUsNSlaeMFF1BUalkRnpIOL7pvNR6ue6jNWqmmivBGG/dLB1AXnMvurzYwZa4SdSj2lNGWZt9OhysnO8RcON1/MPE8Rp558L2NHHsiOLd8wqkqlpMOM+zflWzh5SROrM5vwRX1MnXwUeyYV0SabXkTNtFIqCjR2tBnWxt7uvgnr3pI3cd/f/K3skUcpKesLj641NDPiqOsYsMUoqRw8pm8Jb22Zi6pF09B6mrd6WeLfVKVzLkzdfwnOFMiHUdmjEQWBoUI+1WecyeYPnuUTdxUArQHTq9rTsYuarP5r0LtnjOLZM4vpGlvGIcEynnnBwaLVpjW/+9fvGHjzywBYG83wXeszN1L/rlkJN2/AHMY4TYsxTRLX1XbSnP5/70fcxWX4Mq10ThoMarqFOjxzOF6rl8zMAhY/+AFTZxshHk8iRJW6WEbjYXZ2VqA2NmHtuaxi41UbXm18oceMRa4zASK5p8GElmgYU8id7bPNg48axsD8YWTlGN7s3sRaeE39BLqc0JGpMOBTI7kv6hBfYRY7CHXGQjZAyU0WH3QL6d6pMzuf7R/cRvnZfft2tI+/TPvbsaUq7e+d61dwkvAsV5wlsTVsLqr5CxcDECHGjvdfYp8X1xCaYyaAa35YyZDvDKTh8kYoyBiAoOmsvuMSvjx9Xtox/nGkyK9lxvMc9OJXXPhDFjuKoXXBvmy879Q0YFItEUasLEo3GMITjAhEtW4WhjQHjffEK7txe3L56OxR/PUUiRUTBPb9vI4nH1V54PZG4m8v5+e1ycg8umbAmgxxlVF88wsc9dw2DvvM3K/NZ9zf6cIQRvx+oOD/XP6pwhAE4QtBEH7t59/81O10I0D7W10lpbquTwZOBB4SBGHw//REBUH4U0LprG/phb75P9pPglPYmoKKefO2ByluMF44l+Lirx/aGL2qL2bLkL8biS5JlNm8dSUPPnwS7V6J8MqXcBxyEAd+t4WR243a6b0BMxa+cNBRyc+R2hoGnXUP1jWbGRAzrH6x03T5y4Rc3vFcxVR5CHaLg42fvMigDfU4A+YC+PBBIVaPItn78K9gSb00K6XiaPXKtN/aXnqJQHvfnE1bID3J/XZx3/j++rxurhq6IYnaKfSyxPO+MZTakmtlllwr88kEHado3vtopoOaUw+ieaxhK8S1GKPWGjZIWQrSbcnQiQzINafN5kHmcfwrV3HjnVWMXllF5aZV0NqO1m3e0yzNllzcmkPm3Nnx9IPYEg1UH04R6Hx7KV88dm2fa+y5rl9KBdbt+KLf3/uTT+2VBPUIdbt/RtD0NKgTVVfRdZ2OzkaePWUKn75peLQ9ned5NtOitYgWhmeNYIDXSPr/Okji+JOa+ettQxnUYrzCBQlGuPFHn8GIbVuZGjc8ga9HCbw3oB7/chMRudWt8/Q8CzecZlx7aQtUD7RR9skvTCqayjTKeeO168379JOp9H3dhgfkCCXO89abmXm8mV8DkDSB6VoZBXpfLKkeWX3u1H6/lwSJR5/UOL6mmFE5o5PfB977AICaQB0zIgMY1AT6Necnfx/gLkkWSwBs6UoAQG7bhrMifZW9wzeHaTtMhWyta0X400nMHXAIf/ZPQYibv3lzjXl5zPJ0rLjYOQYlQekoswS7NDFfy9yl6LJEwdz5nLHoNnJt/1977x0eVbW+f3/2zGQmvfdeSEjohN57k2YDQRCxoAgW7GLvXbFjF1RAQVFAlCJNkN5LIKT33tskU/b7x5rMnmES9Xv06Pm95r6uXJnZbdZee+21nno/jsSetizOKmDUaZnQ/RnWSp7lzY5Eofn1+chm838ti/uP4HcXDFmWx8qy3K2Nvw1AiSRJIQCW/45hNOIaBZb/mcBuoDdQAXhLktQaBhFOa9m0tq/xoSzLfWVZ7hsQ4Gga+aM461JJSgSYbFgob/1ZkfBl2YyTyglPd8cktd1HhdkpqzaLlpNnmLj8OBnnfuWu9TdwtuQUn03vwqrLhD03yFMJg3X7VpmgS6vzoaiEC4WnrKGFedHKhN+Yk4lp6fO4NJpw69YDybKYeH+s5A6sqLycu/RDCfeLQe3jg7/771fgGpCjOC73XD3a+jk9TEXA5sOUFzrSlPiFxFB6q+IL6F7qyLw3szyOn1IusxacaZXEa6PESxLmLxyf73ztwdoXjOj3HaBQruJAosRjc9Vs6SVzb+gezoYJCTzRN5GQUnGxeoPiGHR59B7yr1VyTVrDGgH8uvZGZRIvUXljGe9PlNjZRXm+HkHhNEaJMePXQ+H1mvhDMd5DxDU7VYt7C3Vrn5crvutQxmX8cbbQLmOuJrgaeo2eReVXL+FsQ9KXXp1OTUsNGlQMPlKPf7Ge4gQ/sgZH8dl93SjxsaEGSYhCCvKntFlInTXOZp53mskIrz4cCxSLULFJaE6FlTl8sPUZ6rSiP4efk7llr73J0s3Fi96GUIYaozkeJ34nMlePubmZxsOHMZ5PZejnp6zHJ4243Pq51ff3a5SQejdte4eTFxUWXoCaikJqL5/LgU8dzbrq20SAR78VIqehNlmJWvtukET88KmoTTJ9t+ViGqD4sEIza8Hfl84hPagxinHx88M30GJ5dSVJIqWLEKDORkkEeodj0mroe8WtxC+4y64NdVuFk/lQZ6WP/Vds4eiHz5O/aDEe4xUtsjHUl2JvyEiwX/xqNwozVys3FGAN9jhVeor6ymL6XP08cdOX0utAGUWRYtzsSxbPwtZE3BwpFvvTZafQPbuU/FgPu4JNaWPiaXCRKNdXIMsy8j/IJ/VnTVIbgdYQn+uBDZceIEmSjyQJHg5JkvyBIUCKRSPZBVz9W+f/1eiaY6ZLHpgNii3bo0io8Yc6q8hrLGTGbQ0cu6aHw7lRnwl1OsozmkRfEcras86bD94xEZdax8BUmeRM8TDdfYNpiRaTT5pTFevmx2Ie2IvQ6G6ULZlJ9OAJZPsYmLlUg+ZDJRGsVF9GvTO82SOfWyfm0aXvBC4ODOOLI0pYZv7775Ky6QtOdHZi4d3O5Pv8PvV23M+KsyyqDEq8xeeYQjPERhLq60gvonH3wO+669j8gTCXxKQ6hvRln9hD3YaNmFprJqtUFC+cyq5pETx8qysnu4sXJTBTTGiT0t3wCYul+ak7WBR5LTOcBrLxyDDGp4mJKK3yIsf6iEiaUhflGX225kGO7lfCNztvPG393OKlaCy9A3pz85LPmDJZmSQKXZqZf20V2T+9jvuAQWzqr7yNF8Pg/hvVJFpyOsI82reKOv+4F6eq+nb3X4rIY8KpXOLSjHtQmJ3+3fXa2/C6YxFuLl54XnYZXcdczaiN+4iZcT1l4e7WmtEA86blsSnZbOWNGnJeJu6ZNYy/dz35t01m5lINqgjR7opj+xmxZA0VZYqZUldu/9zcUvPp8/0Fxr1/nJ4FStiq6pJ5aNnlghpGM3KIdZvWQi4ZeOed3HWLmgF7y2g8cNDuPBcnMSlGeTqOqRNhwrTaSvLoeTyd6sFCyLrigExKsbJQPaveav2sH9SD7C8exTyoN3lNol+nHZKxrIucdC0nc3J3jCooi/aiy+IHSTp5ks2Jjazu2XaZugGpyg37ZlWgazZjdNbw8WjlfTJWVbK5n4qDfezDqSN3CEvCvmjF9/du/Q+sGaFCPbAPrmr7RVoTKTS+M93cqHWBCw0K/9v8WRUsuUVNwGXT6dp9FHEJAwiw8Re6nc3GpRn695mGx+BBdrU9/m782V9+ERgnSVIaMNbyHUmS+kqS9LHlmCTgqCRJpxALxIuyLLcaWB8E7pEkKR3h0/jkT7bnd+F0+STxX+1IrtbrjkcJ8Qrn2fCFdNfFOOz3ixB2S11srFV1rGmqBkB1CeleoYeRD7oJM0/onOupKs5mUZ8zmHw9CZ99PX5xXYgwePLqJh8M3ykZnHH9x+GzaxOz+y7gwebRnPWspba8kDHrlAGWFqEm06MJ/xYdlxu64mr6/YT9VCd7FTc4QEj+ahnOP3wVhgDHkNninPMUTZ/B5FtFYtVBvWOERn6dMFOZJfHySZLET+mbmf72Ce7/shFPnX0Y5XlNOW6NZq4+pCbk+S+o/fFH9D/voqwwg5WL4qnvn0TpVUO59ckAunRVNIpZu0xcnmWv2tf0Fvewr1KJbMptKoC7n6ZpjRKE4F1n5qWfg8hcsZz0E7usyW8AfmfzuXe94l84WuwYCdYKowrWD/7jzu/jp7dS7gEZp/agHTWX6mqloJCpVxJN4wbQpDJy05BzfKE9xhOPDKfl20089Ng5AvOUhWmF7lauVPchZugkfK9XQrD1kpGbypLYuCmRMLPo504+wgcTV61oM+ZLmlzlDmcrzlJaX4xab09x3oqvXxzL3d+bWfm5J79+/651e6PaognuzWPZZvE8uvp1tTtXY6mD4al1DKFtWOXIAr0zQlnQNKnZAJREevBYsWK2+rF7C5+svp+LOcfpFe/oS+v58nvMrE1EY4bpUZPZdu57Ji/rScMXa/D5YqvD8a0oukthce6x8CG6nzxD8E4lJNm9vJGbtpu5NdKe4oYYsQAMS1Y42p77Vsd893GMm/cosrMOg6eyyATsu0BDhD+L9rtT+s3LxM1fZN23Ur2ADwYto0t0P45cNZFTZ39mxe1KlKa7Qc3pZG9SBgbx9W1Jf7g2y38Df2rBkGW5QpblMbIsx1tMV5WW7UdlWb7Z8nm/LMvdZVnuafn/ic35mbIs95dluZMsyzNkWf79+NA/idWVIsbaltyrxVJIqe6Vt6CunoTF7+Cy6ReHcwucm8j3g3NuVTRbWCrz64SjLb8+n9kPqJl7n3hZAkwuLDgvNAyjvolbtph55NdAck/v59iMKRzf+gVSaQWRZ8uIXK7Yl5vqa8g9toeg7/YT+dFWVKnZ9E2X8alXJrmr1x9h9pOrCUspZ9wzP+Nb8/sDyHTfzdbPdy9QI6cpC9ChNW9SWubos/GR3Ai3Sfb2mzXL4Zh+QX0B0KiUBbg1Y96nAaL2ijDWlR9NZ+ZSDfunRJOddcJKSZHakMVPfSTSo5x48c6NjE6+iun7DHzwZBkVGYrjVu3sjEFvH3nidULcw4RiRRrLGBCO8fQ5Lqbss27TNRqIOVLA6K/TCCtQHLQmtQqfnCqCq8X3Zq1E0Mj2ndpyYixDgh1pQ9pDZFJ/XN29GezZCwAPjWLOOvTmY5y76xbUssS8I24knqxi1rdlGE6dwVxXR36V8jycnnybli27KK7IZfeezwE4/umdHH3+Gk6//Bj6s2fJyzgJQGWLuJlWJ/i23hInvryX5VcoC4izfxCN99/IweeUyRLgkRu0FPrAwc4SqaeEGdWloJJ+pYo5xj08GoDCLz5BVVDCxtlRZPa1rxVRY3G8n6mwzwUBGJQnJO+feymr2PiNiiU6wj0c7/uWEP3Y03BBCYG+bGUqz3xhIqlQRe2YPmy8zd4CoDp2lsL33gagfPUqYo4Xs+wjExPPOzM4u/30rrIALW9OE9PgjrMbuHpZP8buVqpPNlrYGAuWv2133tEbB2BUgWmPQvfSUF5C8+atrHrtZvQqEz90tY883BVcQUtWNt3KXPBuUqZe7Qvv03TDnez56GlCdAG4OHtgdFPMv56VepJOV5N7ZDelX6+2hub/E/jXZXrP+MUSVWJjH3AbIUL9/HOqSSkQYYq5zcUO58rFJYRXQOcKHcmT5xP9zTd07yYov8O9Ipl1yIkr9ovJ0qm+GecM8SL4v7YagIiTRYS1uNEtVyZS9qXAUnzI7Kq8zIVnDxJy+6sUnzpItqqKuGYhpW2ap9h6179/L9t/eIfzFUItzqtvpw61DfrVKdL59IM24YqhMH+HmdBmR2bLS1XfPk2OvpICuQp9gAftxTtkNgkNpM/qk7y2yZf7XKfh5RFAbVwQhc/fyqCHXuXmzw4yesItHB7Yi0OfvkTJ9+sAKMlLtV7n+VkaPhvX9nDVh/vz6POdWbd0IFP9R+KsdibRT6mXWNaoOLptQ1uLl86h3IZCPXjGtfQcoAQoXIocXzO+exwnwfbgP3IcrkXVVHpIGN59CslFMVP0bwymX6ELOpWW3t+nkJhrQhMagvfAoay/MQEpQqHVqHExc74pE2N2Dj0s/F89naK5efLjqFuvafEd1VkowY9FiUll/AkZ7ZZ9PDlRyV7WuLoxPWYKi3st5sia+/hwojh3atw09FoIrlPxuA2jMTbjQGUh/dMlif6tLsmjqtbedenm5U/B3VcRM8axCmSLRRkee1IZL+5NyufM6kyeTHuLjAfvZotLOiWBQhBpLUrUjIGU83vRHrIP2c15+3Vay4VrjRDoJfqvrq6Ccr29dr1muIpfu4h76vHoGq6rF4tP4P6LPPNBPcXBymStihKaRLmfvUUiKrUGjRkys09at301whJ5ldmIS7PMFQdkCn1Abzl1yhEZJxPo59/ByXXLree17g909sdV40pUeh03v25PcKlrkRmT58WNP+jRXFJL4+/Ev27BaIXGxiT1cPhB6pzB3L8HsR7CFBXg5ej87DRTZHNL5ZWcac7i4bKPqQxxw3D/zWg7dWL6Hj1X7RcDu0JW7KaGqBDenqoi30/w9gO46twJthQ+yr5TebFaE/fUSxbQ/NGzZNdmA+DmpuRhhH2yjeaNP+ExcTzfLL8K95h2QkFtkPLqU9bPI88oL2hshXiDmwyOeRiXcknt+uxZh2MODPZm3s1NSFpFirOlrNa6Cudet105RJwt5dgbTxAQ352+m3bg5OVNTX4mxx65g6yt6/GobsbUUI/JW5zTKaqX9Tr3BF3LTQFtT+Y5OaeZmuLCjBcOkvLtJ3AJl5SnizcA2+YkUGRDdb2tbK+1tvJ3gyRSf1jF5k8fbfM3ADrty8bp/0DNsP2bVwE4KeUxJ/8ZymwiX+QBvTBMG20t5HVQncNdtztTO74fjzywwe7edT+uos/9z1uJGAHU193DgSG9SLhSmKgiOwtNL777cEKef57ucYrfofsXhyi5VTGBNKWksG3xVRydMpoNPy4jrFymzkPDgCe/p1tEX2JbRH/pnaDF14MLzYq201ghFoeAm0R9lXk7zfRJtZd4dS7udJt7O6FdHSOh0j1/u6KhRlKzZIOZ0EoYd8fL+JcJk1mdpxOzH1CT39mPgfkuTDwu0/i1QpwYEZZEwITLrN/PdfPg5jvV5Lk2occ+03tR9ByG5Cvanu/Ok1xcMoX4niMB+GKOojF5yjrkyFC6xNhzOIWsFpFj8UOU37xn0ee4zLqKpGHTMFs0PKdrpnNypKNfLNzGvyN9Lu4jxCPU+r6XNDnGD+VSSUOgh+Iv/Afwr1swHr9BxyPz1HaFW67Li8RDD9tGeaOxVEZzt5mgW7EttJLd3SUynWow7NnP3Hu3kZp9lDmaFWTqauyO9QuPJ2Pd0xidnTA7O3HD0CUceGwK+WYxCWfUZloXrfxTCjFgi4XjKqjKzKD6YFrDJUa/qsTC+7r6kRzYmyTvzizteQ9BbSTUXQoPZ+82t2ssFdQqL1kcAHy9FMc9tJ24d6PfFH5N+MBOwdAve5jGIKEZhcn2v9vYUk9qznFuW9qDgMUvkfrpWwRvOkzV+dOEvPgCfSbfSEivwZhcdTSGKM/A+Zn30CxTGDz3LpvN9XcLSavHxRYGfHkSENrEyQgjJ3XKC+eidcek1VBUkUNsovLiX/9xDr5JPTne042MvqEE1kCkvv0Ex/8rhpwTi9aoVCfWfOhuV7luVUgm90TvR6US9+BndGZcRQg1e3aze3QfLuwXZkpZljGcTcFQUkJjmC833qW2SunOKi1bjwufQH65iHKrdjHzWVQ25Sb78WgLz6wyvHXeOMtOPPuFiclHZdBpaVIbaTx6FHO5GAvOBtBW1tE1tLf1XK2zsMtv/VqJgGqd5FpRUZ7L/umj2PPlSw6/3WOGkgSY3yWA3Cv78+C9fqwZoWJ7b5Vdro+0YTtqS5c1Ocl8O+xTuvokUmsWWtSr39/LlhEepESA+vmH2BxSSpknPHiDmgi/OOb1vYVucYOIjetj14aqz7+A2joW36Ym5SHhg6jPTON0sbAuPFE30npsdcYFpNxCmrfZ54/oW8vvBvtat+U+eD9fZ63nvegMGltEGwPe30D/PSXUeTpR7SqITl13f0/Q1ddYz6s8IJJMz5SfwXPaVA6MCmL/Tf2s+79+exr3PR7K6ZHhLL5VVEf8p/CvWzCSvDvTOV+2pu4DdNopiOoC1u/jcOUJ3pymoijeMaxWu30/bnpI6D+ezh5xuDaa6V/rz6ptCUQV2/sRnEwSHqez0WPAlJ2L+4Ovc9UBmRjfTui7xhIR1oWiQCdKvaBfkeIcK7VwSdUu/4jzi24iLkREkDSrlOs3GBvIq8nh0Oo3SBs8hKzzjtUBL4Wfq+P92CLMzVEK0gYFof7yLQr6ivj/CI8Ih2POr3qfghtuQrKNDf9hB/VOor3p7vZRRUk+iXhV6Ll7g9jf6jBNCunJQ+5b2K/JJjXzMOrGZvKzlEiogrp8GmyqlPXYk0/3Ikdn/6iFz9D101UMXvykdVtloI4Px5q5fkszpqpq63aVSSZbXYVvUQP3vS3Mg50GT2yzf/4TtFYWbGysQV1RDUZFMpyXG8Vbqf1F8IUkEVOjZeJr+4lOrSaosBEstRfMshnPxc+R8ukbyCoJvzqsNcg9XH1wihbPRq4X/VydlkLU0o+pvWBvsgl48TnlvlUqIjwi8LQJ7fQobyT1tvE06qDa3X5CcpqoVFrUBQrpu0+hoqk1tNg/Yzd0JOVDnMmXS5FWrgROuJTWsEZ1lEVVvXFtlkkNg/NSsTWDvGyzEjQZWGGkZer11J04RvqAMF67QpjN8rwM7E9S8cmmp/CuMRJQC51NAXifyGT4vOXsHebDtlt7X9oMAKY0xrNec5qcO6eRvDEV12oxvhrefN/h2AY3+7HWWkO9eIUSp1Odcopph2SSL5rswmZVLUaKb57ExS8e4vGbXZn93VXszVeYCELeWg+Af9dkOt14O5cvW8991yqBBvnnDzOuMY453uPYGbOswyT1d2L2stPM22lGrVI6/VyoUKn7pJnpHtiT0Tc9QVhSH4dzB5V50S9NRsovJjNcw/YFvahRNeN0LAWpwd4hW1NZSOAzn+KuB3VXwY+j+nozRj9PvD59G59+AwnzDMfJ2RUDikofnTQI9UuPoEqMx1PnRUa8O2cjJWojlZevydRMWWMZnpZEJVen36cGyf6NbPCMl27GEOL4cpeUZPHpM9cQdlSce6zEkWepoN6SzGdbAvPHQwTmi0lE3bmT3fE51dl4OSlO1NbggcryPK547SjqPYcoHyVsynFNynHBLoG4JSg8Q17f7+W+r8S5P4xyZ91b01h8m5oTJccxbtxK82nF1+AluTKyVti0C9OVsM0NV4bgkVtBtEUZ2ZIs8Z1OcbS3hWxHjsZ2keIhzFcZ4WKyKapVnLuGYydhyx5kWea+JyP4brAYjwZLbGuExTRpCT4j0b8LHmUNvPKpMlZKmisYGymc9K113cO1gSTlmonrpJiD6p3hsVTFh1Ed6cPZirNWk6PB8ir07HsZPrFJBPUdyonLxHOTVRJ7U5QoPkOzWMh8fBSzTVd/+ygprasHzgtvIKCPI7uA2wZFU/Yrb+HBb8xEffoz0w/K3P6DGaf0fFbfHEta3yCCvZQCQLvHC/9ZSVMZI3z781CAqFK5YKOem7eZuWG7iYEW5/aNnxeT0yT6OnXfD9SkKIIHgM+11+I0ciiTVl7g0WczMOSI8Z00aTZhb75pF1Xmbpn4g5cssbtGa03uKFnRglsFqh6n6zCrlYtU+zkT9dZGut7zCSsP9+aTN010Pq741WR3VzQzp5M0aDJfPXYNJb2GsONKJULw3veKmfDqXs6tXk7ujTdhaKM65t+Ff92C0RZKbp2C0fKA1blF9H50LU5nMxyOuxguuivt3D4afVzY1UnPGa9a1g+WKHBr4alrVbw7WRzj5qyEqdaNTrZ+zsg8xutPT+Xshb3IWbn4lDTieVKJWDK668jqGYBrQAiuWjek2ga65coEokyefb/bysRX1xDuLrQCX5ff1h4AuFlRgTcMtJcgny7+jBKDY2apl15iwVabBLhZMx2OmfT0Z8SnnGmXa6mVMHD73YNZfpmKX67uRFa1TYhwVRpNWihtLicyq4FuchjDdWICqmtW/AUqWaK5nWCXEZ7JlF48xbvLTVR98w2a1z/j/HrFfKUuryFpn1jYwtTKwuie1A2vQuFrqvJS07PQiW7Z7UecmV2dcev/x+sRRIYk0ezjZq2FHqhTAg9aE/ckSWKga1ciVOIZ1stiMsiuEn0kWyJizMg0yYotPm3WAGonDuDcByKHp7BMHF/v4UT6lcnUVSghvGXXjefOzxSTo9Y/ECaOIvMKIRSVBbtg0KppunkJJ+rPcyxzH59GCBOXZJYZcMGmTyyCUdHZIwCc7+lLZqi9xFujbmaazxdsd3VMBg2sFivg3i5tj5dIyZfF+kH0uH4JspsiCJkahIkn0juaol1bMHz4BS9ebT99lZ9SChz5Wvw9128zcNU2e2LQ9/K/4uJ5JYqu04aTHJ0Uw89+RYyveByVs/K79ZaSvQd3fml3jZO3i+RXY6yimbcSeJ4tO02Ts8hhefa1ZOpH9UZrBLecMszbRfSlm01WulTfiHHtBnZv/YihmZYa4vWO9XjKLKUROqKk/kZkdvEh3T4KkElFgWgsmcJHLu7CeOYcZRWOkUdn44QaGukRSc8ceH2lipFhIxj17MfEJA3E4O1u5Zxx0iqe3/wNCl9RbI2OxZvNhJWbKWpwjMTKP3MA87wlVB34hcLGImIKhE/jXLhi8vm8/Ed+rNzLuQohDRc2FDlc51J06znOGo2REqG8rAY1rHxLJrzMMcpJ7aRFdlecg0O6T3Y45lj6L6zaucyBEqQVORfES5wb7Yrb5Ek8fPkbeGvFYlo3ZSh95t1Np6OH6POAqPdxsSqVoo+EScA2uunTUWb2RCimj6qZSra6Oi2Xxe8Ix2xyYG80EWEkxSoSdlVztfWzyVMxFQxffpAKrXgxvcdPIKS4hfCK9u3DaUMjcclyfGbtwf2yiZhbmqkqycU8ZTRqN6UvW7mkAGY8upPkzcIs6h8aR1o3H/ASE0qrg/NiTRpYKPk/mqAiZvG9THroXbQqyypqiZJq8tDyZNIF6orF+D3UWULfaO/PUEWEMuGaB5hxj+jn0IImKlxNOKl1hFRCfKHM8h9sIuJsbOYqi2TtKYlJdWN8NRX+9iu5i97Mhwe6kpzraDKs7iGcvSUxjnk/AGlOldR9voqau5eSWaEUbhrzq3j2RkyU6MW4mNBXCfPOqc2h2U/0WYuThLe7sjgXNtq/H7N/MRNTAuk9/Kj1EG08Y8gh4Hguy1aqoUlxzDtZypwGp1fbXcMjLBqAC/WKYHkiQCxMHk4eeMg6ntkZyNXLjuO65QCXIr023WFbcBV4DxERm6E2CaS5YaJ/k4OE4OlsU0f878a/bsHoVK2jU7E951HzmwrRYLekERTPHYNvfFeHc69OEQNSrdaQkX8GfUoK5ScP4fH6l5jzC3n2vVqWfSRW/2YUe3VXXYyV7rsFEwQF4OruQ2jnZPbMSiTt2XnWY8OdAokuBfnKSRjvW0BOrVCXiwcqPEqJC99C/cw7ePRM5ticZFz9L1kB28CJR+/E2ZKjtXSdIjHWxQeDyUyjocHhnCovDdfc0WwNu9z82HyHY0o//Zj+t39qty03QMTZ70+SMCeJdt9018/MW7yZvddNIbjnQKI2bqBhwRU0hPqwbcdHpGeJmgEmk9Gq7sd6K/UUZs19nrGXKZE+bFboVo65KjxYuTU51Hz6NOq5So6BV1Qnvr23LzuvjKEkQJnEnCrrUA3px5F4CWmdMLu0ZXZrRX1GGmQ45qu0hzWnV+LSYOS8n55Z3X8hW6NM3GZXHWbL4tVsbuGEWznLbwpBP6Y/077ZT9fBIiJM7aSl5aX76TFrEa46Mf4WbDVjHjWTzx++kh5vf0Lg/fcRmSC0hZBmZzadG0+UWgQoDEiVSVpl7+OqKyvgq6fm8PXNo62cXMHVoG1oxqcBdEYwFhSyP0kiZ/FkDvf3Vk62LB5eb7+CYeYkHj0ayaAC+yxojUHGe/cpPEocM6y/jBVZ2ldvrhb3brOmlER64BQmJmitESLeeMPu3A8mqijzUZEYIN7N3g+ttpoIozyjiLtVZPd7jxxNiafMqpEq7lioZvedbRNvhmXV4W6pVnnDz2Y6lzvhnVPJ+4ujrcd4ePkjJ8QQPtpeWIp9WoTKd/VUipdd9u73qGOiiHSPwFBXS+dDhSTmg2897OxhsWA8Lni3wj2VYmCGp5egSoonMqEvj3U5x/FYiYJGhXq+Psybah+tNUnWYGo72fLvwL9uwWguaV9C/GnpCNy6dafbPU/g2UaoasVJIS3n1OXSbBT289z042h+2EVB3iVx087uVM0QDKGN8WH0feZttjw8itREd2beWEV2pA6tqzvvxqSzwUORNkwB3lQtvILAy6+i74TrYGAvDo4NZUy5YjwPcg2iV0AvuveZwNzHVhEYGP279+0v27/UF0Oh0Ad8LxTz6pUqyr0ch4IPrrzreSsJMSJkM9jJ0c/RL6ivgznK6/676ekUS3nfWBIGTbLb11xfy5m6VAYcuIrGW+7l9Hsv0PXuj6lZ9w2uAwbQvcsowr9axblPltCUqLxUrk+8Q8u3Ck21j8361qO74pQtbyxj+ccL2bpvpXWbTqXFPS6eL+KLSQjswkWbyqEBLgFc7KVIo62hzm2hT4aMC3+8xtflZ4QUPixkCCuyxxHerDyDVeO0LJkvhIttT06g/PqJuAzoR2VdKe88NIGTJy3ZyZJEQ79ECA/G5GJTyMgISefrub/wPUZq3iDfZOGZqiqm5vvvMds49y+Fd2410cUyXS7q6ZXVdv7MxgESVW7wZvMWRsQq/StpxAz/UsaHLPXYhiE7m7T0I3bnVusFDcyZNujNlyTdZvddZ4Qvp4qFMCi3jrgaRXqWi5VItzfn+3HnU5uIi0mmzqQ8/Fb/k2rRPNbVC3PPJy278A2PI2zh7bwz6UPu62z/m61wqWuhMcTb+v1MUDNfjXPmwctt/D3ZaWxzz+bLkEy7c5vrxeLfPExxqF9cv5KX+hTw8VXuNBjtBbDRp0U/b/z5XTT3LsSrh2KmTu3ly9WXZ7Hfr4JFxV3xN7lQkKz4bzofK0PvJHNhQDDPXe+K8Z/zef/7FoyjY8Npz0qdf+pXftr0BhvmjKAq+6Lj/jgvqt0gbswVdLZwSXXxEQlMQe4hfHy5K98MsUgSag3GYGGX/lx1CPO8JYyPGENvjyTe9L6FCJU/+SmHWfuCkSVPKE65Il0Tt/psYuNzC9hx7XiS3DvR/WApRbu3WY85fttwTk2KY+9377Buai9ysu2dem0hZM586+fd3SUiyiHUwvT97H0/0Sm0m+NJ5ZUELH2XkcvFQtnt2kUOhxTWFzqk7EnrtxBwJINpX2Rw/meRhHdoWicyBoQz+PE38U8vZ82rMrElkKwReS9dIpJ54TpnDiep+fTUR7x/+G3ybOoslJ05Rn7+eWtIqdHPkwyLYmVoUZyAQyffwtK1ZsbazFUVBelMWLSGz15qoi43gwSb6qAle7YxZ51i+ooIciyc1Qq9h46qkY4cY+1BFxRCg6eWyqoiXNf8hFyu+Ilu8L2MN8KERHz/VcuY4zKcBU8eJfxkEWO+z0WVKUxK+qY6GmbcxIlPXkHt6sbmvmJ8mUf0J3rsdK559xxrXzAi51iOt1SXc2oSUqhBDeduGoYmzGaVDAkk6bJrCb1mrl17S3opUXALH1vP5KMyr39sQv+9wkSgchbRUQvez+bVT0ycipaoDrMn5nPVCtNblGe0Q59UrRd8YEd6KH6CYTqlANP583tp0sIXo1QUPK9Eds1v7EX1wrtpyM6gNNTVjq0Y4PWGjSRuF4JXQo0rrjXNTF1xEXn6TRy5b4FDO1qxYagTtd2EYKLpFIvrdbMomzJDuV+DkQnHZcJP2wualQuEBnjwzE/Wbc2frmLqASOJuih8Q2I4Ntk+4KNo1nAm72/hKqePOOWsLIaB1z3O2heMRFaq8N9yjE7BXbjmOYVCpcpLTUNsELOGL+bLpces/ftP4F+3YAy5qHa46awQsWQv+NHIwGp/hpyX0bU4Sl49fbri3QBqg4ksp2pyugdQpxYvqEqt5uWlO3n4dcVeGfC24DO6pTABjzojqtsepf7nnwl58D00uUX4O4sFRVOt2OYja5xYt68PY7PciWvyIHX397jVGzF4K9LpBt15fnHKwrvWTLe0ZpxNvx+XvUmnhDPOe3ItLjY+tZKrr6UmzTE66NLEvY/qtjgck1+Xj/mSJcPzoKJtOWeKF+21rtksHV3MCukAPhov1AYT+qG9aBnYkxMrl1AwOZnYX7Iwp2cz7sU9vP2BiYQC5boeN82j07Ap1pBSTUUtcZZ3uGnHbjJGxPJrksQZn3qQ7eud2IY4lhYrjthz3TzQ1SqLzdZkiS2J7Ueg7O3UQu7F9rmmLsVa74sYjC3kF6RwOlois1lZqZo/WY30oMhlONy3GyfuvRVDYSFGDegSE4kLFWy8WllNeAV000ajNlhyJoBZg4/zbu8yQi0U+UFaYYIKcBerqClIaINHEiRe9T3M62MUu3ylt5p3A09zZ/Sv5NvES/jdeQfa2Fi0fZM5fucN1u0ZVYoG3KphuDeLt2jSo+8zcox9eWKtxhlVWCjevm1oa7kiesk7JNq6KeobxWSm0Trz8T1JhMR0I1arnO+1dgcuJy5SUVlAj6QR9J1tX2tjyRYNsXliUPc5WU9VbQl1W8R4bTTbP1NtdDSaWPH7VxyWyB0g/Co9C52Y80U+2mbFqewRLBbRQSn2YqauV0+MKhhRp/gaohL60rkAhqw8ibFZT3yefYKd83khAH26vROxNvsCLZbK4OJmsmqyaDl0lC+fv86637/SSNzBfE588CLHB/WhqaH9HJv/Nv51C4Y5y9EGXTJ3jJVivHVCctI5hqoWZgpJPv3XzTQkRvDBXD9SXKuodIdSQyUXBwzk4oCBgL2PRH0hC1OysLvmVmUDkN9YiNqSuHd2oOJg1NdUIe89hHb0cIIXLbY6MyPmKVLS8+u0LNntTqfkUfjeeCP+fo75EZci+WclrDb3KkWCSo1UoyusoKzakVne29k+eXHAXsc6JKOve5jQ5xwzwFsR3ElI5GtfMLL2BSNhb67nvHcDL8xQsajPGTa7pbHs1NucLj7B1LW59MlW4aUTDtHaFsUG7nL5FGp6Rbf5Gz59B/LlOC1aI5Rs+wGz2URqleIw1WqEmaNRB5G+Cqlk1q0T8HBXzGzBLa50MbfvDxrqP4Bu9W07a9vC2ITJeDdC735TCf34Azr1VEIl06vTrJxLWtQYIgLZd30vqnvH8fRCL1IsBX5w0tB45xzU/XqDTe7Qp5+6MOiCzPFWenON+N8kGWjyd6fSX2gCg8/LfPZKM1O2K5OMh+TCwNMtXHNQzT23aPjsdmF+PfbaI5w0ZHIx9zjBmdWAqEyXEKz488wtYlLePEIIMOcfuJMTO76yu+8aV5mr55Wyu4ujLu/hLcZ6/NbzDvsAYjyieTi/F2M/PY3+sUV2NB3q62cSFtGVirPHaX7xLXsto6ySIq2yKLr5BFIwViy6SYH2/shHB+WyMlK8D66p+SSs3Eu1r5azWYep2/4zzs89bD22zhkq3eFMnL0dSPPkW2jMYKpVIvmyH55FTqDE+YoUassL8DydzY9XRZA3U2Td+5wSc4/bsVRc6hTavJJZIwHBvRXoKkzPUQcc56mKijxcqhoxGjt8GH8bzvULcIilHxUyjIjsBl6YrWVfrcj2tKW6aMWxCdEAhLmH09cYxie1VzF8zA1IGz8hvNcQh+Nrpoms1WzXBpZPAvnpe4iLsPDWuAVT2ijUUr8hykTSmrj3gvQTd0vrrIVWstYoCUIVuRfJyTnNLx6FzI7+iRKNfQ5IW/CrbjsUr3Ou2B7hEemwT30Jl1SUwZF99LRfPevjq+y2Fc8ba/2cV2Fv++1pCCY0NIHBV9/Be0e7cVW6H5+/bmLS/mZq/Jy50JJLukWwLApXtKpf77qO/JUfW79XzptEoWU9c/7lBE88eoF+aTKDzDGoVCqSbLikWkMjy+dNoNlXUecHfZtKuY8l/+HlB+l5toHwkzb2qkvgsv0g2tLqdvdfCt8PReJZZUEG3luP2tVO6PbS23h+J4gEXbXudE4YxIKlawjzjSLhdBVSqTBf6SUj892+ZqdLNpKTkzXCz72kji7HKqxcR60RWEZfDxbcaibNbB8ZFFukTN4uPx8mMaOZ7r8WsfYFIze8k0ZOAPTKU6OSwdWgPPdmJ5B1yrvQKgjFJIgoNK/KZhqy7CN+3GQtr7heR7LkSG9eFu9YTCh3ci/r5wuVF6j7UrAjP3HoKdzrxfhsiQgiY9ZAZD8vKmqKUJuh6QqliuCG3kZKBouF73CyO25+QYx++ysafF3JuaSe/Yy9ZqYeMpPXyYtTPT3QGmF7kgGdpzcAH7coBaM0FbX41oNv/iUU8RViTG1NUib+H75/jbVDJSoXX42HhalXk5lP8Yn9duf+1EcizU0Rhl5zF0wPAS6B1mJoCYMVypG0WGfyegQxbMYSQl9+CXfXPy60/NX41y0YQ5Z/Tdcf7OmOqx94DIAH+z9En+ghNIf4onJx1DBm9r6eprvn4dKzJxcObaHkuecoO3sU1/O50ORItLug6wHSQiC2wY3xn53jwaw3aVaJF8DZyZnAQCHtuu05YT2nlUtqybEg7trrYSUWDDuuDPoGYyMVTeUEZ9awZJcb2gbHmO1LkV3729E9bUVJVbjDU9eqOBIvJom2qL/zPv8ErweW2W173GsXP/WxhBeXVdvtK6wtwOtiMeOWbsT511M0ZghNoEKu562Hk6gc3we1mxsNzhK9IpWch4E5WrpXipepxhXuCNxG3ocPAKCpVdqeFQh1rz+AavoE6zZXLz+yO3uj2XGAEpt3zW/3GdRdOvPFKBV7Vot8huO/QW/+f0VdjRAIytLPoHnlQ7vKdYbGBvR11eJ+DLWk7fyeHyb1pvn4Sa749CIJ+WKc6Fpk1uzsyugsNyQnJ6buPk+dm+jbi7UZDHUTUnSwWZimfNUe/JKwnN5h9jxOKXEKd1qzUc+Z8jPUNioLfVQZOHVJIjEfAquUxcW3Hs6625hA1GKB7bpBcRJ187P3f6nrGol67DPcjzj6AT+IUsJQ35usYsEdat4ZWo9mx1ref2MkmmTFR/TyGifc64XKr80rIeOheynPzyAuYQBSv17035bH3QvULL1ezeXXP8OwkfPQz5/OjPd+oqWpgZdv6Mbe6CayhtqXKkjKB88m2HLfYMxPLqGiaxhTLrgS5yQklblPKWblVvNUSI59NnsrhdBEgxIlddvPah6tHMKsYYswmUW7x5+Q6Zcm8+qVKg6/fQOq918k/skXiOutLHYvbRF2wWD3EJ6fq2P2A2o+GqWYrDbclcyqG6I47VHNhyGpNEsdeRh/G/bNHE9D/wl22/Shwiyhuvtp3Pr0JfzHDWh8HLmkTn35NvJ7n5PWlINeJ1EcrCP7163oFj9FsU0GcSu+WqYivkiUYE0ohJc/M3FOV8FTs1UUe0vo/AMo8IUic7X1HINWRUtcGLqCcvwyKyFKLCBOccqgD/UMo4d/D6IqVcTvSsfL9PuROz6ujhFOrdifJFGmdlwwAnzCuHX+O4SrhVQY5OrIJTVclUD3Avt4+w8+VDPpmLC1h06fYbev2dDE+YITtGQKX0K6xT5eVFvAR753MEGXTGJsf9z0MsUHlAlWJYPBVdynVyOsetXEgBlikm9JiCI3ypUiHzgfrebm4lfZ3KQkcWld3WmIDyE4q5Y4k2K0r4z1x8+g47pdZsaelNk/wJOguUq9iT8LV1+hysZHikiaaDfFdJj61EO0zLsTgOzxXWmKCSYuS2+1T1+sEEy9ZoMB9aFTGAuFxnCqWxIeFk4qD1dv1jUK6bSgXmhGjZVl5F5/Pfp0ReqXVRI/9Leh0/bwwsvZ24Fi4rmu6eT7QaoNS4xJgr69lZBSyWIiPaVVQpmza+wT9Cr1lZglOFvuyOz7eOVQ6+dFm8189LaJl5emYxwzk4VLdtPdIwHve0S/YDZbE2rrXCXGnJIJwJ1mb1e+C85HfTaNZR+ZeGGlCd5fxZ6fPsB5xQb2TBuG2gzTD8qM7n8N1856xq4N+X4iSnDBwp8Ifm4l68OLcKlo4EJDJvmB9lNia7TTmeHhdttbk/SkHb/abGuiefdets4c6UCX0ssczqcXPuf+088Qv+IXdHmK09vQ1MDeLhLHO2uYHzubK7L8CT2laLpL7j3I/fcepmzjdyQ8vJLmhrYLQv0d+NctGN0yHZkeA29dSGaiUCG/3rGMR16bjGx2tL+6XcjDtRki0mvpP/0WRu0+Sc/egnvIz8WfSg9757NKLyT/5dOUCb1vzDCun/cqwYExFBemEVYJMTbmgtJALXNnlnA61EhWbRaJ8QMpC9RR4KzYZ7N7BHIxysn6QpY2OvoWLoVvUq92903+cicJXRyL0piLigma+xghF8T1baWiVuQk+pBzZT+7bVKzovFklNkXXeo6dobV2Q8KrUR370Ryb7iRo6uW8ZNnNgCldYpZpaapmkyNvemrFbV941m1OIHCHiFcWRvP1x97ctkBxc5bX1NO1x/Oo5KhLk+RcDOem0/lboVUblLYWLq4tl9uvtHfjfJR3dvd74AeSTS6O1EfJoQPyaw48RN8EvC2EELOeO4rBs64HQBvD8uibDm20TLxpNWIBUBrM3zDvSNJyBH3qWq2REVZaoLX1ysBC5XdI3iyTDGZGrp1IjqwM+6WBa21TOucnDDqnaHOS0voRhHNpJbBcOacw62FN1tMYCqoU9lr195hsVzY8Cwx19/icJ5582/XRD+262tmN7/LvTepKdQ2WhNqTeNE+42SmYqci4zZXk5tkBLMkHVkB9EWu390KagsJmXt+1/xyxsP2f3GyjEqdvUUU1/I0VzmnvTAoAZp5GCOvzoPkw2th9aSJFcWYm9xaOktNIt8qq3byi1BIp5qN3yCItlxW18evU7NxgESY7/P5f13Tbz0XgPytz+SnqpUKWxorsOjCcJdQgh9diUz15UwZr9iZtYYzajNMEATT0KeCXe1o/Xj78K/bsFQxTraVV88vYzYC8JGedkFN5Z8Wdsm1UXcg48DoFZpOJmyk2VvzqGmZzT6nZ/j3KkTQ46kkHTB0Zl3XawiZdfv3kX0jS+hyi/F2yQGo7ZIebmjpAC+9XyAzuZAAtyCuHj0ZwJKm/EsUMwCnw8zsTnZbK1optP8fubn7j5aK6lbzL49dvtS33qR6qJsh3PK60qQSpW2rYx0NGv9ElzNY/Hth/U67z0JwMylGmYu1bBqpAo/naK9tfi6k3f9GEq7C7HWaDKSsFc4JDt5KWGJbp0SSAzvZf1+IlZ5PjX7fuHOV9Lps6eI1P0/IpVVWqkkQEQataLMpv5Fy7ufWpME93WRqFm/nl0fP9nuvZz1bWxTam4P242naVAZKC0X/XaxXBkbZllGthA2frxoFHuWi7ElWyarTl4iadFVIyaHzn4KjxbArAfVrL86hLgScXygVizCXoHhJJ5PsfIwbe8l8WlCEY0/K4mONS4yKydqefgW4SNKzpApjHAl5kQJvQN6Mdi5C1+vecx6fHqmYzKjb5Ho35gvvmDYPPsJ2UlWMdAcTaDZkfm3lbfq+K2OAgqA1iCz/F0TMys7EeypqDoemwSVR72xgRC1Dx56cFqghAVHe0bjZyOIoFG0XkNevt1vvFA2gsUpon/MWg1OtU3kj+1KH6+uLKrvh9qkLOw6Cz3/2D32kUmGm2fQrIHwLorpL9xDXDPMNQSzRo3v2InMv/IpIlwdiT2DPZQwZ5966JUlE3S2kEwLbU5OneO7lm/hbdMbft9n+d/Cn1owJEnylSRpuyRJaZb/DnYcSZJGSZJ00uZPL0nS5ZZ9KyRJyrLZ1+vPtOeP4LCukNxL/G637FQmFK1Kg+Ti0ibVxb4zPwCQV5+P4eRZJi4/ztEjG7lr/Q2U1pfwyRVdWDNJiSk3+gmDuctn31u35RWlQlEJZQ3FaFyFlFbQSTGsN+ZmYlr6PLpmM75JPaFBaBZu9yy2HvNGzSQebxhNlH8n1D4+eLm0b25qRdciDRqLInN+lOJkTwtXE7hyKyXZjmG1/qFx1D4w3/q9X5Fj/PfNJYl8d8HexGcO8sNsobEIjBHO53fXevHJMiOqbfs4KxdwIFHizlvV/JBs5t7QPRz2Fy9kF78uRFhoSmpbFEej+t3nqJ+mtDu450Dr56Deg3ArE5J4eWMZb01VsT9e0dqcnBXneUySct6QfZV49hQJVCGNQiINdms/Sqp7RD8GlTmaKtvDwN7TCKiFpJj+VK55iaQJCp+XbZRUr9P1hJeZKY73pTHUl8/u68bZBAsbrKTG2DkayccbEJnRtS6wqLwn8a5RHA8Uk0exWWhfBlMLH2x9hjpZjJtxJ2VuO+xt1y4PJ3e6m4IZIsdyOlqM89C8Rlpqq2g6eZKW4ycZtkYZD517jOBSnLQs2J9/9yRHU+y1hrL8NGovn8vhVcscznO+SUzyCSsFW6tBK949M7B5kBM9Jotw0gHfpWIYqWiuajPg74uPu7/Vhl/7zvvU+ghhSZIkUjqJZ3g6WkKSJIwuWmS1mgGX32rXhvpduzDm5HIkXqIm2B1NUwsxW89xbNOn5C9ajNRb8ck0+LhgVMHpBHuhrG7TD+iM2AUyFC25mnoXiYuVqVQXZdP7qmfpdMWj9N6VT1ZnIdxlhor3wjaXQh8uJqRz5edweWYp1V5qO4E1s2cAJcE6yvVCeGsx/r7P8r+FP6thPATskGU5Hthh+W4HWZZ3ybLcS5blXsBooBHYZnPI/a37ZVk++Sfb87voe95AZLn9ttbJZm93NS8Nq+T+xx0lAoDQH4RDNNQ91Jq4NzxDxwfvmPCuambwedkuc9Zo4cpP9Wriy9viYVAyCWOvpHzJNfiFdaLaVWbmUg2Vr91jPadMX0G9Mzw/ooInhxUTk9CXMz09OVihOGMzVyznwtcfs7+7EwvvdqbC/fdLtPodEaaYWhdR5+CCxSQbU2hC3TWR6MDODuc4eXrhNm0y698XGlLcWUeCwqyD26natMFuW8G1I/jhujgeX+xNZj/RlwEZFXjoYephmbDeQ2l56k6eCb2F2ZrBbDw8lCvzRLjlxcpUTvQWL1eRu2JWevu9Gzh45Dvr95DvFMdks4uy4CcH9ubW+1cxboxSktbgJDFzqYZf192L3lnFZ2OVYV8S7cn9N6qJyxZmlTCPtp89gMuOw+iKHfugPXgcFX6IWlUz7sFhqJwU02SXa2/D6w6RgRw+6Qqi77qfUZt+JSCuK2Xh7sieYkKpd5G59sp89ieJCURnFA7b4Z8cp+f6c+TcNomZSzVowkW7TY0NjFiyBt9MRTN0z7E3WTql5dLrh4tMeuso3fKViUl3SbTm8ssEgZ66WxKXou6ua1m0SM2obzLQ77OPAnJ3ElJ5hA39RSvOxIi+d7ekRji1mCjtHYkKmHzAwIEcpTTyvS5KZn/dsB5kf/EoqgB/GsxiMQyqVmqMH3cppfAysfiXRInx0/X4CT55dwL7I9ou2tQvTcYnt9r63VWlw+is4bOJSoCAi1nN2mEqMnvYS5nh24SmuStBmbzfqt/ImuES+pF98dLYa1eeseL92t1VvIM5NtQft81pYMktagKGjaZL1xEERCUS7aX4LP2yKvGql+nX8zJcBw3E0+WPCy1/Nf7sgjEdaOVgWAlc/jvHXw38JMvyP6ZTaSe3X7N52D0vcWvCfO4KuqbN/SGdhfNSFxZuLRrT2Gyh8bapad2K1aFCrYy49XYaszJY0PcUjUlRhM2eh7O3L15mHa+vc8Nnq6Lyx/Ydjc+uTVzX40Zu0Pcjz6WJoOxawn9RIk7SgyHDp4XgFhcuN3RFZ/59roB0lVglWwueJWmEA1ZSqzn74nW0RDrydhdmniF19gyuXCiytfe3XHA4pqAuH4PZfqY5fOg7pq1IY8HX1cgV9n6HLK9mAitNXHVIhdcTy6ndtAn9jt0Up55k5aJ4KoZ3o3B6PxY+FUjv3gqtyO0bjIzNV16UWhfQBwrN7HCp0n85DQWob3uMpu9/sG5TGc08/70bqi83UJh7zlpzHMA5vYB71ytRJ8dKj7fVfaI/fITp6o/iaPUZal2grKEU7ai5nFqr1Fkw9+5C0zgRBba0TxqLqz/giUeGY8zJ46HHztH9sHheHrIzX+oWMVISJimf65SErnM1F1hQ3pWNmxIJMYkJSqdxLLV7KWr8nDlddob6+kpUxraFjdXPDOO2H82sXOPH2cM/OewffdLEO+vF87g0Sqq1VkSrydQWZV+vcdh21obnxfWE8NUUJPrxRpbCAfV5WBYfr76fhsZaArwUc05wuXDqJD/3NlPrhBnvikBBZTJn+Sj6vvQTLbuU2hOXIu8axbfT9Yob6X7yDJG/KqHg6so6rt1jZo7nGPsTo4XENbK/wuD80jpn7tBNZMpdy5Dd3GgOVsar309HqE4M5cbzQZR9/jQRw8Zb933sdhvv9nyWuNBuHL7mMi6UnmP9XMV0btQ5kZXgQXovf9Yu6kKz7v/dAkpBsiy3eiaLAceiz/aYBVw6Yp6TJOm0JEnLJElq1xgvSdItkiQdlSTpaFnZ7zt528OG6r1WO2orWtwtjq1nnsPz1S+IWPpRm+decK3BqIJsl3prHYfWCJFqQy3X3q9m7n3KxedmC6mvsbaCW7aYeeRQKBe+/ohjM6dQlp+Gqq6R8PQawt9TJKmm+hpyj+0h8rOfCft2P3JhEYE1EFGqaC7XrNjDtW9uJvpECeOe+dmuJnJ78Ll+npVW465b1MjZIlxXbTCx5ePHKMh3XAx8JXe62JD2+syf53BM36A+uDrZm6pay9RGlEP0r9kArP7kamYu1bB2TjgnDm2k/HVhrrjYmM1PfSTOB5t48c6NTB1yA1ceknj/iVJKLyjhxpKLM0aTIs1pfXxxLhUmndE2PFsnRoWhOZdOaqoi9arN0Ol8DYM2pBMlK3Zuo7MGj6xSgqvFd4NGInjoJRODbX8kdKNLWNvFeNpC14ShOLl5EO8upMVOHgqZ4qE3HuXcXcIpPPGUmht/lpn1bRlNtZWY6+q4UCzCVk21NWiffIvmgyLqa89eQbP91TPD0Vw3k9MvP4r+7FnyMkWUnvmSamyb+0n8+sXtfHyZot24+QZiXDKf7S/Yl7x9+1pP8vzhcIJE9hkR/eOSXULnOkdfRMV7y1EVl/PVfb1JG2SvlbVWb2xlU7bFiBwxVr4bpLRz9E5FG4oL6IzPfUuIX/oUqlMX0DuL92nxV3U8+4UJtxaQfb3YMNp+zEknUsj58B0A6teJgkRLVzbQK0tmQL3jtNRieU2rGspZPUH4iQ5m7OLqZf0Y/Yvir6i18FZlfvmh3fknbh5MrQvIP+22bmssL0G/8Uc+e/hy6tQtfNvZ3u+xKaQY8ouIyWvBpcUmsffx1zEsXsqh9csJ1QUi6XSYbajd/cr0xKRUkXd6P6Vfr0bf+MfLBP/V+N0FQ5KknyVJOtvG33Tb42ThwWt35pIkKQToDtgmQSwFEoF+gC/wYHvny7L8oSzLfWVZ7hsQ8PslSdvDpF/1OF0Sxuw6aiSN7hoCMqvIzT9HubHt1HtdTgkaM4RXq0m+7Hqiv/mGbt0Fzba3szczjjpx1a+KxKZNE7Nt0EurAIg+nEf3Sje65ch4SC5UtVQD2JHKFaUcIeT2V5EzsjnTkk2oSUhpp8crk82mz59k89cvcKZcOJvbKq96KUIqZWuEzU3blDZeCIO7N5iJqneUTNUq++ExsNGR6qFAVUu9X/tRG+Wu4ke7fnmIl38O5jXXeQQGxlAbF0T1imcZ8Ogybv7sIFNmP8rhgb3Y+/pDFH4neHQKs5RY/xsWGvlpsCJPOBcqpqHGmCBefL0fn93XjXnBoj56ok3inlFS7levV8IdL9wzjTq9EqIYcPVMuiXb+2NsUaFqxOWsY42H9qAOC8GlvI56YwOGd5/EeZDiIO3XGGSttNj3l2LCU8rQhIbgFRzJ+hsTaO4jNIqa5hpqXcTCCtAjW7xiV4RNYkTPaags/hmVRkj1rSVfKyz0TpOPyATsvcDS8QovE8BlURNYMuB+Dq25h5csdSWSA5NpdgKvZjUPr1X6TG5jljBECV9PdvYpKmvteZa8AsIpuPsqooZPcjivRRLjYdqhtqeKlJpUHs56i/S7b2d3YDkVIfakmbJKhV7fQOdU+zDwzPdeQ3XJJZ214tzsevviYSvGqFgxTtxUjx9SGVsjtAWvc3k880E9DR6KtcAjRJjVKsLt+bLCL1Ti2QS5OUrAx+pRKkwSJJ1vwLNR5ppfodRLaMMA1+0Sfaq651kyjylBCE2W199P54ubxo3YnGau/tQ+GdJZb2ZYsTc3/qDH0/w/TG8uy/JYWZa7tfG3ASixLAStC4Jj5XIFM4HvZFm22i9kWS6SBZqBzwDHqvF/Ax7130OdxgjD+hPsG4mHe9s2woSRYjJS1TRwpjmLh8s+pqZHNIb7b0bj5cMVu/RcccDxRTAmRPH8TBX5ftBsMd84OenwtFBgFM9X1NMwS1Gk/Eevw+Plpyiy1LrQo5h93L/cjHrtZtyumMY3y6+yls38LaR9rWSKt046AJ0qxWhtK3HPNqIIYOfyRx2O2TbKiztvsDdrNNqM52YP8aXnrjyij+ST8ui9xIycQt9NOzA1NVKdl86xR+4gY9u3eFQ3I9fXY/QUL3pSrOKgfjPyHqb7Ks5XW/qsjKwTjMxx44ZXz3Lmk9cAMNtQTLYmWR2bFEsZyoJxNvsQUojQTnb2kLj409ds+bJ9mpOwA5m4FLUd2tsWzm0TdVBqVc3MyX+W3fWKxsSA3himC22msLGII0kaltzugjookEce2MCIAcLU4RfeCe3W1fSef4/dtXU3LmXn07eReM1Nom3RwiwkaTSEPP88bl0UM1HChz9TtuR+6/fm9HS23XstJyeMYMumN0jMk9E7qxn88WG6Bfagm5NiDmnsHE620fG1Drl2PgAPfWNmwLlLOJM8vOg293ZCEpMdzkv1FjZRdTtuN20L3P+tmdBK6PfAi3gViQW9xk1i9gNqjG46XM0aEgtAf5tSDyM6rBuhY+wpyB+7QYzthku4pO4OuoZ7DEqIuEdOGbkDo4gOFyHTH8xTBFKtWous1ZIcb+/4D1mzG4CYUVOs2+69fRWeixYQN+ZyjPom1EYz5uuv4qyNsNeKADdF63F6Syzmwe7BZNYIc1hWjaNgkkclDYEeNJra9sn8HfizJqmNQGum0/XAht84djaXmKNsFhsJ4f/44zGL/yGeudWHJ+bY26Tm50YTVC1KfWo9vXF1cbS9AuwIqmB3d4lcTTWGX/Yz995t7M3dwxzNCuqcHPldyta/ht5Dh6mlmQf7P8T+J6aSqhOSca2hHrVaTGTlqYqU0mJhG40sk+ndFIhkoecY8JUibUd7xdDFtwu9/XqytOc9Vu6l34KfqyMlA4CmSfxeaUOJwz4/rxBaeirsrYEujprd3YGz2NLpkmiYVx6hPkZMxKHV9kPMYGpm99FvuG1pD/xue560D94geNNh8g/vJuTFF+h/zR2EdxuA0cOF+ijFfOS5+DmMXynDK+ONRcy/WzzHvqcbGfjmbnEfjaWcjpY47aTcj0qtwSxBbVM1MZ0VmWTW6gI84zpzvKcbF/sGCdNf81/HBNo3RfRtmNGDNR+6M+CUMnF9EZLBfVHCbKbTOBPZ4MKYiiD0leXsHt2HfZ8+D4CpWU/LmXMYK8W4uWGJ2rogezv78NNR8UrlV1gq5KlUfB6dR4HGPnHMFp55VXjrvHFpkXhitZnph2QMzhoq1Xr0p05jSFdyVVxT8+kUkOhwjYM/KQLIpZNbce4F9k8fxb51bzqc13v27dbP2SPiOTgpkpfujeTz0Sp2JjvRpa8iPOk+32B1jptV8O3wz3BRO1v51XYe+ZqjVyaRFgKap+5jh38JZZ7w0HwxLmb0vA6Tlzs9YwfZtaFq9Rrqd+xg8W1q1j45jKbGWkx5BVyoEGHP9+Qo2mllQQZSSwuV36yzu0Zr4l5TqDJGc++/l/WnVvNMl1TqLDxowW99y4Cfcqny15HvB4V+KozfvIdXL6UEdNFhEeaeUnkBrylT+WWAGxevVdq8/OUhvPh8D9IGhLL4VgmD2/+whvE7eBEYJ0lSGjDW8h1JkvpKkmQl/pEkKRqIAPZccv4qSZLOAGcAf6B98e4vQpw2hOgSey0gep9Y1QPX7uHdoHOsH+3a1qloL+YSUSYTHp9MZ49OuDaauSzfn1XbEnBrdBSZjGkZONc1o8suRn3f81xz3JmeUQPQd4vFw82XencNRhWEm5QFqtyShGf+4EsOLr2VEB+hEjdplOtX6Csori9k74dPkzZ4CGWFjtW7LoW7828vKtFe0Q7bdKGhqN99jqJuQoNppS2xRcr7r5B9m33YYu2hAzRZTD0Vrvb2vyCXQCJym7h7g7ifrn4iDDk5KJmH3LewXXORi7nH0dQ1kZ2qZGubjAbybSJL/M8VkJjnqM2Ne+x9On++mkHzFeumpNGwr4vEwBQjepO9tFlprsO3qIGFnwqzSmz/9oMi/q+QLHkWDaZG1BXVSE3Kb8/PjeaNVBE26u8WSFBuHZNeO4CzEYIKG1HViAm/oiADz8XPkbJBxJYE1qtxteTJRfnGogsRDmCVSRkfYQ9/SMiRbLu2+D39hN33KM9ItColV8GjupmsK/pS5wylPvbTgjreMZkxpEV5Ry7NavaQnEnKh1izY+ngzGLFr6HNKyGnPp/xlaE4t8DJSBP7pSwaLPOhbut+jBqhSvrUybRMmYe5uRnJxZn1gyUmHIdfgqr5pbuKlT8+j3uDmYBaiDeI6MReT31DXrQb54c75l4BTGqMo7S6gMqpg4gpMOJmtvTHD0oyZyu3U5OX/STdqrVWfaD4O2vPnWbCvgZGnZXsiDvVLUbqlsxF//nL3HejxK177yCrWllkA74QQaP+cV2Jv3ExMz7YxoJpT1n3m7Ny6FrtxnTPoeyMWYaP2t489nfiTy0YsixXyLI8RpbleIvpqtKy/agsyzfbHJcty3KYLMvmS84fLctyd4uJa64sy+2LRX8Rrn07xS5KBuBUmBGTBP0vmJgx4W6GXHV7m+cOLPEkrhicymvJDNewfUEv6g31OB1LAZPjghHy4HsAGPqKbGZ5xTrqowLw+uRttN4+eOq8MDupkdTKixuZOAD1S49g8PMkxD2UsmAXal2wTtoAtYY6qvRVeFmiUJzUjhFalyKvPr/dfenv3klztKN/oqgkgw9euIaQs2IyPV7iyLNUUF+A3mSf6Ru8aicBRUJtrouwzxGpaqwkwFnRdlqDB8qayrn8taO4/LSfwnGCTyipwdt6nBqJ6BjF4ez74QYe+kb0+ZbRXmxePpvFt6nZn7cP4/c/0Xze3onfpdQJTXUDxVmKErtuVihO+aXWIjzbe0v8qEtto4cUtOHqaRen48RzbfEWTuNzpcpvG46ehK0ihHTZbcGsGSFeRbWTmJg6ewvNztuiPSb4iu8vfaw4/s9WXWB0pDBr2eaPdMkDbaASCNCihidSXrV+r4kJ4FTZaWsRsALLI+rRcxwBnboR1Xs4J8ZFAyCrVVwsckzMDI9UGGC7+dtHSTl7+eK88Ab8e/a79DQ03yuTcWhmLdfsNdP7s4PM3Gfmnu/NuGeX8s2CBDL7iYWwTicW3cOJon9kFahQcaW6H2qzzD3Li7hpm5k5O41Wn9BNq4TQlVOXR3BKCTWF9hqQ34KbCbjnHqasvMjtb2TiViHGaqeBEwh67RX79loWhsj5C9vcHmFUhL0wd9Hm3r+WYNYoU2uNvwt+z3xCwB2vsOrbUD5504R/oTLV6cLCkUYNJrbHUNY8cS0lvYawfeEV1v2Ll+cz9eUDnN/4Bbk33mRXr/3vxr8u07stVN80jXpvYe8MeP0rIlbsaPO4C07Cpp+ddYJGH2d2ddLzS1AV6wdL6J1knr1GxZvTHLu0Ymwv6+czR37ktWem0tBUg1xdjbbZhO/Ok9b9RjctWT0DcPIPwMvZG1nfhGcTRMnKxDts5Q+M+fB7Ij1EaKxHG+GLl8LnSqVk6frBigOgwVni4fz3KDA4Rp75NEgs2mzDcjr/WodjJr/zHb2OOvJotSK6UGgYu+4dztvTNay+KYbTpcrx6dXpNGkht6mAqKwGeppDGOcqbN81NrW4JbOMSdN2OOEwr2QyC07z7nITDR99htvrn5Py4yq7Y/zLWnBqMRGuURarmIjuuJWLCO8WJ4nuBRoSc9ondjPEhmHu4WieaQ+dOvXD4KYj2F9IuJ09lcz19Op0qi3319U5hnjJUsfCkul9oUzQcZgtFDXyJYmk6X1D8OiVTMonwhyYX6yEXWdc2Yc6WWgzZiB7/iju/MomdDUwBKfxo0i5QizMLZZa2PpHX+BsxVn2Z+/h82gRsCGZzMRVONbmLv9Z1Jo4Pj6a9Ah7gaVc08Q0ny/Y7eKYrRxaIe5nb9e2n2XnZl9ur+1H1wX3Yfb2tFZW9NSL90qj1oqk2r2H2d1duYaEROHxfXbX8scdZwMMSLP/rffPf8KKXxQzqurIaXIDVZxwKmJqpT3vVI1BaMqH9tubpE4vEgu1IU6JEGs1U2VVZ1LnJnJYnn+9L9WT+uPWDF6ZZUiWwljOToqGJhcWI+/az+ED3zI0y8L+0OBIZlrRJOYfveH/XR/G/3M418ePYm/7bWNzPPCqEpKbfDGTC2d2t3luWYxQM/3dg+iZI/H6ShXTe89h1LMf4+7lT6O/O9lByuA0BorjK1avtm7rl6Ph9h/MaI1Q34ajufDsYczzlkBqBuerUwm0+FhLbMgBv6nawTcVOzhdJvwa1TYTa3vwD+9EpSU6MiNYaaOMzNrXVcQWOHJsqZ20yCGK32JU8lUOx/yasoVv9i5v93erLdLd+TDwnziFZfPXEuwipF/9otkk33g/nY4eYuyj7yFLkFqZSu7ytwAorheSlCxb2D5DlfSdmitHKveQV8gdz4oJNjmgN+awYLpEO0q3AAadMvn1fnMHDRYJlhEDCC41EFrdfox7UawXJv0fTyEyxYZjlE001FZgmjwKp06K8zPBNwEfnTcAE949Rt/dwtymdXEjrbsPhhBhzqlqFBFwGRZnaIG/iqOdJMJee5XkcdeiteQ8qG2IBF/smkGTJfTyUKJklzAIYPR2Z8yVS7jqYeGHiEmro8IDVC4uBFdBTKnEWxtszEltsB60hoWuiMmjLND++h4NMh8e6Er3fMeFpraHCDG2pa63xUkpn7rPV1F49z00NSnho4nZYnxKajWSJGGWQG0TLZlVk4XJosk1O4m2uViipHLqbWLDgRn7ZCYflcno6kNBmDPOXr7UuMh4Z5Tx2kr7KdHLRzinvUvs31XX0AgMarhYr2gvJwLFRO6qdsHX7Mpzv4Yz6+WjuH1/qSUeivVKIIGqRdxbQL0Kn8GCMiXORykRXe2locFLR68goWH7Ov8+s8N/C/+6BaNHnbc17r4Vhg+/sH6umz4c/yuubvPc4Zli9XeRncjIO40+JYWqHdvweP1L5CY9z79by7KPFAn1vIv4oc7acDYOEIO42UmCoAA0Gi2eviHsvDKGzBeUimWh2gCiS6HsiiF4L1xAaZMYWPnx3tZjAu59E98H3sSjf3+OzUlG6/77Tu+0T9/G16IF37/ejBQiXgRjbBg0t9BgE17ainIfNdfMr+JTSwjipntmOBxT885yYu99327bwc4SF8IEC251spgkF93zC7Nv+57DIwcQc9kMojZuoGbyIGpDvdi24yNS0w8hAyaTEZXFqZngo2Sfz1/0PsOGKhpOw+7d1s+HnRUVPVdfRM3nz6G+QqknALDmugh2z+9JqU6R3NQtRuSeSRyJl9D+LMjgTpS0n7hXnX4eMnLb3X8pdp7/AZdGI2YnNbN77OVHf4WiXnZxRvYSE1xOXQ4FvrD8phB0rp5MW7efkdcJ0oSA8ARaXrqfLuNFMmm0Npi+6TIuI+awe/P79HjnUwLvv4/wBCUiad35sdbyu4MuyHR6357Ov6mihHUv3Mja+aM4GynGpV8duJc34K4H73ozptJSUiIg996ryYl2nNy9ly9DP/syPjzQhWG59vudmo147z6FR7mjQLQmRjyrmVuVfTXeYtErifLEyVIJz6cBjB8+b3fuRxNVVrZclQzDdpZyOEG0P9o7hrgbhSnZd7wgBP1qKLw5TUXFuLZzZ0LzGgmsMuOVUUr3HJkwgzte+dWsuFYx56ndPZC9PYkfay8sxT33FU4mSPRWxuhl729EO2wwgc7+NFeVE/9LNrHF4F8HP/QT7TTPvVy00YbOx/z4XRAXTUhkV55MSiHfD9JrlMCDqkAXanx15NeL8dPQhqD5d+Fft2A0ZWa0u2/Tk2Nwvuc2Eq5wTFADKL4gbPj5NTk0m8XEk3dyH5ofdtHS4qgmxg8SA7c2uRNTn/yMLQ+P4oeJvsy8sQqTsxMqJyfe75zHTh8ljt3k50XVwisIvnYePYZegTouhpQ+/vTwVEwhnXw60dk7gT6Dr2TuY6vw9Gw7AsoWAWr7ReWYaylGFXinFPD8TBVFAY7SoL/kwYd+d9K563AAQtSOkk1yYDI+l1Tm6zX3TnwSulE6II6orvYRKjQ2saXsFwYcuIram+/k3JvP0vXuj8lf9RkegwbRs9d44r5cxdlP76ahp3C2mg0t+N32PIadSsZuqA1DR78EJUSytLaIdz5awJ4j9iaEssRADnWGKJ9YjsUpErOXuz8Xeyn9F+TeRllRC3pky/j8H97VSWXCpu3jFcyKnHGMr1AylL+coGXJ9UK4yLznCr65vRvOA/piMht556EJbN0sktBw0dHQNxFVkJCmqyptHP8VBu4rfJeRmjfINyoh0OUb1/9mu7zLm4kslemZ0ki33LbzITb1l8jzl1hW+x2JAV0d9r9SsoqHPLaiP32GtIuH7PaVNgghp63EvcV97nDYdqKfGFdBObX0qFCSBKVCJdLtuRs9uP2pTQ7n9skUz1Jz87VsbBZBEiuqhbms/6y7mDR1CaODhjqcB+BS24xTo+ITuujZwFfjnJk9Vam4V1VRyLbYOtbpztid21wvcrWaxvRVzv92Be9Gp/HKAj9qjfbu2ClHRD/vOr8Zw8LZuAYrASRHe7owc2Y+Z7xquLW4C1pZTVV3hVYlMrMebWML2T0CeO56V/Ruv++z/G/hX7dgnBwajL6d/i44+SuHbruWH95c0ub+4j7CFu3fox+dfcQEnuAtVEetxpkVU135arjSpU2uwkzwkfkX6mfezJSEacwMmsibPreillXUVZaw9gUj8x5SVNYSnZ5bfTZx+KGF/HTX1YQ6B9LlWDlVx5WIodOz+3Dsmh5s//J51k3tRWW5Y3nVS+ExWslg3t1dIjlDRmOGKjd45cEddIsZ4HCOXFaB932vM+SN3QB0u/keh2OK64scnN7GdZsI2nWWy1ekU7lN0ErsnxrDxVFxdHntPeIPF7HmVZn4IuitESaK5MBkXp7jyq4eKlac/owPDr1FVrVY3A3GFqS0bNLzTlqzKxr7d7E+x2a9MosPm76Ix74yM+SCvRnlzkeO8eDSUzSVF9MnQ5kk644fZc46xX8TEdiJ9lATF0hFr7YjbtqCISKIZhc1eo2M6+qf4JQygd7oO5lloaLuw43jHuS5xgnc8twpVEiM+T4Xt+PCJ1GUfpKGmTdxZqOIkjrSQ3jdzWFBxHYdzKx3Ulj7ghEpV1lIWmTFvNisgewbx6LyVRZ1Q7APSRNm4TfDngKnrJOycC5Y+hUTTsgs+8iE/oz9ZAkwb9lZ3vjQxK6eaioi7H1oXjrxPbINLqnKb0Wd+919leiBaJtIgpOnt9GkhQ8mqtA8qYTlLk6Ppvr2+5TrWNYVtYXa5K3GzcTuEH3WpVxcL37FHhIWvM7Z9Z86tAOgwd2JwwN8qOgq/BCekZ1wvno6utlLrMe4mTVMOC4TccE+ObbiRpF/ceCksoi1fLKKQb+U08stgaDoLhyf2dP+3hdewZhjBpZIaynTKAJm2MKXWfuCkcAaCb/txwmL7s4V971n3V/u50RtmDdT+8/jy6XHCPZ2jFb8u/CvWzAGZjnhfEnKRFqYmFwWfq9n+DmZbpVtx+Ine4loEHd0ZGmqyOkeQJOTmHxUajXPP7aLx19WCqr4fCr4jO4p6oFHnRHj/LtpfGM5IQ+8i0oGFyeRAqqtVia88Fon1u3rQ58MmXiTP4WpItnLXFNtPWabcwZbtRfxrzbTLa0ZDb/PLXPGpVzJOH1MSYfxkLUUT59JxckjDueUNdonbL1Z873DMYV1BTQa7bUr99MKF485S5hw3uiWx6MDc3hV/TNBOj/UBhMNM8fTMrQ3J1YuoXT6QKL2ZaK6kMmwl3/m7Q9MdLMkGGo0WuoXziBp0BTrgDWfTrE+x5r9e8kcm8jBzhLHAoRpzTZxzxalpYrN+Uh/b6istn7f3ktiR7yjs9F6vEcZ2XV/3CS1peUEzZiQ9XrOxKg4IilO4OaPVyE99BIAP18xjNJXX6OxIA+VWoOuc2e6xgseJX+VF+EV0FknAhxGHRaO1VnzKjgRrCfUKMZqgFbR/jx0ygR+NF7icb89vDFGCemtdYaP/c+xqPMB8myUU48FN6CLj8d54ABOLVFqyBfWO5at9awV2tFNr29h7ET7CCKd1g1VWChe3o6UHHJ6NgBh8b2s26Jt6ldrfHz5+IGuJIX3xrVZZEoDeP9yBvVxhR7eZ9wEZC8lvHTRdg1xRWK8dE0V4zFv/3YAmmT7Z+rSqxdugwfjVm+g/6Eq9D2F0BdRLjPrc/vnq9EKM3RygX1YrUvvXtS6wOhKRSONiO9DtxyZsa/upaWpnthc+99tPimizZb94IdnnWK6DisTY9W/ykRGdQaG4yf55r27rfuDSluIPV7MmTXLOT6oD1UF9mWP/0786xYMc06ew7aqa8eT1kN54axFbC5B9mERPZV95lcakiL4YK4fJ1zLqXQHI2Yu9h/AxYGDHE+8mAXjhDOrpMry+2o1KoujMquPMuiaayqR9x5CGjec8Dk30LoW+IxVKCuW/uTCY5td6TxoEr433oi72++zV8YcLbQSD+bNVDJkMwNkdPllFFdkO5xjV18AGLGj3OGYUQufpvNTL7X7u759RX+sfcHI2heMDHxmE/tC6nhhhopbI3ewwe0iy069zYGSQ0z9Jp9BF5XfbY2SkjQadHOuhiRF+ndX5j+CB4xg9SRXZAnK1ovCPxer0hza0qJVEWaTS9J0/TRc3b2t34NaXEgwt087M8S9J10Nf5yWZnz4WDybwEXtTNjHH9L/hges+2yjpNxULrQ4SRyZ1wdJknh2kS87ky1UH35+NN4xB1VivN21175gxK+8hWNB4qEWS4qDuMZXR5OHcEQPOS+z4nUTV+5UOsxbdqbPWT1zD2q5d4GGDx8SglDaZ29zujGNo4WHCcoR18v1h0g/R63r4GAx5nbfMZujWz6321fuCVfPK+VAgqO5q3URiV9z0GEfQJJXPI8U92f4x8eoeusBzJ6Kico2Sk/+bisNzYrfTSqvIldVbXctt0Fi0U0KsA/7fTjxNI+GKb9v3idMaqm5J9D/eoCWWxRCwRq1kEoORdpTiquffhvPJjDXKW3IfnQ2Z7q6kV+XL+q4H7zAptnRZF8vTKYhB4XGrM0rxcmo9E3RNJFMmlp10Roe7X8826FvKqoKcKlqpElf77Dv78K/bsE4NiTQIUpqiHcy8acreeJ6LWbgXK1jLWKAomHCweXlE0xfQxif1F7FyBseRdr4CVoXR62k5pqxAGRoq3ljcBWaZx8iIkFkeKpUKqsfhC7KZFDWJMwjL3nu4xVpGwFuwgHXuFcJGSzMPUdR9lm2eOYwO/on6lS/z4+vq2/7mNaKbbHejslZrbxErYhqIwv6SEAdm2Oq7baVTVMWzZoqe56hmAoN8Z0HMvjqO1hxtA+zLvrz+esmph+UqfR14rwhnwx/YVLJixGTRUNdFcdvmsXZjSuV614z1prx7LTnKEvvP8GgCzJDDcJklOhrH/6qd4K8MUmYfBSptMvyHTQGCWm8bslceqQ0Ena2fXYbl30ncc79LfYbe3h8+j0ALWYD3jtOIKUoi1i3l9/Ga72YaEM9w/Dq3pubHhDBF/FnqtBZfqdYXcd896855Sy+H+uu8HaFVUlW1lSNqzKxPnazCylBihqtMpkJr1AmKM0vR0nIMdBtZw5rXzByy4tnyfeDqCoNGhO4mpTnrteC7Oxow3UJFv6YyJRya132VnjJLrzieh3dJUeq+LLujuaUjEGK6epU7mFqP/4MgJePvYbOINrdHOpHzkyFKqbSA851Ve55U48WqvuLXJUjPYUTPuBKEaSR32SvIc3aKzP/ZzPZnb242NkNnX8gWUHg6eINwNcqJfDBxdKN/gX2k7SbxaG/safSz5u+f4UfujRx4aErrEKPOi2HvKO77c492kmiWqO8j6u9Rc6Qr4uvNVGw2wAlaCM72oWs3kEMnryA0JdfIjikfbPpfxv/ugVj/NvriN76o9225kdfAODpQU9hCPMnMrpHW6cycugcmu6cg29cFy4c2kLJc89RefwQrudzrSU1bbEgdjfnIqFzkYrJH5/j9txXxCRnifTQOYsB75em2NBDLVxS92zVMvOI1lo0xfW8oipXN9dQ01xDRFoNS3a5oW52DIm9FEWNxb+531Zaa0WZu4kn5qg5ZIlEOVFywuGYog/eQ/XYa3bbHoo5zLeWXA/zefvFV29oJORQFuOWbkSz+zCNaSJRrrypnA8e6kbB9H7grKPeVaJ/nODv0coSAy7KdGsW9hOTBLdF7uLEF8Knoi2uRG3p/6x4d2rffAj1hJF2v1vv6YS6pJJiF8VM4H+2ADksiC9GqTixXeRtHP8NevP/KySjMDtIKhUtr7zLma8/sO4zNDZYHafpNZk0HT/O91cKSfOKlRn0P2Wp+VCrYs3OrvQqEnb5ueuU9mXUZTNcJxzSQSolqGF97At09VQoXQDOxiqLgMHcwqmyU5iaFa0jvAJcYzoRV4xdiHVCIRThSMbZ+7ASddD9EnpzTVUdUY99hutJxwCT90MVs9KLV6u4bZGar2YE4LXnB95/YyTSYIUy44WVJnyKxcSsK6zg/OMKH5ZfSAz9Sj1YuFjNw/PUTJvzBIOGzEQ/fzpXvife7/U/vEK5JzTG2nOtxRfIhFTB4YcmkfboLDTuHsSUQLCF3+m69xXmBE2TWBCi8+3t2K2Je9NaFBqRxVtVPFk1glsmPIrBLPrwsqMyw87JPDFHza535tDy7pP4vPws3oFKffd7dooFLtAtkJdn67j2fjXrByjzyee3d2bjTYlcdKvjw5BU6tSONER/F/51C8b+q8ehH2Afclln4SySFy7F9PAiom9e3NapHNj0IS5vrSKz5AJ6ZxXFwTry169Bt/gpkB0XjDVbEuiaC5LZTHyBcCDu8yrhudlisGl0zjRpIc9DkTaMWhUtcWFo6vX4Fzei8hGqv6an8lJ29kukk1ccsaUS8bvSceH3oyZaNZU2+yRJotDJMfwn2DeK2294jwSj6J8AF8dorOHmTvSrsI/A+ujHCCvFuddYe6oN2WTmyMWdtGQKX0KGxbGdW5fLe76LudplMF26jcK9UaZox2ZxkmUxkLWWnAMZVnwbxJCZrwPQ0q0TWXHulHnC3rgWbi5+lZ1NJ+1+t8HDCVV9I5EtioZR3isS93oT1+0yM/yczIF+HgTPmN1uP/1fYbbkBWi1Lmi1LiR4Klpc6hMPop8nIoYaRyRjliDaYvM2YOK8JXHPVFeH+tApjBVCcPhpuDJBebh6s75B+MwKmpSIoou334rzcfuM9e29lFdd6+mDj87HwfO1olMBOQFYQ21B1OyOCnIsrnUwTPFbXcolVdpYglmClArHWuBPlCk1Lh76xszy90w8+MBxakZMYd6DexgUNhjfhxVal4ogRaMad17J99jjnENFTRFvrFTz/Ocm+HQte3d9jvOKDey7fCQAo5qj8Tbp6NvTnjX3fDicjZKYecNXjLx1BedcRQxyhr6ACk/7Xqk2CUHqTHd7ivdWihn15t3KNqOe5p938cuoZLukU4C+UjRrz3/FawdfIuLznajrlf5r0Ik+Tw1XcV3MTCaf0eKdogSyPH7fSRY8tJ/SHT+R8PBK6or+uB/tr8a/bsHonOlomvFfcAupA4WK/dOqZ/jpwOcOxwAEHhfOOfe8CvpPW8Co3SdJ6iHsk5JaTZ2r/WBTnxBRMW9MF90syTC+1wzmzhU2f72+HpcWiExXpPuyAC1zZ5ZQ6gVnys/i6yvaVe6vvCwZCe6kJ3pwukw40dpKALwU2vCINreXeMPkL3fSo99lDvtMeQX4z3kEn0zhu+jUb6zDMTk9AsmeZK+RqdKyrZ9rGuwr1AWMnUiomxJe2sXXwiUVmEzGghs4/P6z/OQl+rmoVpgSGvTCnp6uV/xP2kzFzFDbI5pNd/clNdmfWwo78/VHHow8bi+FRWU3EnmxBn2ZMrEevmMk+jMKXcfE0FEkukQ73GMrqrqEUZUY2u7+S1E3qg8tzmrMGhWSRmNHv53gm2ANR5561zJ8Z16Dq04sZmZJ4aFqTV5sLdgVbWMRC/EKJ95iUtTYaJmXspnWJ4aztEQJ/2zqFkt0cCJqD2GOa/WXjM5wQa8FvbsTwd9+Ja5rBkMb9WfCLI+13kWiVmXv3PXr1JULG54l9pobHc4zb9rusE1jsee7Nsvs3fAeM2pf5d6bhUbkVyLupb5rFCZJ6cB+qWb86sDZYmpNP7Kd8EOij6IszXUpqELT0EzagS12v/f9MCdrXpRbo4nEQgtfVc++7HnucrtjWynSm4PtQ8qbLaScxRrl3avUi05xRUtQRCL77hjKI9epWTtUxdQvM1j+romlXzSh/X4H1bVKn1Y2lOPRJBPg7EfIC18yZ0sTQ0/bWw1c6w0kO3UiIc9EoOb/3Yp7/8/BVlJvxeuHX6XzQTEBXbVfpntq25Ey0deJyBHfkBhOpuxi2ZtzqJ4+lOYdXyBJEv2Pp5B0QVG5jZbeXRin5HU0f7aa6EWClsAJoWl4ZCmzQAR+fOv5AAH1KsI9I6jIE/Zh3UlFYtw4QMXqQUYrl5TmEl9DW8jq7GkNRYzZtQOcxCTh3+TEhbdeoCLbkUOptL4YqURxdL8X4xidsTm8jFfj2udfkn8V0Vczl2qYuVTDO1doCbJkehvDg2jx9yDv+jGUdQ1BBoxmIzG7xT139hEvpZvOA2NMGJ0jlQSso52Uxbnq0K/Me/UMQ3eXk7F7E1J5FebGtjOybSO/It74DrMszEZnoyRqNmxkzxcvtnsvp1WFXDT/cR6fX6qO0qA2gVmmzthgpfsAMMtmZEv5mC+fmUP1119TbRALo7OTi5VLKsRVmEniWn1MavGsZz2oJifaldhyMcj81Upk1KADpzGEiz7e1lviteQi9L8qJW0bdWbWjHZi6Z1CMxx93EBJqAvRBQZ6enVhmE9f1q15XOmzGsew7TBLmGnvHb8ycoE9saFOVjPQHI2f7Jjw12xRhlNvGd1mn7nWNPPBOyZmtNgLIe7ncqg3Kc/UNSwC8zAlmz/WK5ZAnb0GXFAmtFd9rb3Q8mzeAJ5OVeYBjY8vtf4uhMqe3FTd3e5YZ4MYZ/2P2/swTDfPpMoNghKVMRlq4ZLy1nph0qrxGDWa66c/TpyXI725m07RWCKLjUSVgW9WpVXjvljl6EctaBBzVK2+7Xo9fwf+dQvGHqcsqi7x3S74xd6k4+3VduHAg6mi2H1edQ6G02eYuPw4O3Z/xt3fi5oEH13Zha8ndrEeL00VErnuTUVjqSzOprFAqJQqy8tfnKhE3jTl52Ba+jySyUxgfA9Ulkekm6zQPj9ZP4bXaiYSE9gZtY8Pzk6OzuhLEV2htmZ6Z40aAwYhmWYHQtDKbRRedLTdB4UnUPvAfOv3oYWOLJn3FvRgRfoou23mAUr8uVe3XgC8+403b38g47PhV/ZLmRxIlLhpRjnr+5m4N3QP+30rcNY4k+SbRIxlEqxpEROo2tsb+fPX0YxSErA6d1fqE4QOGIl3tpjAig0VvDVVxdEYR04og1ZFRIzStu5n6nCNFQEHniYxBoJc2y8a2d+zOz1bfq+opIJRkaPwaQC1So204jUSHlHImNOr0qnWVwMQe1HcZ22CiJZbdVdX9gwTk7ms02LsHA2WaKGDnUQI5sL8znhq3DkRICbRYlO19dqrf3nH6pMaf0LmjlP2Nnwv2ZUupkAGq+JJsSieQYVNomJcSgpNv+5n2DfKhBUabB+hBZAeJ0xF76y+i0Nn7SX4grST1F4+lyPfvOdwnus8YfILXKUUECqM9aJFA9sHOpNsoT8f+PkJmiYNsTvXO1Spcy1l5qH55Qh1AWLsS0ikRIlxczxWTPIBSb0ASOgyzO46Dfv2oT91mlOdNOSGaVGfTsWzvIkLp3ZS9djTmIKVhadaJyT9VvLDVtT9sBmfBpBLFYGq6L5ryI9wprS+hLLs8/S88mkSrn6CPpvTudBTaCitxZKc1IrFoDFU7EuvSsftSZHhj03xsoJIV7KTfKiw+DPbql3zd+Fft2AMOdrgkK3rXCVeuu29JW69Xc2xfm1TbQQfFrZal/oWa+Le5Qdl3l0uJqehKbJdcaIGCwFcaoiZj+9JRDWoL8Gzr6PxzrkAmNWCoOz8k0qYa1lzBfXO8MIMFR8mV+Lq6cfxJB2l7kpeQepXH5G+cjnbk9UsvNsZ/R+gx5dT7R2QBxLFSxVcakDdNZH4MEdHv8bTC7dpk/nqnWkY3HTEH3eMEMra+yMlP9qXQcke24UtM6J5fLE3lUPFAhqQVk5QpYmpW6qIGX8FLU/dyceBdzNPPZSNh4dydUEYelMzFytTOdlDTI75Ft9ORXURr785myNntll/w+O73dbPjTbU733DB3Dr/asYMXSOXZsWPhXIhg9mYXRz5qMJyrDXx4dy/41qIvPFb7UGHbQFl/2ncc7+7eABW6gsJkkkCY+gCHRuihbQZc5teN+xCIDOo67Eb8HNjP1SUHhUhnlg8BPHFvpJXHtlPheiLLU/0sX4GrkqBb/iRjJum8DMpRp0EYrJMeKRj/EuU8xSvufsNQQ5M4ceWzOZ8tohuxK87pdQ9K8YI8anKthxkTy5ZDwL7lQz4Z0j6Hf+YrevtT5LpIdj4t75RDHB276DNeFeaI0w7qCebalKLfaHw5XQ14qR3Sl6516H67XS5x93LqZ8ktA4SqIsvqNH7+bD5RMp9mo7J6dnupHIghY8q4RFwdPFB4NOw6opivSv1bmxbqhEXRd7k27YNpHMuLW7Ipi8Xvsd6/q0UDK+JwGXmI1ai0nt7i5R6wKNNkWdHrpBzZJb1Pj17EuXrsNR+fvR2VfxGwUWNuFd0UxylzG4DhpIiO8fTx79q/GvWzC040a2u2/E7c/zQOIiurg4qpAAYT1EWJ9/cIy1lnezUW8nDdjipypRICfq3qWoL2RxQ/8TlIzqSsRMsWCokHhjlY7OvyhOrJjeI/DZtYmZcVcxpTmRermJ5PPNNF1Q6Loz/YykB5iIaHbnckNX1PLvJ+6VOdnXgRhcZ5E6g/w588Jc9J0cJ8rCjFOkzp7BZfdvxKmhmQNGRzW5qL6QeoO9up71w1dMXJfNgq+rqU2xp8YuD3MjtsjMVYdUaB5bRt33G9Dv2E1RyhG+WZhE4cRe5F3Wi0VPB9N/kODv8WiSefAbM8mFilSWZsPgcaJASTrMrcxCfdtjNG2zZxy+a3Ud8d+fpLg4nQVblQnEnF/MveuVl/5E2UmHe2zFyRiJi3/chcFe90L0TiBJEhXTZ3HmHqVuiDm5K/pxIrv+vaR8bm/8jBdfFpTWS15KY+wGQUcfiS9f6hbRQxITVsA1ilO+WF/GwooebNzYmUCjTbit529nAteHenOq7BRyQ/uS6pePD2T+DjMrvg2mpNgx2mlORjAfrBGLWo8AezOOziI9e2gdNdKsb75w2CbVKe3wOywilHKTQ3nxuDJpfuZ7ji+/e9rh3OgcMa6Tn1jG+BrRR1e7Ck30+6+eYcxTW6hKd6QoAaiJ8KEiTtEmIgeMJmL3dsIvKlUV3QwqQVZotKdHkSzhzGMGKrkhr6514WHVFK54YiVmb3caY5VB6vX1z5T2CGdCaRBVb96Pm7+i9b3lfQtvJiwlzD+Wg7Mnk00FO6Yq72OFv5aKEDdyE31Yu6gLdV4d1CB/G36uO+pQ06DFUsFKtfAR4m5/G4+zjrTMAEfdhKMqT6q2VsYrqMunxVJ29dr71cy5T/EnzGwUg6yqLI8bfmxm6fEIcl58ll/niVKvklkmNLeB0PcUCV3fUEvusT3Evf49QTvP4lQnJMX4HMVZP+utzcxe8QsJR4oY98zP1lrdv4Ww8VMpt7y/99+oxlgobPGqkgq2fvI42VknHc7xw50ueVgT/twX3uRwTK+AXgS725s8xpwSUnBEOUQfEIvhus9mc9tTQby00J9ffvyQ8teX0ag2kdqYw099JFICWnjmtnVcM/pOZpxw5r3Hiyk6ZZEwZUHWJ2kUvitbsr2R1YoE/PM4PzTn0klNs08MS0ptoueGFELNyiTW4uGMS0ahlYzSpILggfalOG0R36k/IRFJ7e6/FEPjxoCHRaJ28yPOQzGpHFz2MGfvugWA3hdaeGqViTE/Cht1TVUx5wsFBXxzdjbaJ9+ixVLfY/th4Yxe8+QQ3GM6cebFR9GfO0dulkIZX2NQkvh+6CexY8UCVo5VxqWHdwDy4nmsf94+gm3tlf5kB8KReImic4KKxvViPoEGx5rtdS+/iaqsii9fH8+FofaaRImlemNbXFITcsQi88UoZepJPKHQbnSO7I3PfUtIuOthdMdSKAsX0v59683cb6PIHuoskWuTQ6k6nUrmCmECa9gs6Gim7mshrhiiGuzb32oWqjXUUd9UzdGJ0ZglOF94knvfncLoXxQfQVm5mAsubvrS7hqnbh5KqRdI3ytab1N5CU3rN/LxbSOoVOtZ3cm+iuW34YWo8orxO19sL+Td/xzyfc9yZs93hDkH0aKVMDsrZoPg4mbC0qoovHCM0q9XU1fpWB3z78KfWjAkSZohSdI5SZLMkiT1/Y3jJkqSlCpJUrokSQ/ZbI+RJOmQZfvXkiRp27vGX4XhB+vtsoQBnMeOpCrUHY1BSJ4ZjW2HrfllCeeZrrqB3pPmEf3NN8QmDkKrEQ/3qmNOzNynSK/SMaG2hj4vBlunvdn0y5DoUSyON1ucnkabxKii88cIuf1VaDFwrOE8GktBncquisSx9ZtX2bDiUU5Z6ko0/gF+fFNxKf6WYKxbfzKhtljO8v3h7g1mEqodKwO1lodtxfAGR8m1SNNAlWf7w6gpXNhnY1f+wv0/u7La7U7CIpKojQvCZdMXDHzmHW7+7CDT5z7Jr6P7sfuJheRtEJNiQZrI+6j0VnHNEiPHeiq+Gpc9is+lLiGU5e+N4827Y7grXGhviX5tT+y2JJEHFw/DYFIWYr+rriapZ9vOWAB9VTly8R9P3NM3N+BUI8yd6qfvR3vLddZ9/RuDrQV/ep8REnZgtDDf7Z7XjdIJvQAo1BdT6wLZTcKs1GqSmhY8Dn+vECRXC72Mk/L8bInvphyR6XSynHtGP2nd1tJQx/iIMdw78nH2r17CszeLSTzMPYwWDbjIGu7/VhnHxjZoVhqCxMKblnWMihr7QAC/sDgK7r6K6METHM5rMQjzz0THlB4AjtWmcF/uW+TcdTsnYyRafBXzkEFS2hFfJBFpE7yV/sHraORLxqFKTMq1zbV2m1eP0fLxeBURxUaiCo2EVAn2W4/CGu7/0l7rcnIT91kXb09KGXy+jMAaKMhRAhm+HK2i0BeSTzXgXy9x/S8qyj0V3qvbfhTtd1/2BU311dbzmnSind46L9yd3OlUKDP+e/s5yLnRSL9Kb278QU9w8/+hitdfjD+rYZwFrgR+ae8ASZLUwLvAJKALMFuSpFbP8EvAMlmWOwFVgKMI+1fDyVGde9xjJzXGemSLYzHE29H2ChAbLxKrAr3DOduSzcNlH1M3pg+mJTcAcNVOPdMP2hDbWZ6rqVs8T9/oSr4fGNWg0VhoHyzRTVVXKk651kiL9AevIuyBh2i0xHuXNduQn637Aa/Pf0Q3+yq+WX4VTm72MeJtoeyIkineyeb9jq4RC1L9JWU2ASu1eit2Lbvf4Zh1k9x5co49022jzbJf5iWGWJ/dBcTuzaLgzrvofPWN9N20g+qMC1Rnp3HskTu4uHUdrlVNyHX1GF1Fm7p1Fv3ip/bk/ZilDPRU/CxNNr9xMfMovTNk7lqWxfk3BSW22b64I3VuKrIHRlIh2dTUOH8aY5DIMTkeJ5G29Rt+XmefhGgLv6MZeOZUtLv/UlQe3IvaJMbD0rKPeafchkV2QG8M08TilFJ5gUIfePk6sYDce8cqZk4WNCJxA8aj3bqapAn2RIFuC5+kJOc8iXMEj1NQqOKY7vPoqzQnKGM46o3vqHj4Met3c24+25fO5/yo4eza8BZJKXUYNRKDfsimu1cSfX2UwIDaId2obUOFDZp6JQBPvV3B4NP2oequ3v50m3s7QfHdHc5L8RMLdkB1234F13oDj6w1E1QNEUsfxSlH+IxqXOGxhYp26J3QFXNX5Z5jw7oTNsJ+gWot0lTiYh/1eK/7dO5xUnIzXELCMWjV+FnyjD6dq+Qs+biJ8dGns31gR+hXYsoLHzfNuu2+O9eQuOgBQidOo6WpASe9kZYFMzk/pQuXwkmjDGCXZ5cC4O8WQFq1MMmlthElVWiqpCHQgxqjY5Lt34U/W6L1vCzLv13TEvoD6bIsZ8qy3AJ8BUyXJEkCRgPfWI5bCVz+Z9rzR/D2HZE8Pdv+tufWdCG6FLZdIWygnu5tFyj5NaSW3d0lCnWNtPyyn1tu20LLM69zk9OqNo/3+G4ldT7OyOfTuC9gNr8+NQ05r5CqVo4ki++jvkTJKTBYzFtN+/bT0xiK1pJpmnhIcbZ2CehGYFkLhnl3crN2NDrN73u9A73aduY61YsFqWb1V9y/534+XH4LGVOmsGP6UNZkfUtLzwSafIVkH3WiiN3De/LNXlH/YufInlz1zhm+irG3LeteeITqvoK+ILzIMe/l5PiR3H1fD1zueg7D9XcSvOkw+Qd3EvvsSxzsriXgdD4GVy37Xr6XjClTODNhNL63PGPl/AFoeuUBblgiFtyBp5oY+JqIYKuMDyAlVsM5jf1iZ9RImFQQEaMsOlM3lOAWEcWJnu6cHhBIQC2E2dSq/rOIz1N8I89848Qtt21h9/CenJ0whouHt3JvpEi6c9N5EFoFfaq8Adh+5TDOJyaRMWUKp8aNoHTDekx1YkG/c6lic3fWurL5tKBxL6hRJNJNoSXoLtpLqEabIe9Z3oS3szfOzTKPfG3mqv0ypaGulGr1NKSeJ//CUeXYX88S4Obo9E45ptTYyHrjZTKmTOHur+by1vG3yBg6nILBoziw4QOH8/pdpzAe50zsxtrxrvz45Fg+Gadid28nvjMqv617+l0CLdYhr0Z4s59SHyO1LIXcsjSOz+pFVhCoH76TX30rKPWCpdeLcTGy6xT0/h7EBdprm9Xr1lG7eTNvPNSZ5+8Opby+BKcWE7mWQktXZSp9XFoo/Dc539ibpPRq8WzVb6/g/KTxnJs4lorkEfx48HNu0a2l+FaR/Bv62lqGfJVCRbgHF0Oh0E9F1btLcXJVFr+C9FM0aSUyazLxnTyVXT1UlE5TaFDeeqk/a96ZSkHvMO5d7EJT0O/Xv/lvwbEIwl+PMMCW8S8fGAD4AdWybOVizrcc2yYkSboFuAUgMrJtDeCPYNGVL5JyiW11+IjrqHHpROUQmbTcFqLaKHoPMGHKnayK8yMxfhBm386UTs9B5+bErT2iAah7cQn62kpah2dSTH/2Lb6Wsh9/pEtaKY/PeZYLN3hQZyxrvSdyrx9N/Pgrrb/h1imBg8Nj8dObMZaW4te7F/Ltt+N9xeXWY7yvvprKlmoa6gv+kHYBED5hOpnXn2HXIFdCNh8jYvLVmO94jPKbpuCclk9CQh/C3GU8fVzQxbliMuQSFNuNnl+L6neVX3xJ49GjZJedwstVRIA0hvni6eKFMTUNeiuUDt0mz0Uefw1lb76J3y3CTh/66quYKitoOnkKmqqYoG6kdKYXiSUaaoz1xE6dhVe/8eiOppI/sZFyT/Br0qAL8KepSqYsroU+A/qQc91IOk2ZxeAew7nxjAGt3ED4uKmcPr+bhnc+ZMJ9b/L1lK/pHmpPAqmffznhnbri5ulH3k3jiah3JmrqDFwT+xL79RGuBQr1jxAw+nLaQ8THH2Ou/eMx8DHfrafxqKihEn7FbMo8vWmoSiPAM5IunftwQzfRjz2vv4sq57VcKYk+lAf3odwzixivGPRVZgwHjiBdLvrxtcveJb9+NT1qvfAMjmT0gic55fQGE6OUhdBd687BaXH4OPswIGoYXsn9aNj3K0cu/EzMjlS6PfYSzenpVDa7UVSQindINB7zJlB36BBVbh44+/hRcegovt/vo+mRhei8fQlYcheekydbfyPpnsdI37QaY1k5fnUyOo9IQr1cCXANwGPgIPJqLtK9rxIK3oq4q+Zx9uRJ8p3qmfTkx0y0bF/dczVx3nFknF1NYy8XapuqaPTU4jVuFrW+OpyPXcDz8AWw0PaE3rqIlvo6YqdcziejPsGjqYQJl9/NZebtrJwkOMcSp10H065zaEPNs7djbG5i7ogBNBmbiOwtkxu5mRE9hrJ9eCwJLkEcvD0QQ0UZN3QbyJarB9DrBntq/+hXXmfls9fSSQ6gmzYKWTaR6WvCtU8fxntrcC/Uk+tios7ciCEsgHFvfs0X6V/xa9VFQt0qGWwTKKPzD6RwQDSje43Adeh0+t/6iN1vLZ+ucKiNjXJMnv07IcltUFrYHSBJPwPBbex6RJblDZZjdgP3ybJ89NKDJEm6Gpgoy/LNlu/XIRaMJ4GDFnMUkiRFAD/JsuyYWXcJ+vbtKx896vBTHehABzrQgd+AJEnHZFlu19/8e/hdDUOW5T+7pBUAtkHM4ZZtFYC3JEkai5bRur0DHehABzrwP4i/I6z2CBBviYjSArOAjbJQbXYBrQW0rwc2tHONDnSgAx3owD+MPxtWe4UkSfnAIGCzJElbLdtDJUn6EcCiPdwObAXOA2tlWW6NRXsQuEeSpHSET+OTP9OeDnSgAx3owH8Pv+vD+F9Ehw+jAx3oQAf+7/izPox/XaZ3BzrQgQ504D9Dx4LRgQ50oAMd+EPoWDA60IEOdKADfwgdC0YHOtCBDnTgD+H/Sae3JEllQNuUsr8Nf6D8d4/65/C/3L6Otv3n+F9uX0fb/jP8L7cN2m9flCzLAW1s/0P4f3LB+E8hSdLRPxMh8N/G/3L7Otr2n+N/uX0dbfvP8L/cNvjvta/DJNWBDnSgAx34Q+hYMDrQgQ50oAN/CP+2BePDf7oBv4P/5fZ1tO0/x/9y+zra9p/hf7lt8F9q37/Kh9GBDnSgAx34z/Fv0zA60IEOdKAD/yE6FowOdKADHejAH8K/ZsGQJGmiJEmpkiSlS5L00N/0mxGSJO2SJClFkqRzkiTdZdn+pCRJBZIknbT8XWZzzlJLG1MlSZpgs/0vb78kSdmSJJ2xtOGoZZuvJEnbJUlKs/z3sWyXJEl6y/L7pyVJSra5zvWW49MkSbr+L2hXZ5u+OSlJUq0kSUv+yX6TJOlTSZJKJUk6a7PtL+srSZL6WJ5FuuVc6U+27RVJki5Yfv87SZK8LdujJUlqsunD93+vDe3d559s31/2LCVROuGQZfvXkiij8Gfa9rVNu7IlSTr5T/Sd1P788c+NO1mW/3//B6iBDCAW0AKngC5/w++GAMmWzx7ARaALotrgfW0c38XSNh0QY2mz+r/VfiAb8L9k28vAQ5bPDwEvWT5fBvwESMBA4JBluy+QafnvY/ns8xc/u2Ig6p/sN2A4kAyc/W/0FXDYcqxkOXfSn2zbeEBj+fySTduibY+75DpttqG9+/yT7fvLniWwFphl+fw+cNufadsl+18DHv8n+o72549/bNz9WzSM/kC6LMuZsiy3AF8B0//bPyrLcpEsy8ctn+sQ9UDarVtuadNXsiw3y7KcBaQj2v53tn860FpEeCVwuc32z2WBg4hqiSHABGC7LMuVsixXAdvBWqr5r8AYIEOW5d/K7P+v95ssy78AlW387p/uK8s+T1mWD8riLf7c5lr/UdtkWd4mi1o0AAcRFS3bxe+0ob37/I/b9xv4Pz1Li0Q8GvjmP2nfb7XNcu2ZwJrfusZ/q+9+Y/74x8bdv2XBCAPybL7n89sT918OSZKigd7AIcum2y1q46c2amp77fxvtV8GtkmSdEySpFss24JkWS6yfC4Ggv6htrViFvYv7P9Cv7Xir+qrMMvn/1Y7b0RIj62IkSTphCRJeyRJGmbT5vba0N59/ln8Fc/SD6i2WRz/yr4bBpTIspxms+0f6btL5o9/bNz9WxaMfxSSJLkD3wJLZFmuBZYDcUAvoAih9v4TGCrLcjIwCVgsSdJw250WqeMfi7u22KKnAessm/5X+s0B/3RftQdJkh4BjMAqy6YiIFKW5d7APcBqSZI8/+j1/sL7/J99ljaYjb2w8o/0XRvzx5++5n+Kf8uCUQBE2HwPt2z7r0OSJCfEw14ly/J6AFmWS2RZNsmybAY+Qqjbv9XO/0r7ZVkusPwvBb6ztKPEoqq2qtql/0TbLJgEHJdlucTSzv+JfrPBX9VXBdibjP6SdkqSNB+YAsyxTCxYTD0Vls/HEH6BhN9pQ3v3+R/jL3yWFQjTi6aNdv/HsFzvSuBrmzb/7X3X1vzxG9f874+7P+qA+X/5D9AgHD0xKA6zrn/D70oIu+Abl2wPsfl8N8JmC9AVe4dfJsLZ95e3H3ADPGw+70f4Hl7B3qH2suXzZOwdaodlxaGWhXCm+Vg++/5F/fcVcMP/Sr9xidPzr+wrHJ2Pl/3Jtk0EUoCAS44LANSWz7GICeI329Deff7J9v1lzxKhgdo6vRf9mbbZ9N+ef7LvaH/++MfG3V8+Sf6v/iEiCC4ipIJH/qbfHIpQF08DJy1/lwFfAGcs2zde8vI8YmljKjYRC391+y0D/pTl71zrNRE24R1AGvCzzcCSgHctv38G6GtzrRsRzsl0bCb4P9k+N4T06GWz7R/rN4RpoggwIGy9N/2VfQX0Bc5aznkHCwvDn2hbOsJu3Tru3rcce5XleZ8EjgNTf68N7d3nn2zfX/YsLWP5sOWe1wG6P9M2y/YVwMJLjv1b+472549/bNx1UIN0oAMd6EAH/hD+LT6MDnSgAx3owJ9Ex4LRgQ50oAMd+EPoWDA60IEOdKADfwgdC0YHOtCBDnTgD6FjwehABzrQgQ78IXQsGB3oQAc60IE/hI4FowMd6EAHOvCH8P8BAP2VTNLUoXcAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "sns.lineplot(data=p279WordSimSeededDF_wabs_text.sort_values(by=['bert2SentSim'])[features+['bert2SentSim']].iloc[sample_without_replacement(len(p279WordSimSeededDF_wabs_text), 500, random_state=13)])" - ] - }, - { - "cell_type": "code", - "execution_count": 397, - "id": "superb-netherlands", - "metadata": {}, - "outputs": [], - "source": [ - "temp123 = p279WordSimSeededDF_wabs_text[(~p279WordSimSeededDF_wabs_text.BERT_abstract_emb.isna()) & (~p279WordSimSeededDF_wabs_text.BERT_abstract_emb_right.isna())]" - ] - }, - { - "cell_type": "code", - "execution_count": 406, - "id": "extreme-heath", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 406, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import pyplot\n", - "fig, ax = pyplot.subplots(figsize=(20,7))\n", - "sns.lineplot(data=temp123.sort_values(by=['bert2SentSim'])[features+['bert2SentSim']].iloc[sample_without_replacement(len(temp123), 500, random_state=13)])\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "russian-broadcasting", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "superior-helicopter", - "metadata": {}, - "source": [ - "### Data Split" - ] - }, - { - "cell_type": "code", - "execution_count": 332, - "id": "specified-arena", - "metadata": {}, - "outputs": [], - "source": [ - "features = ['textEmb_7props_cosSim', 'textEmb_2props_cosSim', 'BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim']" - ] - }, - { - "cell_type": "code", - "execution_count": 392, - "id": "afraid-toolbox", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import KFold\n", - "X = p279WordSimSeededDF_wabs_text[features]\n", - "Y = p279WordSimSeededDF_wabs_text['bert2SentSim']" - ] - }, - { - "cell_type": "code", - "execution_count": 344, - "id": "exposed-publicity", - "metadata": {}, - "outputs": [], - "source": [ - "N_SPLITS = 10" - ] - }, - { - "cell_type": "code", - "execution_count": 337, - "id": "valued-blanket", - "metadata": {}, - "outputs": [], - "source": [ - "skf = KFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - "X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - "for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])" - ] - }, - { - "cell_type": "code", - "execution_count": 338, - "id": "driving-basin", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
textEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
00.8326020.823419-1.000000-1.000000
10.7426380.734428-1.000000-1.000000
20.6470310.7076110.5080600.455747
40.7655890.7803420.7526930.515319
50.9326370.941683-1.000000-1.000000
\n", - "
" - ], - "text/plain": [ - " textEmb_7props_cosSim textEmb_2props_cosSim BERT_abstract_cosSim \\\n", - "0 0.832602 0.823419 -1.000000 \n", - "1 0.742638 0.734428 -1.000000 \n", - "2 0.647031 0.707611 0.508060 \n", - "4 0.765589 0.780342 0.752693 \n", - "5 0.932637 0.941683 -1.000000 \n", - "\n", - " BERT_abstract_firstSent_cosSim \n", - "0 -1.000000 \n", - "1 -1.000000 \n", - "2 0.455747 \n", - "4 0.515319 \n", - "5 -1.000000 " - ] - }, - "execution_count": 338, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train_splits[0].head()" - ] - }, - { - "cell_type": "markdown", - "id": "surgical-defensive", - "metadata": {}, - "source": [ - "### SVM Training and Testing" - ] - }, - { - "cell_type": "code", - "execution_count": 347, - "id": "initial-guest", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVR\n", - "\n", - "from sklearn.metrics import mean_squared_error, explained_variance_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 341, - "id": "flexible-steal", - "metadata": {}, - "outputs": [], - "source": [ - "preds = []\n", - "for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVR(gamma='auto'))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))" - ] - }, - { - "cell_type": "markdown", - "id": "quarterly-season", - "metadata": {}, - "source": [ - "### Results" - ] - }, - { - "cell_type": "code", - "execution_count": 345, - "id": "expired-publication", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.016201295906940718" - ] - }, - "execution_count": 345, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "acc = 0\n", - "for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += mean_squared_error(pred, Y_test1)\n", - "acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 351, - "id": "ruled-wonder", - "metadata": {}, - "outputs": [], - "source": [ - "indNames = ['Text Embedding - 7 props', 'Text Embedding - P279 + P31', 'DBPedia short abstracts', 'DBPedia short abstracts first sentence']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "static-vector", - "metadata": {}, - "outputs": [], - "source": [ - "tempVals = []\n", - "for col in features:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVR(gamma='auto'))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += mean_squared_error(pred, Y_test1)\n", - " tempVals.append(acc/N_SPLITS)" - ] - }, - { - "cell_type": "code", - "execution_count": 353, - "id": "controlled-czech", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
MSE compared with BERT 2 label emb score
Text Embedding - 7 props1.893109
Text Embedding - P279 + P311.888821
DBPedia short abstracts1.787131
DBPedia short abstracts first sentence1.774453
\n", - "
" - ], - "text/plain": [ - " MSE compared with BERT 2 label emb score\n", - "Text Embedding - 7 props 1.893109\n", - "Text Embedding - P279 + P31 1.888821\n", - "DBPedia short abstracts 1.787131\n", - "DBPedia short abstracts first sentence 1.774453" - ] - }, - "execution_count": 353, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(pd.DataFrame(tempVals, index = indNames, columns = ['MSE compared with BERT 2 label emb score']) * 100).sort_values(by=['MSE compared with BERT 2 label emb score'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "guilty-mobile", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "center-times", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "steady-fifth", - "metadata": {}, - "source": [ - "## Siblings Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 354, - "id": "molecular-bachelor", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmbAndCosSim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 371, - "id": "dressed-jordan", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.772184\n", - "std 0.122326\n", - "min 0.120480\n", - "25% 0.684141\n", - "50% 0.793718\n", - "75% 0.874284\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 371, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text['bert2SentSim'].describe()" - ] - }, - { - "cell_type": "markdown", - "id": "american-dominant", - "metadata": {}, - "source": [ - "### Data Split" - ] - }, - { - "cell_type": "code", - "execution_count": 355, - "id": "short-seven", - "metadata": {}, - "outputs": [], - "source": [ - "features = ['textEmb_7props_cosSim', 'textEmb_2props_cosSim', 'BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim']" - ] - }, - { - "cell_type": "code", - "execution_count": 356, - "id": "automotive-marina", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import KFold\n", - "X = p279Seeded_SiblingsDF3_wabs_text[features]\n", - "Y = p279Seeded_SiblingsDF3_wabs_text['bert2SentSim']" - ] - }, - { - "cell_type": "code", - "execution_count": 357, - "id": "partial-catalyst", - "metadata": {}, - "outputs": [], - "source": [ - "N_SPLITS = 10" - ] - }, - { - "cell_type": "code", - "execution_count": 358, - "id": "popular-shelf", - "metadata": {}, - "outputs": [], - "source": [ - "skf = KFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - "X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - "for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])" - ] - }, - { - "cell_type": "code", - "execution_count": 359, - "id": "pressed-passport", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
textEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
00.5595230.559523-1.0-1.0
10.5980380.598038-1.0-1.0
20.8251170.825117-1.0-1.0
40.7676880.767688-1.0-1.0
50.6793260.679326-1.0-1.0
\n", - "
" - ], - "text/plain": [ - " textEmb_7props_cosSim textEmb_2props_cosSim BERT_abstract_cosSim \\\n", - "0 0.559523 0.559523 -1.0 \n", - "1 0.598038 0.598038 -1.0 \n", - "2 0.825117 0.825117 -1.0 \n", - "4 0.767688 0.767688 -1.0 \n", - "5 0.679326 0.679326 -1.0 \n", - "\n", - " BERT_abstract_firstSent_cosSim \n", - "0 -1.0 \n", - "1 -1.0 \n", - "2 -1.0 \n", - "4 -1.0 \n", - "5 -1.0 " - ] - }, - "execution_count": 359, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train_splits[0].head()" - ] - }, - { - "cell_type": "markdown", - "id": "above-relevance", - "metadata": {}, - "source": [ - "### SVM Training and Testing" - ] - }, - { - "cell_type": "code", - "execution_count": 360, - "id": "greek-occasion", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVR\n", - "\n", - "from sklearn.metrics import mean_squared_error, explained_variance_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 361, - "id": "vertical-sweden", - "metadata": {}, - "outputs": [], - "source": [ - "preds = []\n", - "for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVR(gamma='auto'))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))" - ] - }, - { - "cell_type": "markdown", - "id": "present-secretariat", - "metadata": {}, - "source": [ - "### Results" - ] - }, - { - "cell_type": "code", - "execution_count": 362, - "id": "hundred-authentication", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.012189405746669981" - ] - }, - "execution_count": 362, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "acc = 0\n", - "for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += mean_squared_error(pred, Y_test1)\n", - "acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 363, - "id": "posted-chamber", - "metadata": {}, - "outputs": [], - "source": [ - "indNames = ['Text Embedding - 7 props', 'Text Embedding - P279 + P31', 'DBPedia short abstracts', 'DBPedia short abstracts first sentence']" - ] - }, - { - "cell_type": "code", - "execution_count": 364, - "id": "processed-costs", - "metadata": {}, - "outputs": [], - "source": [ - "tempVals = []\n", - "for col in features:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVR(gamma='auto'))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += mean_squared_error(pred, Y_test1)\n", - " tempVals.append(acc/N_SPLITS)" - ] - }, - { - "cell_type": "code", - "execution_count": 365, - "id": "african-greek", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
MSE compared with BERT 2 label emb score
DBPedia short abstracts first sentence1.449413
DBPedia short abstracts1.440694
Text Embedding - P279 + P311.283479
Text Embedding - 7 props1.268741
\n", - "
" - ], - "text/plain": [ - " MSE compared with BERT 2 label emb score\n", - "DBPedia short abstracts first sentence 1.449413\n", - "DBPedia short abstracts 1.440694\n", - "Text Embedding - P279 + P31 1.283479\n", - "Text Embedding - 7 props 1.268741" - ] - }, - "execution_count": 365, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(pd.DataFrame(tempVals, index = indNames, columns = ['MSE compared with BERT 2 label emb score']) * 100).sort_values(by=['MSE compared with BERT 2 label emb score'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "exact-navigation", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "399px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/P279-Dataset Generation.ipynb b/P279-Dataset Generation.ipynb deleted file mode 100644 index 687f0a3..0000000 --- a/P279-Dataset Generation.ipynb +++ /dev/null @@ -1,9377 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "large-steering", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "threatened-pacific", - "metadata": {}, - "source": [ - "# Extract P279s from the wikidataos file" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "associate-mixture", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk filter -i ../data/wikidataos.for.text-embedding.tsv.gz -p \";P279;\" -o ../data/P279_dataset/wikidata-P279.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "silent-liver", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "damaged-driving", - "metadata": {}, - "outputs": [], - "source": [ - "p279DF = pd.read_csv('../data/P279_dataset/wikidata-P279.tsv',sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "pleasant-wheel", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "721983" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p279DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "alpine-induction", - "metadata": {}, - "outputs": [], - "source": [ - "p279DFNew = p279DF\n", - "# p279DFNew = p279DF[:1000]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "liable-australian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2ranknode2;wikidatatype
0Q100000030-P279-Q14748-30394205-0Q100000030P279Q14748normalwikibase-item
1Q100000058-P279-Q1622444-bd182663-0Q100000058P279Q1622444normalwikibase-item
2Q1000032-P279-Q1813494-0aa0f1dc-0Q1000032P279Q1813494normalwikibase-item
3Q1000032-P279-Q83602-482a1943-0Q1000032P279Q83602normalwikibase-item
4Q1000039-P279-Q11555767-2dddfd86-0Q1000039P279Q11555767normalwikibase-item
.....................
721978Q999981-P279-Q2990593-dbee3bf9-0Q999981P279Q2990593normalwikibase-item
721979Q99998337-P279-Q203920-0c6fcf31-0Q99998337P279Q203920normalwikibase-item
721980Q99998385-P279-Q203920-7ed228b8-0Q99998385P279Q203920normalwikibase-item
721981Q99998517-P279-Q4918149-39e16ef0-0Q99998517P279Q4918149normalwikibase-item
721982Q99999421-P279-Q622679-e690cdab-0Q99999421P279Q622679normalwikibase-item
\n", - "

721983 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " id node1 label node2 \\\n", - "0 Q100000030-P279-Q14748-30394205-0 Q100000030 P279 Q14748 \n", - "1 Q100000058-P279-Q1622444-bd182663-0 Q100000058 P279 Q1622444 \n", - "2 Q1000032-P279-Q1813494-0aa0f1dc-0 Q1000032 P279 Q1813494 \n", - "3 Q1000032-P279-Q83602-482a1943-0 Q1000032 P279 Q83602 \n", - "4 Q1000039-P279-Q11555767-2dddfd86-0 Q1000039 P279 Q11555767 \n", - "... ... ... ... ... \n", - "721978 Q999981-P279-Q2990593-dbee3bf9-0 Q999981 P279 Q2990593 \n", - "721979 Q99998337-P279-Q203920-0c6fcf31-0 Q99998337 P279 Q203920 \n", - "721980 Q99998385-P279-Q203920-7ed228b8-0 Q99998385 P279 Q203920 \n", - "721981 Q99998517-P279-Q4918149-39e16ef0-0 Q99998517 P279 Q4918149 \n", - "721982 Q99999421-P279-Q622679-e690cdab-0 Q99999421 P279 Q622679 \n", - "\n", - " rank node2;wikidatatype \n", - "0 normal wikibase-item \n", - "1 normal wikibase-item \n", - "2 normal wikibase-item \n", - "3 normal wikibase-item \n", - "4 normal wikibase-item \n", - "... ... ... \n", - "721978 normal wikibase-item \n", - "721979 normal wikibase-item \n", - "721980 normal wikibase-item \n", - "721981 normal wikibase-item \n", - "721982 normal wikibase-item \n", - "\n", - "[721983 rows x 6 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279DFNew" - ] - }, - { - "cell_type": "markdown", - "id": "convinced-chicago", - "metadata": {}, - "source": [ - "## Join with labels" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "prompt-attendance", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "finite-shape", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = p279DFNew.set_index('node1').join(labelsDF.set_index('node1'), rsuffix='_label')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "fitted-france", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idlabelnode2ranknode2;wikidatatypeid_labellabel_labelnode2_label
node1
Q100000030Q100000030-P279-Q14748-30394205-0P279Q14748normalwikibase-itemNaNNaNNaN
Q100000058Q100000058-P279-Q1622444-bd182663-0P279Q1622444normalwikibase-itemQ100000058-label-enlabel'tsunami stone'@en
Q1000032Q1000032-P279-Q1813494-0aa0f1dc-0P279Q1813494normalwikibase-itemQ1000032-label-enlabel'unschooling'@en
Q1000032Q1000032-P279-Q83602-482a1943-0P279Q83602normalwikibase-itemQ1000032-label-enlabel'unschooling'@en
Q1000039Q1000039-P279-Q11555767-2dddfd86-0P279Q11555767normalwikibase-itemQ1000039-label-enlabel'Akita ranga'@en
\n", - "
" - ], - "text/plain": [ - " id label node2 rank \\\n", - "node1 \n", - "Q100000030 Q100000030-P279-Q14748-30394205-0 P279 Q14748 normal \n", - "Q100000058 Q100000058-P279-Q1622444-bd182663-0 P279 Q1622444 normal \n", - "Q1000032 Q1000032-P279-Q1813494-0aa0f1dc-0 P279 Q1813494 normal \n", - "Q1000032 Q1000032-P279-Q83602-482a1943-0 P279 Q83602 normal \n", - "Q1000039 Q1000039-P279-Q11555767-2dddfd86-0 P279 Q11555767 normal \n", - "\n", - " node2;wikidatatype id_label label_label \\\n", - "node1 \n", - "Q100000030 wikibase-item NaN NaN \n", - "Q100000058 wikibase-item Q100000058-label-en label \n", - "Q1000032 wikibase-item Q1000032-label-en label \n", - "Q1000032 wikibase-item Q1000032-label-en label \n", - "Q1000039 wikibase-item Q1000039-label-en label \n", - "\n", - " node2_label \n", - "node1 \n", - "Q100000030 NaN \n", - "Q100000058 'tsunami stone'@en \n", - "Q1000032 'unschooling'@en \n", - "Q1000032 'unschooling'@en \n", - "Q1000039 'Akita ranga'@en " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "imposed-request", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = temp1[['id','label','node2','node2_label']]" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "valuable-canal", - "metadata": {}, - "outputs": [], - "source": [ - "temp2 = temp1.reset_index().set_index('node2').join(labelsDF.set_index('node1'), rsuffix='_label2')" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "thermal-citation", - "metadata": {}, - "outputs": [], - "source": [ - "temp3 = temp2[['id','node1','label','node2', 'node2_label']].rename(columns={'node2_label': 'node1_label', 'node2':'node2_label'}).reset_index().rename(columns={'index':'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "competitive-symposium", - "metadata": {}, - "outputs": [], - "source": [ - "temp3 = temp3[['id','node1','node1_label','label','node2','node2_label']]" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "surface-concept", - "metadata": {}, - "outputs": [], - "source": [ - "temp3 = temp3[~temp3['node1_label'].isna()]\n", - "temp3 = temp3[~temp3['node2_label'].isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "muslim-creator", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3['node2_label'].isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "organizational-disaster", - "metadata": {}, - "outputs": [], - "source": [ - "temp3['node1_label'] = temp3['node1_label'].apply(lambda p: p[1:-4])" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "medium-thunder", - "metadata": {}, - "outputs": [], - "source": [ - "temp3['node2_label'] = temp3['node2_label'].apply(lambda p: p[1:-4])" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "disturbed-adaptation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1node1_labellabelnode2node2_label
1Q17372279-P279-Q100026-beba8cd1-0Q17372279YF-16P279Q100026F-16 Fighting Falcon
2Q17372377-P279-Q100026-fd42bd71-0Q17372377F-16A/B Fighting FalconP279Q100026F-16 Fighting Falcon
3Q17372444-P279-Q100026-ca0fc4bd-0Q17372444F-16C/D Fighting FalconP279Q100026F-16 Fighting Falcon
4Q17372455-P279-Q100026-c2b1bf36-0Q17372455F-16E/F Desert FalconP279Q100026F-16 Fighting Falcon
5Q2029940-P279-Q100026-ceba4380-0Q2029940F-16 VISTAP279Q100026F-16 Fighting Falcon
.....................
721978Q2259388-P279-Q999897-01a551b4-0Q2259388ErgonP279Q999897middle management
721979Q1294114-P279-Q999981-55b2910f-0Q1294114skin careP279Q999981personal grooming
721980Q48996240-P279-Q999981-d9e5c4dd-0Q48996240preening in birdsP279Q999981personal grooming
721981Q56400028-P279-Q999981-7b184d82-0Q56400028haircutP279Q999981personal grooming
721982Q4918149-P279-Q99998517-04f0b672-0Q4918149BishtP279Q99998517Ahsa\\'i Bisht
\n", - "

620830 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " id node1 \\\n", - "1 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 \n", - "2 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 \n", - "3 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 \n", - "4 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 \n", - "5 Q2029940-P279-Q100026-ceba4380-0 Q2029940 \n", - "... ... ... \n", - "721978 Q2259388-P279-Q999897-01a551b4-0 Q2259388 \n", - "721979 Q1294114-P279-Q999981-55b2910f-0 Q1294114 \n", - "721980 Q48996240-P279-Q999981-d9e5c4dd-0 Q48996240 \n", - "721981 Q56400028-P279-Q999981-7b184d82-0 Q56400028 \n", - "721982 Q4918149-P279-Q99998517-04f0b672-0 Q4918149 \n", - "\n", - " node1_label label node2 node2_label \n", - "1 YF-16 P279 Q100026 F-16 Fighting Falcon \n", - "2 F-16A/B Fighting Falcon P279 Q100026 F-16 Fighting Falcon \n", - "3 F-16C/D Fighting Falcon P279 Q100026 F-16 Fighting Falcon \n", - "4 F-16E/F Desert Falcon P279 Q100026 F-16 Fighting Falcon \n", - "5 F-16 VISTA P279 Q100026 F-16 Fighting Falcon \n", - "... ... ... ... ... \n", - "721978 Ergon P279 Q999897 middle management \n", - "721979 skin care P279 Q999981 personal grooming \n", - "721980 preening in birds P279 Q999981 personal grooming \n", - "721981 haircut P279 Q999981 personal grooming \n", - "721982 Bisht P279 Q99998517 Ahsa\\'i Bisht \n", - "\n", - "[620830 rows x 6 columns]" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3" - ] - }, - { - "cell_type": "markdown", - "id": "color-breathing", - "metadata": {}, - "source": [ - "## Create child-parent sentences" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "minus-biology", - "metadata": {}, - "outputs": [], - "source": [ - "temp3['sent'] = temp3.apply(lambda p: p['node1_label'] + ' is ' + p['node2_label'], axis=1)" - ] - }, - { - "cell_type": "markdown", - "id": "homeless-combination", - "metadata": {}, - "source": [ - "## Form pairs" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "authorized-eleven", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = temp3.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "determined-option", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF.to_csv('../data/P279_dataset/hierDF.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "latin-mills", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1node1_labellabelnode2node2_labelsent
0Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279Q100052008anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinae
1Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279Q100052008anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae
2Q100119502-P279-Q100052008-d2c330a4-0Q100119502nthropomorphic tP279Q100052008anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinae
3Q100052791-P279-Q100052938-71a0f2ca-0Q100052791nthropomorphic jaP279Q100052938fictional jaguarnthropomorphic ja is fictional jaguar
4Q100004761-P279-Q100095237-3971e1cd-0Q100004761helf lP279Q100095237shop shelvehelf l is shop shelve
........................
992Q100165468-P279-Q99839432-a6842485-0Q100165468nthropomorphic axoP279Q99839432fictional axolotlnthropomorphic axo is fictional axolotl
993Q100269055-P279-Q99913543-6a466631-0Q100269055oeP279Q99913543toe capoe is toe cap
994Q100145976-P279-Q99948390-4f0644a4-0Q100145976penP279Q99948390toepen is toe
995Q100145990-P279-Q99948390-fe46cfdd-0Q100145990eepP279Q99948390toeeep is toe
996Q100148318-P279-Q99971015-9011d906-0Q100148318nthropomorphicP279Q99971015anthropomorphic cow or other cattlenthropomorphic is anthropomorphic cow or othe...
\n", - "

879 rows × 7 columns

\n", - "
" - ], - "text/plain": [ - " id node1 node1_label \\\n", - "0 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 nthropomorphic pan \n", - "1 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 nthropomorphic ja \n", - "2 Q100119502-P279-Q100052008-d2c330a4-0 Q100119502 nthropomorphic t \n", - "3 Q100052791-P279-Q100052938-71a0f2ca-0 Q100052791 nthropomorphic ja \n", - "4 Q100004761-P279-Q100095237-3971e1cd-0 Q100004761 helf l \n", - ".. ... ... ... \n", - "992 Q100165468-P279-Q99839432-a6842485-0 Q100165468 nthropomorphic axo \n", - "993 Q100269055-P279-Q99913543-6a466631-0 Q100269055 oe \n", - "994 Q100145976-P279-Q99948390-4f0644a4-0 Q100145976 pen \n", - "995 Q100145990-P279-Q99948390-fe46cfdd-0 Q100145990 eep \n", - "996 Q100148318-P279-Q99971015-9011d906-0 Q100148318 nthropomorphic \n", - "\n", - " label node2 node2_label \\\n", - "0 P279 Q100052008 anthropomorphic Pantherinae \n", - "1 P279 Q100052008 anthropomorphic Pantherinae \n", - "2 P279 Q100052008 anthropomorphic Pantherinae \n", - "3 P279 Q100052938 fictional jaguar \n", - "4 P279 Q100095237 shop shelve \n", - ".. ... ... ... \n", - "992 P279 Q99839432 fictional axolotl \n", - "993 P279 Q99913543 toe cap \n", - "994 P279 Q99948390 toe \n", - "995 P279 Q99948390 toe \n", - "996 P279 Q99971015 anthropomorphic cow or other cattle \n", - "\n", - " sent \n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae \n", - "2 nthropomorphic t is anthropomorphic Pantherinae \n", - "3 nthropomorphic ja is fictional jaguar \n", - "4 helf l is shop shelve \n", - ".. ... \n", - "992 nthropomorphic axo is fictional axolotl \n", - "993 oe is toe cap \n", - "994 pen is toe \n", - "995 eep is toe \n", - "996 nthropomorphic is anthropomorphic cow or othe... \n", - "\n", - "[879 rows x 7 columns]" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "specific-atlantic", - "metadata": {}, - "outputs": [], - "source": [ - "pairLeftDF = temp3.copy()\n", - "pairRightDF = temp3.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "upper-majority", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF = pairLeftDF.set_index('node2').join(pairRightDF.set_index('node2'),rsuffix='_right').reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "owned-liberal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelsentid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightsent_right
0Q100052008Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic PantherinaeQ100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinae
1Q100052008Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic PantherinaeQ100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae
2Q100052008Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic PantherinaeQ100119502-P279-Q100052008-d2c330a4-0Q100119502nthropomorphic tP279anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinae
3Q100052008Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic PantherinaeQ100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinae
4Q100052008Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic PantherinaeQ100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae
\n", - "
" - ], - "text/plain": [ - " node2 id node1 \\\n", - "0 Q100052008 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "1 Q100052008 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "2 Q100052008 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "3 Q100052008 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 \n", - "4 Q100052008 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 \n", - "\n", - " node1_label label node2_label \\\n", - "0 nthropomorphic pan P279 anthropomorphic Pantherinae \n", - "1 nthropomorphic pan P279 anthropomorphic Pantherinae \n", - "2 nthropomorphic pan P279 anthropomorphic Pantherinae \n", - "3 nthropomorphic ja P279 anthropomorphic Pantherinae \n", - "4 nthropomorphic ja P279 anthropomorphic Pantherinae \n", - "\n", - " sent \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic pan is anthropomorphic Pantherinae \n", - "2 nthropomorphic pan is anthropomorphic Pantherinae \n", - "3 nthropomorphic ja is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae \n", - "\n", - " id_right node1_right node1_label_right \\\n", - "0 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 nthropomorphic pan \n", - "1 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 nthropomorphic ja \n", - "2 Q100119502-P279-Q100052008-d2c330a4-0 Q100119502 nthropomorphic t \n", - "3 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 nthropomorphic pan \n", - "4 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 nthropomorphic ja \n", - "\n", - " label_right node2_label_right \\\n", - "0 P279 anthropomorphic Pantherinae \n", - "1 P279 anthropomorphic Pantherinae \n", - "2 P279 anthropomorphic Pantherinae \n", - "3 P279 anthropomorphic Pantherinae \n", - "4 P279 anthropomorphic Pantherinae \n", - "\n", - " sent_right \n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae \n", - "2 nthropomorphic t is anthropomorphic Pantherinae \n", - "3 nthropomorphic pan is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae " - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "coral-haven", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF['set_nodes'] = pairsDF.apply(lambda p: str(sorted([p.node1, p.node1_right]) + [p.node2]), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "descending-industry", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF1 = pairsDF[~pairsDF['set_nodes'].duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "spectacular-treasurer", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5979 statements get reduced to 3429 statements after checking for duplicate pairs\n" - ] - } - ], - "source": [ - "print(f\"{len(pairsDF)} statements get reduced to {len(pairsDF1)} statements after checking for duplicate pairs\")" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "several-microphone", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelsentid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightsent_rightset_nodes
0Q100052008Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic PantherinaeQ100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinae['Q100052562', 'Q100052562', 'Q100052008']
1Q100052008Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic PantherinaeQ100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae['Q100052562', 'Q100052791', 'Q100052008']
2Q100052008Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic PantherinaeQ100119502-P279-Q100052008-d2c330a4-0Q100119502nthropomorphic tP279anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinae['Q100052562', 'Q100119502', 'Q100052008']
4Q100052008Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic PantherinaeQ100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae['Q100052791', 'Q100052791', 'Q100052008']
5Q100052008Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic PantherinaeQ100119502-P279-Q100052008-d2c330a4-0Q100119502nthropomorphic tP279anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinae['Q100052791', 'Q100119502', 'Q100052008']
\n", - "
" - ], - "text/plain": [ - " node2 id node1 \\\n", - "0 Q100052008 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "1 Q100052008 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "2 Q100052008 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "4 Q100052008 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 \n", - "5 Q100052008 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 \n", - "\n", - " node1_label label node2_label \\\n", - "0 nthropomorphic pan P279 anthropomorphic Pantherinae \n", - "1 nthropomorphic pan P279 anthropomorphic Pantherinae \n", - "2 nthropomorphic pan P279 anthropomorphic Pantherinae \n", - "4 nthropomorphic ja P279 anthropomorphic Pantherinae \n", - "5 nthropomorphic ja P279 anthropomorphic Pantherinae \n", - "\n", - " sent \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic pan is anthropomorphic Pantherinae \n", - "2 nthropomorphic pan is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae \n", - "5 nthropomorphic ja is anthropomorphic Pantherinae \n", - "\n", - " id_right node1_right node1_label_right \\\n", - "0 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 nthropomorphic pan \n", - "1 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 nthropomorphic ja \n", - "2 Q100119502-P279-Q100052008-d2c330a4-0 Q100119502 nthropomorphic t \n", - "4 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 nthropomorphic ja \n", - "5 Q100119502-P279-Q100052008-d2c330a4-0 Q100119502 nthropomorphic t \n", - "\n", - " label_right node2_label_right \\\n", - "0 P279 anthropomorphic Pantherinae \n", - "1 P279 anthropomorphic Pantherinae \n", - "2 P279 anthropomorphic Pantherinae \n", - "4 P279 anthropomorphic Pantherinae \n", - "5 P279 anthropomorphic Pantherinae \n", - "\n", - " sent_right \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae \n", - "2 nthropomorphic t is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae \n", - "5 nthropomorphic t is anthropomorphic Pantherinae \n", - "\n", - " set_nodes \n", - "0 ['Q100052562', 'Q100052562', 'Q100052008'] \n", - "1 ['Q100052562', 'Q100052791', 'Q100052008'] \n", - "2 ['Q100052562', 'Q100119502', 'Q100052008'] \n", - "4 ['Q100052791', 'Q100052791', 'Q100052008'] \n", - "5 ['Q100052791', 'Q100119502', 'Q100052008'] " - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "hollywood-transmission", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " pairsDF1['comb_sent'] = pairsDF1.apply(lambda p: p.node2_label + ' such as ' + p.node1_label + ' and ' + p.node1_label_right, axis=1)\n" - ] - } - ], - "source": [ - "pairsDF1['comb_sent'] = pairsDF1.apply(lambda p: p.node2_label + ' such as ' + p.node1_label + ' and ' + p.node1_label_right, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "leading-official", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelsentid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightsent_rightset_nodescomb_sent
0Q100052008Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic PantherinaeQ100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinae['Q100052562', 'Q100052562', 'Q100052008']anthropomorphic Pantherinae such as nthropomor...
1Q100052008Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic PantherinaeQ100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae['Q100052562', 'Q100052791', 'Q100052008']anthropomorphic Pantherinae such as nthropomor...
2Q100052008Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic PantherinaeQ100119502-P279-Q100052008-d2c330a4-0Q100119502nthropomorphic tP279anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinae['Q100052562', 'Q100119502', 'Q100052008']anthropomorphic Pantherinae such as nthropomor...
4Q100052008Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic PantherinaeQ100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae['Q100052791', 'Q100052791', 'Q100052008']anthropomorphic Pantherinae such as nthropomor...
5Q100052008Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic PantherinaeQ100119502-P279-Q100052008-d2c330a4-0Q100119502nthropomorphic tP279anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinae['Q100052791', 'Q100119502', 'Q100052008']anthropomorphic Pantherinae such as nthropomor...
\n", - "
" - ], - "text/plain": [ - " node2 id node1 \\\n", - "0 Q100052008 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "1 Q100052008 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "2 Q100052008 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "4 Q100052008 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 \n", - "5 Q100052008 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 \n", - "\n", - " node1_label label node2_label \\\n", - "0 nthropomorphic pan P279 anthropomorphic Pantherinae \n", - "1 nthropomorphic pan P279 anthropomorphic Pantherinae \n", - "2 nthropomorphic pan P279 anthropomorphic Pantherinae \n", - "4 nthropomorphic ja P279 anthropomorphic Pantherinae \n", - "5 nthropomorphic ja P279 anthropomorphic Pantherinae \n", - "\n", - " sent \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic pan is anthropomorphic Pantherinae \n", - "2 nthropomorphic pan is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae \n", - "5 nthropomorphic ja is anthropomorphic Pantherinae \n", - "\n", - " id_right node1_right node1_label_right \\\n", - "0 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 nthropomorphic pan \n", - "1 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 nthropomorphic ja \n", - "2 Q100119502-P279-Q100052008-d2c330a4-0 Q100119502 nthropomorphic t \n", - "4 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 nthropomorphic ja \n", - "5 Q100119502-P279-Q100052008-d2c330a4-0 Q100119502 nthropomorphic t \n", - "\n", - " label_right node2_label_right \\\n", - "0 P279 anthropomorphic Pantherinae \n", - "1 P279 anthropomorphic Pantherinae \n", - "2 P279 anthropomorphic Pantherinae \n", - "4 P279 anthropomorphic Pantherinae \n", - "5 P279 anthropomorphic Pantherinae \n", - "\n", - " sent_right \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae \n", - "2 nthropomorphic t is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae \n", - "5 nthropomorphic t is anthropomorphic Pantherinae \n", - "\n", - " set_nodes \\\n", - "0 ['Q100052562', 'Q100052562', 'Q100052008'] \n", - "1 ['Q100052562', 'Q100052791', 'Q100052008'] \n", - "2 ['Q100052562', 'Q100119502', 'Q100052008'] \n", - "4 ['Q100052791', 'Q100052791', 'Q100052008'] \n", - "5 ['Q100052791', 'Q100119502', 'Q100052008'] \n", - "\n", - " comb_sent \n", - "0 anthropomorphic Pantherinae such as nthropomor... \n", - "1 anthropomorphic Pantherinae such as nthropomor... \n", - "2 anthropomorphic Pantherinae such as nthropomor... \n", - "4 anthropomorphic Pantherinae such as nthropomor... \n", - "5 anthropomorphic Pantherinae such as nthropomor... " - ] - }, - "execution_count": 99, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "stretch-jordan", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF2 = pairsDF1[['node1', 'node2', 'node1_right', 'node1_label', 'node2_label', 'node1_label_right', 'sent', 'sent_right', 'comb_sent']]" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "southwest-police", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF3 = pairsDF2.rename(columns={'node1_right': 'node2', 'node2': 'parent', 'node1_label_right': 'node2_label', 'node2_label': 'par_label', 'sent': 'node1_sent', 'sent_right': 'node2_sent'})" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "id": "extra-navigator", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1parentnode2node1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sent
0Q100052562Q100052008Q100052562nthropomorphic pananthropomorphic Pantherinaenthropomorphic pannthropomorphic pan is anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
1Q100052562Q100052008Q100052791nthropomorphic pananthropomorphic Pantherinaenthropomorphic janthropomorphic pan is anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
2Q100052562Q100052008Q100119502nthropomorphic pananthropomorphic Pantherinaenthropomorphic tnthropomorphic pan is anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
4Q100052791Q100052008Q100052791nthropomorphic jaanthropomorphic Pantherinaenthropomorphic janthropomorphic ja is anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
5Q100052791Q100052008Q100119502nthropomorphic jaanthropomorphic Pantherinaenthropomorphic tnthropomorphic ja is anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
\n", - "
" - ], - "text/plain": [ - " node1 parent node2 node1_label \\\n", - "0 Q100052562 Q100052008 Q100052562 nthropomorphic pan \n", - "1 Q100052562 Q100052008 Q100052791 nthropomorphic pan \n", - "2 Q100052562 Q100052008 Q100119502 nthropomorphic pan \n", - "4 Q100052791 Q100052008 Q100052791 nthropomorphic ja \n", - "5 Q100052791 Q100052008 Q100119502 nthropomorphic ja \n", - "\n", - " par_label node2_label \\\n", - "0 anthropomorphic Pantherinae nthropomorphic pan \n", - "1 anthropomorphic Pantherinae nthropomorphic ja \n", - "2 anthropomorphic Pantherinae nthropomorphic t \n", - "4 anthropomorphic Pantherinae nthropomorphic ja \n", - "5 anthropomorphic Pantherinae nthropomorphic t \n", - "\n", - " node1_sent \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic pan is anthropomorphic Pantherinae \n", - "2 nthropomorphic pan is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae \n", - "5 nthropomorphic ja is anthropomorphic Pantherinae \n", - "\n", - " node2_sent \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae \n", - "2 nthropomorphic t is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae \n", - "5 nthropomorphic t is anthropomorphic Pantherinae \n", - "\n", - " comb_sent \n", - "0 anthropomorphic Pantherinae such as nthropomor... \n", - "1 anthropomorphic Pantherinae such as nthropomor... \n", - "2 anthropomorphic Pantherinae such as nthropomor... \n", - "4 anthropomorphic Pantherinae such as nthropomor... \n", - "5 anthropomorphic Pantherinae such as nthropomor... " - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "quick-culture", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF.to_csv(\"../data/P279_dataset/pairsDF.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "independent-latin", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF3.to_csv(\"../data/P279_dataset/pairsDF3.csv\", index=False)" - ] - }, - { - "cell_type": "markdown", - "id": "mounted-meter", - "metadata": {}, - "source": [ - "# Similarity Scores Construction" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "classical-power", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "basic-tolerance", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "markdown", - "id": "efficient-albania", - "metadata": {}, - "source": [ - "## BERT Child Parent Embeddings - Labels based" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "severe-tulsa", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF = pd.read_csv('../data/P279_dataset/hierDF.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "daily-shaft", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF1 = hierDF[~hierDF.node1_label.isna()].reset_index().drop(columns=['index'])" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "surgical-ebony", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 0)" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF1.node1_label.isna().sum(), hierDF1.node2_label.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "reported-moore", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.47850561141967773 s\n", - "0.40022730827331543 s\n" - ] - } - ], - "source": [ - "hierDF1['node1_emb'] = pd.Series(list(getSentEmbeddings(hierDF1.node1_label, 'bert-base-nli-mean-tokens')))\n", - "hierDF1['node2_emb'] = pd.Series(list(getSentEmbeddings(hierDF1.node2_label, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "enabling-stephen", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF1['bertChildParSim'] = hierDF1.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "essential-munich", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0idnode1node1_labellabelnode2node2_labelsentgptChildParPpl
00Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279Q100052008anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinae2.172506
11Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279Q100052008anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae2.318752
22Q100119502-P279-Q100052008-d2c330a4-0Q100119502nthropomorphic tP279Q100052008anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinae2.184794
33Q100052791-P279-Q100052938-71a0f2ca-0Q100052791nthropomorphic jaP279Q100052938fictional jaguarnthropomorphic ja is fictional jaguar2.516336
44Q100004761-P279-Q100095237-3971e1cd-0Q100004761helf lP279Q100095237shop shelvehelf l is shop shelve3.221734
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 id node1 \\\n", - "0 0 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "1 1 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 \n", - "2 2 Q100119502-P279-Q100052008-d2c330a4-0 Q100119502 \n", - "3 3 Q100052791-P279-Q100052938-71a0f2ca-0 Q100052791 \n", - "4 4 Q100004761-P279-Q100095237-3971e1cd-0 Q100004761 \n", - "\n", - " node1_label label node2 node2_label \\\n", - "0 nthropomorphic pan P279 Q100052008 anthropomorphic Pantherinae \n", - "1 nthropomorphic ja P279 Q100052008 anthropomorphic Pantherinae \n", - "2 nthropomorphic t P279 Q100052008 anthropomorphic Pantherinae \n", - "3 nthropomorphic ja P279 Q100052938 fictional jaguar \n", - "4 helf l P279 Q100095237 shop shelve \n", - "\n", - " sent gptChildParPpl \n", - "0 nthropomorphic pan is anthropomorphic Pantherinae 2.172506 \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae 2.318752 \n", - "2 nthropomorphic t is anthropomorphic Pantherinae 2.184794 \n", - "3 nthropomorphic ja is fictional jaguar 2.516336 \n", - "4 helf l is shop shelve 3.221734 " - ] - }, - "execution_count": 135, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "id": "sacred-democracy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "839" - ] - }, - "execution_count": 113, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(hierDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "id": "surface-vermont", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 839.000000\n", - "mean 0.586407\n", - "std 0.147204\n", - "min 0.060429\n", - "25% 0.496083\n", - "50% 0.607622\n", - "75% 0.688008\n", - "max 0.952739\n", - "Name: bertChildParSim, dtype: float64" - ] - }, - "execution_count": 114, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF1['bertChildParSim'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "id": "assumed-australian", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF1.to_csv('../data/P279_dataset/hierDF1_simScores.csv')" - ] - }, - { - "cell_type": "markdown", - "id": "through-watch", - "metadata": {}, - "source": [ - "## BERT 2 Sent Embeddings (Siblings)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "sharing-russell", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF3 = pd.read_csv(\"../data/P279_dataset/pairsDF3.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "considered-producer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1parentnode2node1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sent
0Q100052562Q100052008Q100052562nthropomorphic pananthropomorphic Pantherinaenthropomorphic pannthropomorphic pan is anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
1Q100052562Q100052008Q100052791nthropomorphic pananthropomorphic Pantherinaenthropomorphic janthropomorphic pan is anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
2Q100052562Q100052008Q100119502nthropomorphic pananthropomorphic Pantherinaenthropomorphic tnthropomorphic pan is anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
3Q100052791Q100052008Q100052791nthropomorphic jaanthropomorphic Pantherinaenthropomorphic janthropomorphic ja is anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
4Q100052791Q100052008Q100119502nthropomorphic jaanthropomorphic Pantherinaenthropomorphic tnthropomorphic ja is anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...
\n", - "
" - ], - "text/plain": [ - " node1 parent node2 node1_label \\\n", - "0 Q100052562 Q100052008 Q100052562 nthropomorphic pan \n", - "1 Q100052562 Q100052008 Q100052791 nthropomorphic pan \n", - "2 Q100052562 Q100052008 Q100119502 nthropomorphic pan \n", - "3 Q100052791 Q100052008 Q100052791 nthropomorphic ja \n", - "4 Q100052791 Q100052008 Q100119502 nthropomorphic ja \n", - "\n", - " par_label node2_label \\\n", - "0 anthropomorphic Pantherinae nthropomorphic pan \n", - "1 anthropomorphic Pantherinae nthropomorphic ja \n", - "2 anthropomorphic Pantherinae nthropomorphic t \n", - "3 anthropomorphic Pantherinae nthropomorphic ja \n", - "4 anthropomorphic Pantherinae nthropomorphic t \n", - "\n", - " node1_sent \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic pan is anthropomorphic Pantherinae \n", - "2 nthropomorphic pan is anthropomorphic Pantherinae \n", - "3 nthropomorphic ja is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae \n", - "\n", - " node2_sent \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae \n", - "2 nthropomorphic t is anthropomorphic Pantherinae \n", - "3 nthropomorphic ja is anthropomorphic Pantherinae \n", - "4 nthropomorphic t is anthropomorphic Pantherinae \n", - "\n", - " comb_sent \n", - "0 anthropomorphic Pantherinae such as nthropomor... \n", - "1 anthropomorphic Pantherinae such as nthropomor... \n", - "2 anthropomorphic Pantherinae such as nthropomor... \n", - "3 anthropomorphic Pantherinae such as nthropomor... \n", - "4 anthropomorphic Pantherinae such as nthropomor... " - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 118, - "id": "laden-houston", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.6303539276123047 s\n", - "1.4965293407440186 s\n" - ] - } - ], - "source": [ - "pairsDF3['node1_emb'] = pd.Series(list(getSentEmbeddings(pairsDF3.node1_sent, 'bert-base-nli-mean-tokens')))\n", - "pairsDF3['node2_emb'] = pd.Series(list(getSentEmbeddings(pairsDF3.node2_sent, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "id": "major-summit", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF3['bert2SentSim'] = pairsDF3.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "id": "informed-queensland", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF3.to_csv(\"../data/P279_dataset/pairsDF3_simScores.csv\", index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "published-smile", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.9541891813278198, 0.9541892)" - ] - }, - "execution_count": 121, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF3.iloc[86]['bert2SentSim'], cosine_similarity(pairsDF3.iloc[86].node1_emb.reshape(1,-1), pairsDF3.iloc[86].node2_emb.reshape(1,-1))[0][0]" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "stylish-grammar", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3429" - ] - }, - "execution_count": 136, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(pairsDF3)" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "strong-appointment", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 3429.000000\n", - "mean 0.944740\n", - "std 0.063054\n", - "min 0.384220\n", - "25% 0.912423\n", - "50% 0.964450\n", - "75% 1.000000\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 122, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF3.bert2SentSim.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "charming-reverse", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "sustained-sally", - "metadata": {}, - "source": [ - "## GPT2 Child Parent perplexity computation" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "marked-hometown", - "metadata": {}, - "outputs": [], - "source": [ - "from transformers import GPT2LMHeadModel, GPT2Tokenizer" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "genuine-missile", - "metadata": {}, - "outputs": [], - "source": [ - "# build gpt model\n", - "model = GPT2LMHeadModel.from_pretrained('gpt2')\n", - "tokenizer = GPT2Tokenizer.from_pretrained('gpt2')\n", - "\n", - "def score(sent1):\n", - " # input sentence tensor\n", - " # output score\n", - " tokens_tensor = tokenizer.encode(sent1, add_special_tokens=False, return_tensors=\"pt\")\n", - " loss = model(tokens_tensor, labels=tokens_tensor)[0]\n", - "# print(tokens_tensor.size(1))\n", - " return np.exp(loss.cpu().detach().numpy() / tokens_tensor.size(1))" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "id": "composite-conference", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF1 = hierDF[~hierDF.node1_label.isna()].reset_index().drop(columns=['index'])" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "unsigned-stress", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0idnode1node1_labellabelnode2node2_labelsent
00Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279Q100052008anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinae
11Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279Q100052008anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae
22Q100119502-P279-Q100052008-d2c330a4-0Q100119502nthropomorphic tP279Q100052008anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinae
33Q100052791-P279-Q100052938-71a0f2ca-0Q100052791nthropomorphic jaP279Q100052938fictional jaguarnthropomorphic ja is fictional jaguar
44Q100004761-P279-Q100095237-3971e1cd-0Q100004761helf lP279Q100095237shop shelvehelf l is shop shelve
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 id node1 \\\n", - "0 0 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "1 1 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 \n", - "2 2 Q100119502-P279-Q100052008-d2c330a4-0 Q100119502 \n", - "3 3 Q100052791-P279-Q100052938-71a0f2ca-0 Q100052791 \n", - "4 4 Q100004761-P279-Q100095237-3971e1cd-0 Q100004761 \n", - "\n", - " node1_label label node2 node2_label \\\n", - "0 nthropomorphic pan P279 Q100052008 anthropomorphic Pantherinae \n", - "1 nthropomorphic ja P279 Q100052008 anthropomorphic Pantherinae \n", - "2 nthropomorphic t P279 Q100052008 anthropomorphic Pantherinae \n", - "3 nthropomorphic ja P279 Q100052938 fictional jaguar \n", - "4 helf l P279 Q100095237 shop shelve \n", - "\n", - " sent \n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae \n", - "2 nthropomorphic t is anthropomorphic Pantherinae \n", - "3 nthropomorphic ja is fictional jaguar \n", - "4 helf l is shop shelve " - ] - }, - "execution_count": 126, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "magnetic-collect", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF1['gptChildParPpl'] = hierDF1.sent.apply(gpt_score)" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "id": "running-cable", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0idnode1node1_labellabelnode2node2_labelsentgptChildParPpl
00Q100052562-P279-Q100052008-1a4fa432-0Q100052562nthropomorphic panP279Q100052008anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinae2.172506
11Q100052791-P279-Q100052008-1d15b1ae-0Q100052791nthropomorphic jaP279Q100052008anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinae2.318752
22Q100119502-P279-Q100052008-d2c330a4-0Q100119502nthropomorphic tP279Q100052008anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinae2.184794
33Q100052791-P279-Q100052938-71a0f2ca-0Q100052791nthropomorphic jaP279Q100052938fictional jaguarnthropomorphic ja is fictional jaguar2.516336
44Q100004761-P279-Q100095237-3971e1cd-0Q100004761helf lP279Q100095237shop shelvehelf l is shop shelve3.221734
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 id node1 \\\n", - "0 0 Q100052562-P279-Q100052008-1a4fa432-0 Q100052562 \n", - "1 1 Q100052791-P279-Q100052008-1d15b1ae-0 Q100052791 \n", - "2 2 Q100119502-P279-Q100052008-d2c330a4-0 Q100119502 \n", - "3 3 Q100052791-P279-Q100052938-71a0f2ca-0 Q100052791 \n", - "4 4 Q100004761-P279-Q100095237-3971e1cd-0 Q100004761 \n", - "\n", - " node1_label label node2 node2_label \\\n", - "0 nthropomorphic pan P279 Q100052008 anthropomorphic Pantherinae \n", - "1 nthropomorphic ja P279 Q100052008 anthropomorphic Pantherinae \n", - "2 nthropomorphic t P279 Q100052008 anthropomorphic Pantherinae \n", - "3 nthropomorphic ja P279 Q100052938 fictional jaguar \n", - "4 helf l P279 Q100095237 shop shelve \n", - "\n", - " sent gptChildParPpl \n", - "0 nthropomorphic pan is anthropomorphic Pantherinae 2.172506 \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae 2.318752 \n", - "2 nthropomorphic t is anthropomorphic Pantherinae 2.184794 \n", - "3 nthropomorphic ja is fictional jaguar 2.516336 \n", - "4 helf l is shop shelve 3.221734 " - ] - }, - "execution_count": 128, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "id": "familiar-marks", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 839.000000\n", - "mean 4.615804\n", - "std 3.825699\n", - "min 1.111450\n", - "25% 2.006814\n", - "50% 3.344577\n", - "75% 5.765571\n", - "max 29.560613\n", - "Name: gptChildParPpl, dtype: float64" - ] - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hierDF1['gptChildParPpl'].describe()" - ] - }, - { - "cell_type": "markdown", - "id": "loaded-archive", - "metadata": {}, - "source": [ - "## GPT2 2 Sent Perplexity" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "id": "split-johnson", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1parentnode2node1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sentnode1_embnode2_embbert2SentSim
0Q100052562Q100052008Q100052562nthropomorphic pananthropomorphic Pantherinaenthropomorphic pannthropomorphic pan is anthropomorphic Pantherinaenthropomorphic pan is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...[-0.38264108, 0.3698052, -0.452593, -0.0875713...[-0.38264108, 0.3698052, -0.452593, -0.0875713...1.000000
1Q100052562Q100052008Q100052791nthropomorphic pananthropomorphic Pantherinaenthropomorphic janthropomorphic pan is anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...[-0.38264108, 0.3698052, -0.452593, -0.0875713...[-0.38223487, 0.35599083, -0.44246477, -0.1346...0.980127
2Q100052562Q100052008Q100119502nthropomorphic pananthropomorphic Pantherinaenthropomorphic tnthropomorphic pan is anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...[-0.38264108, 0.3698052, -0.452593, -0.0875713...[-0.31828552, 0.2023329, -0.23166429, 0.037530...0.980426
3Q100052791Q100052008Q100052791nthropomorphic jaanthropomorphic Pantherinaenthropomorphic janthropomorphic ja is anthropomorphic Pantherinaenthropomorphic ja is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...[-0.382235, 0.35599056, -0.44246483, -0.134666...[-0.38223487, 0.35599083, -0.44246477, -0.1346...1.000000
4Q100052791Q100052008Q100119502nthropomorphic jaanthropomorphic Pantherinaenthropomorphic tnthropomorphic ja is anthropomorphic Pantherinaenthropomorphic t is anthropomorphic Pantherinaeanthropomorphic Pantherinae such as nthropomor...[-0.38223487, 0.35599083, -0.44246477, -0.1346...[-0.31828552, 0.2023329, -0.23166429, 0.037530...0.990308
\n", - "
" - ], - "text/plain": [ - " node1 parent node2 node1_label \\\n", - "0 Q100052562 Q100052008 Q100052562 nthropomorphic pan \n", - "1 Q100052562 Q100052008 Q100052791 nthropomorphic pan \n", - "2 Q100052562 Q100052008 Q100119502 nthropomorphic pan \n", - "3 Q100052791 Q100052008 Q100052791 nthropomorphic ja \n", - "4 Q100052791 Q100052008 Q100119502 nthropomorphic ja \n", - "\n", - " par_label node2_label \\\n", - "0 anthropomorphic Pantherinae nthropomorphic pan \n", - "1 anthropomorphic Pantherinae nthropomorphic ja \n", - "2 anthropomorphic Pantherinae nthropomorphic t \n", - "3 anthropomorphic Pantherinae nthropomorphic ja \n", - "4 anthropomorphic Pantherinae nthropomorphic t \n", - "\n", - " node1_sent \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic pan is anthropomorphic Pantherinae \n", - "2 nthropomorphic pan is anthropomorphic Pantherinae \n", - "3 nthropomorphic ja is anthropomorphic Pantherinae \n", - "4 nthropomorphic ja is anthropomorphic Pantherinae \n", - "\n", - " node2_sent \\\n", - "0 nthropomorphic pan is anthropomorphic Pantherinae \n", - "1 nthropomorphic ja is anthropomorphic Pantherinae \n", - "2 nthropomorphic t is anthropomorphic Pantherinae \n", - "3 nthropomorphic ja is anthropomorphic Pantherinae \n", - "4 nthropomorphic t is anthropomorphic Pantherinae \n", - "\n", - " comb_sent \\\n", - "0 anthropomorphic Pantherinae such as nthropomor... \n", - "1 anthropomorphic Pantherinae such as nthropomor... \n", - "2 anthropomorphic Pantherinae such as nthropomor... \n", - "3 anthropomorphic Pantherinae such as nthropomor... \n", - "4 anthropomorphic Pantherinae such as nthropomor... \n", - "\n", - " node1_emb \\\n", - "0 [-0.38264108, 0.3698052, -0.452593, -0.0875713... \n", - "1 [-0.38264108, 0.3698052, -0.452593, -0.0875713... \n", - "2 [-0.38264108, 0.3698052, -0.452593, -0.0875713... \n", - "3 [-0.382235, 0.35599056, -0.44246483, -0.134666... \n", - "4 [-0.38223487, 0.35599083, -0.44246477, -0.1346... \n", - "\n", - " node2_emb bert2SentSim \n", - "0 [-0.38264108, 0.3698052, -0.452593, -0.0875713... 1.000000 \n", - "1 [-0.38223487, 0.35599083, -0.44246477, -0.1346... 0.980127 \n", - "2 [-0.31828552, 0.2023329, -0.23166429, 0.037530... 0.980426 \n", - "3 [-0.38223487, 0.35599083, -0.44246477, -0.1346... 1.000000 \n", - "4 [-0.31828552, 0.2023329, -0.23166429, 0.037530... 0.990308 " - ] - }, - "execution_count": 130, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 131, - "id": "sorted-phone", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF3['gpt2SentPpl'] = pairsDF3.comb_sent.apply(gpt_score)" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "id": "working-istanbul", - "metadata": {}, - "outputs": [], - "source": [ - "pairsDF3.to_csv(\"../data/P279_dataset/pairsDF3_simScores.csv\", index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "incorporate-england", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 3429.000000\n", - "mean 1.564343\n", - "std 0.443964\n", - "min 1.058665\n", - "25% 1.226182\n", - "50% 1.289757\n", - "75% 1.894221\n", - "max 3.545120\n", - "Name: gpt2SentPpl, dtype: float64" - ] - }, - "execution_count": 133, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pairsDF3['gpt2SentPpl'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "fifth-constitution", - "metadata": {}, - "outputs": [], - "source": [ - "hierDF1.to_csv('../data/P279_dataset/hierDF1_simScores.csv')" - ] - }, - { - "cell_type": "markdown", - "id": "synthetic-toddler", - "metadata": {}, - "source": [ - "# Wordsim" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "exposed-absence", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "reported-tribe", - "metadata": {}, - "outputs": [], - "source": [ - "p279DF = pd.read_csv('../data/P279_dataset/wikidata-P279.tsv',sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "sharp-brake", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "721983" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p279DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "obvious-distinction", - "metadata": {}, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mtemp1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mp279DFNew\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'node1'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabelsDF\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'node1'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrsuffix\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'_label'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mtemp1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtemp1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'id'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'label'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'node2'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'node2_label'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mtemp2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtemp1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'node2'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabelsDF\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'node1'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrsuffix\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'_label2'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0mtemp3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtemp2\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'id'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'node1'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'label'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'node2'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'node2_label'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrename\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'node2_label'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'node1_label'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'node2'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m'node2_label'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrename\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'index'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m'node2'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mtemp3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtemp3\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'id'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'node1'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'node1_label'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'label'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'node2'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'node2_label'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36mjoin\u001b[0;34m(self, other, on, how, lsuffix, rsuffix, sort)\u001b[0m\n\u001b[1;32m 8105\u001b[0m \u001b[0;36m5\u001b[0m \u001b[0mK5\u001b[0m \u001b[0mA5\u001b[0m \u001b[0mNaN\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8106\u001b[0m \"\"\"\n\u001b[0;32m-> 8107\u001b[0;31m return self._join_compat(\n\u001b[0m\u001b[1;32m 8108\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mon\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mon\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlsuffix\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlsuffix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrsuffix\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrsuffix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8109\u001b[0m )\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_join_compat\u001b[0;34m(self, other, on, how, lsuffix, rsuffix, sort)\u001b[0m\n\u001b[1;32m 8130\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8131\u001b[0m )\n\u001b[0;32m-> 8132\u001b[0;31m return merge(\n\u001b[0m\u001b[1;32m 8133\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8134\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36mmerge\u001b[0;34m(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001b[0m\n\u001b[1;32m 87\u001b[0m \u001b[0mvalidate\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 88\u001b[0m )\n\u001b[0;32m---> 89\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 90\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 91\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36mget_result\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 682\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mright\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_indicator_pre_merge\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mright\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 683\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 684\u001b[0;31m \u001b[0mjoin_index\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mleft_indexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright_indexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_join_info\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 685\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 686\u001b[0m llabels, rlabels = _items_overlap_with_suffix(\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36m_get_join_info\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 894\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 895\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleft_index\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mright_index\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhow\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;34m\"asof\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 896\u001b[0;31m join_index, left_indexer, right_indexer = left_ax.join(\n\u001b[0m\u001b[1;32m 897\u001b[0m \u001b[0mright_ax\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreturn_indexers\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 898\u001b[0m )\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mjoin\u001b[0;34m(self, other, how, level, return_indexers, sort)\u001b[0m\n\u001b[1;32m 3681\u001b[0m )\n\u001b[1;32m 3682\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3683\u001b[0;31m return self._join_non_unique(\n\u001b[0m\u001b[1;32m 3684\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreturn_indexers\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreturn_indexers\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3685\u001b[0m )\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36m_join_non_unique\u001b[0;34m(self, other, how, return_indexers)\u001b[0m\n\u001b[1;32m 3811\u001b[0m \u001b[0mrvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_engine_target\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3812\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3813\u001b[0;31m left_idx, right_idx = get_join_indexers(\n\u001b[0m\u001b[1;32m 3814\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mlvalues\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mrvalues\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3815\u001b[0m )\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36mget_join_indexers\u001b[0;34m(left_keys, right_keys, sort, how, **kwargs)\u001b[0m\n\u001b[1;32m 1425\u001b[0m \u001b[0;31m# set(lkey) | set(rkey) == range(count)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1426\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1427\u001b[0;31m \u001b[0mlkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_factorize_keys\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1428\u001b[0m \u001b[0;31m# preserve left frame order if how == 'left' and sort == False\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1429\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36m_factorize_keys\u001b[0;34m(lk, rk, sort, how)\u001b[0m\n\u001b[1;32m 2062\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2063\u001b[0m \u001b[0muniques\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muniques\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_array\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2064\u001b[0;31m \u001b[0mllab\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrlab\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_sort_labels\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0muniques\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mllab\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrlab\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2065\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2066\u001b[0m \u001b[0;31m# NA group\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36m_sort_labels\u001b[0;34m(uniques, left, right)\u001b[0m\n\u001b[1;32m 2087\u001b[0m \u001b[0mlabels\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconcatenate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2088\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2089\u001b[0;31m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_labels\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0malgos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msafe_sort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0muniques\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mna_sentinel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2090\u001b[0m \u001b[0mnew_labels\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mensure_int64\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_labels\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2091\u001b[0m \u001b[0mnew_left\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_right\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_labels\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mllength\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_labels\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mllength\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/algorithms.py\u001b[0m in \u001b[0;36msafe_sort\u001b[0;34m(values, codes, na_sentinel, assume_unique, verify)\u001b[0m\n\u001b[1;32m 2157\u001b[0m \u001b[0;31m# take_1d is faster, but only works for na_sentinels of -1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2158\u001b[0m \u001b[0morder2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msorter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margsort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2159\u001b[0;31m \u001b[0mnew_codes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtake_1d\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0morder2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcodes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2160\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mverify\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2161\u001b[0m \u001b[0mmask\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mcodes\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mcodes\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/algorithms.py\u001b[0m in \u001b[0;36mtake_nd\u001b[0;34m(arr, indexer, axis, out, fill_value, allow_fill)\u001b[0m\n\u001b[1;32m 1757\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmask_info\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmask_info\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1758\u001b[0m )\n\u001b[0;32m-> 1759\u001b[0;31m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1760\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1761\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mflip_order\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "p279DFNew = p279DF\n", - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')\n", - "temp1 = p279DFNew.set_index('node1').join(labelsDF.set_index('node1'), rsuffix='_label')\n", - "temp1 = temp1[['id','label','node2','node2_label']]\n", - "temp2 = temp1.reset_index().set_index('node2').join(labelsDF.set_index('node1'), rsuffix='_label2')\n", - "temp3 = temp2[['id','node1','label','node2', 'node2_label']].rename(columns={'node2_label': 'node1_label', 'node2':'node2_label'}).reset_index().rename(columns={'index':'node2'})\n", - "temp3 = temp3[['id','node1','node1_label','label','node2','node2_label']]\n", - "temp3 = temp3[~temp3['node1_label'].isna()]\n", - "temp3 = temp3[~temp3['node2_label'].isna()]\n", - "temp3['node2_label'].isna().sum()\n", - "temp3['node1_label'] = temp3['node1_label'].apply(lambda p: p[1:-4])\n", - "temp3['node2_label'] = temp3['node2_label'].apply(lambda p: p[1:-4])\n", - "temp3['sent'] = temp3.apply(lambda p: p['node1_label'] + ' is ' + p['node2_label'], axis=1)\n", - "temp3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "convinced-longitude", - "metadata": {}, - "outputs": [], - "source": [ - "!wget http://alfonseca.org/pubs/ws353simrel.tar.gz -o ../data/ws353simrel.tar.gz" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "royal-wedding", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "wordsim353_agreed.txt\t wordsim_relatedness_goldstandard.txt\r\n", - "wordsim353_annotator1.txt wordsim_similarity_goldstandard.txt\r\n", - "wordsim353_annotator2.txt\r\n" - ] - } - ], - "source": [ - "!ls ../data/wordsim353_sim_rel" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "acknowledged-travel", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tiger\tcat\t7.35\r\n", - "tiger\ttiger\t10.00\r\n", - "plane\tcar\t5.77\r\n", - "train\tcar\t6.31\r\n", - "television\tradio\t6.77\r\n", - "media\tradio\t7.42\r\n", - "bread\tbutter\t6.19\r\n", - "cucumber\tpotato\t5.92\r\n", - "doctor\tnurse\t7.00\r\n", - "professor\tdoctor\t6.62\r\n", - "student\tprofessor\t6.81\r\n", - "smart\tstupid\t5.81\r\n", - "wood\tforest\t7.73\r\n", - "money\tcash\t9.15\r\n", - "king\tqueen\t8.58\r\n", - "king\trook\t5.92\r\n", - "bishop\trabbi\t6.69\r\n", - "fuck\tsex\t9.44\r\n", - "football\tsoccer\t9.03\r\n", - "football\tbasketball\t6.81\r\n", - "football\ttennis\t6.63\r\n", - "Arafat\tJackson\t2.50\r\n", - "physics\tchemistry\t7.35\r\n", - "vodka\tgin\t8.46\r\n", - "vodka\tbrandy\t8.13\r\n", - "drink\teat\t6.87\r\n", - "car\tautomobile\t8.94\r\n", - "gem\tjewel\t8.96\r\n", - "journey\tvoyage\t9.29\r\n", - "boy\tlad\t8.83\r\n", - "coast\tshore\t9.10\r\n", - "asylum\tmadhouse\t8.87\r\n", - "magician\twizard\t9.02\r\n", - "midday\tnoon\t9.29\r\n", - "furnace\tstove\t8.79\r\n", - "food\tfruit\t7.52\r\n", - "bird\tcock\t7.10\r\n", - "bird\tcrane\t7.38\r\n", - "food\trooster\t4.42\r\n", - "money\tdollar\t8.42\r\n", - "money\tcurrency\t9.04\r\n", - "tiger\tjaguar\t8.00\r\n", - "tiger\tfeline\t8.00\r\n", - "tiger\tcarnivore\t7.08\r\n", - "tiger\tmammal\t6.85\r\n", - "tiger\tanimal\t7.00\r\n", - "tiger\torganism\t4.77\r\n", - "tiger\tfauna\t5.62\r\n", - "psychology\tpsychiatry\t8.08\r\n", - "psychology\tscience\t6.71\r\n", - "psychology\tdiscipline\t5.58\r\n", - "planet\tstar\t8.45\r\n", - "planet\tmoon\t8.08\r\n", - "planet\tsun\t8.02\r\n", - "precedent\texample\t5.85\r\n", - "precedent\tantecedent\t6.04\r\n", - "cup\ttableware\t6.85\r\n", - "cup\tartifact\t2.92\r\n", - "cup\tobject\t3.69\r\n", - "cup\tentity\t2.15\r\n", - "jaguar\tcat\t7.42\r\n", - "jaguar\tcar\t7.27\r\n", - "mile\tkilometer\t8.66\r\n", - "skin\teye\t6.22\r\n", - "Japanese\tAmerican\t6.50\r\n", - "century\tyear\t7.59\r\n", - "announcement\tnews\t7.56\r\n", - "doctor\tpersonnel\t5.00\r\n", - "Harvard\tYale\t8.13\r\n", - "hospital\tinfrastructure\t4.63\r\n", - "life\tdeath\t7.88\r\n", - "travel\tactivity\t5.00\r\n", - "type\tkind\t8.97\r\n", - "street\tplace\t6.44\r\n", - "street\tavenue\t8.88\r\n", - "street\tblock\t6.88\r\n", - "cell\tphone\t7.81\r\n", - "dividend\tpayment\t7.63\r\n", - "calculation\tcomputation\t8.44\r\n", - "profit\tloss\t7.63\r\n", - "dollar\tyen\t7.78\r\n", - "dollar\tbuck\t9.22\r\n", - "phone\tequipment\t7.13\r\n", - "liquid\twater\t7.89\r\n", - "marathon\tsprint\t7.47\r\n", - "seafood\tfood\t8.34\r\n", - "seafood\tlobster\t8.70\r\n", - "lobster\tfood\t7.81\r\n", - "lobster\twine\t5.70\r\n", - "championship\ttournament\t8.36\r\n", - "man\twoman\t8.30\r\n", - "man\tgovernor\t5.25\r\n", - "murder\tmanslaughter\t8.53\r\n", - "opera\tperformance\t6.88\r\n", - "Mexico\tBrazil\t7.44\r\n", - "glass\tmetal\t5.56\r\n", - "aluminum\tmetal\t7.83\r\n", - "rock\tjazz\t7.59\r\n", - "museum\ttheater\t7.19\r\n", - "shower\tthunderstorm\t6.31\r\n", - "monk\toracle\t5.00\r\n", - "cup\tfood\t5.00\r\n", - "journal\tassociation\t4.97\r\n", - "street\tchildren\t4.94\r\n", - "car\tflight\t4.94\r\n", - "space\tchemistry\t4.88\r\n", - "situation\tconclusion\t4.81\r\n", - "word\tsimilarity\t4.75\r\n", - "peace\tplan\t4.75\r\n", - "consumer\tenergy\t4.75\r\n", - "ministry\tculture\t4.69\r\n", - "smart\tstudent\t4.62\r\n", - "investigation\teffort\t4.59\r\n", - "image\tsurface\t4.56\r\n", - "life\tterm\t4.50\r\n", - "start\tmatch\t4.47\r\n", - "computer\tnews\t4.47\r\n", - "board\trecommendation\t4.47\r\n", - "lad\tbrother\t4.46\r\n", - "observation\tarchitecture\t4.38\r\n", - "coast\thill\t4.38\r\n", - "deployment\tdeparture\t4.25\r\n", - "benchmark\tindex\t4.25\r\n", - "attempt\tpeace\t4.25\r\n", - "consumer\tconfidence\t4.13\r\n", - "start\tyear\t4.06\r\n", - "focus\tlife\t4.06\r\n", - "development\tissue\t3.97\r\n", - "theater\thistory\t3.91\r\n", - "situation\tisolation\t3.88\r\n", - "profit\twarning\t3.88\r\n", - "media\ttrading\t3.88\r\n", - "chance\tcredibility\t3.88\r\n", - "precedent\tinformation\t3.85\r\n", - "architecture\tcentury\t3.78\r\n", - "population\tdevelopment\t3.75\r\n", - "stock\tlive\t3.73\r\n", - "peace\tatmosphere\t3.69\r\n", - "morality\tmarriage\t3.69\r\n", - "minority\tpeace\t3.69\r\n", - "atmosphere\tlandscape\t3.69\r\n", - "report\tgain\t3.63\r\n", - "music\tproject\t3.63\r\n", - "seven\tseries\t3.56\r\n", - "experience\tmusic\t3.47\r\n", - "school\tcenter\t3.44\r\n", - "five\tmonth\t3.38\r\n", - "announcement\tproduction\t3.38\r\n", - "morality\timportance\t3.31\r\n", - "money\toperation\t3.31\r\n", - "delay\tnews\t3.31\r\n", - "governor\tinterview\t3.25\r\n", - "practice\tinstitution\t3.19\r\n", - "century\tnation\t3.16\r\n", - "coast\tforest\t3.15\r\n", - "shore\twoodland\t3.08\r\n", - "drink\tcar\t3.04\r\n", - "president\tmedal\t3.00\r\n", - "prejudice\trecognition\t3.00\r\n", - "viewer\tserial\t2.97\r\n", - "peace\tinsurance\t2.94\r\n", - "Mars\twater\t2.94\r\n", - "media\tgain\t2.88\r\n", - "precedent\tcognition\t2.81\r\n", - "announcement\teffort\t2.75\r\n", - "line\tinsurance\t2.69\r\n", - "crane\timplement\t2.69\r\n", - "drink\tmother\t2.65\r\n", - "opera\tindustry\t2.63\r\n", - "volunteer\tmotto\t2.56\r\n", - "listing\tproximity\t2.56\r\n", - "precedent\tcollection\t2.50\r\n", - "cup\tarticle\t2.40\r\n", - "sign\trecess\t2.38\r\n", - "problem\tairport\t2.38\r\n", - "reason\thypertension\t2.31\r\n", - "direction\tcombination\t2.25\r\n", - "Wednesday\tnews\t2.22\r\n", - "glass\tmagician\t2.08\r\n", - "cemetery\twoodland\t2.08\r\n", - "possibility\tgirl\t1.94\r\n", - "cup\tsubstance\t1.92\r\n", - "forest\tgraveyard\t1.85\r\n", - "stock\tegg\t1.81\r\n", - "month\thotel\t1.81\r\n", - "energy\tsecretary\t1.81\r\n", - "precedent\tgroup\t1.77\r\n", - "production\thike\t1.75\r\n", - "stock\tphone\t1.62\r\n", - "holy\tsex\t1.62\r\n", - "stock\tCD\t1.31\r\n", - "drink\tear\t1.31\r\n", - "delay\tracism\t1.19\r\n", - "stock\tlife\t0.92\r\n", - "stock\tjaguar\t0.92\r\n", - "monk\tslave\t0.92\r\n", - "lad\twizard\t0.92\r\n", - "sugar\tapproach\t0.88\r\n", - "rooster\tvoyage\t0.62\r\n", - "noon\tstring\t0.54\r\n", - "chord\tsmile\t0.54\r\n", - "professor\tcucumber\t0.31\r\n", - "king\tcabbage\t0.23\r\n" - ] - } - ], - "source": [ - "cat ../data/wordsim353_sim_rel/wordsim_similarity_goldstandard.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "treated-memory", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF = pd.read_csv('../data/wordsim353_sim_rel/wordsim_similarity_goldstandard.txt', sep='\\t', header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "intimate-despite", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF.columns=['word1', 'word2', 'sim']" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "genuine-shareware", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1word2sim
0tigercat7.35
1tigertiger10.00
2planecar5.77
3traincar6.31
4televisionradio6.77
\n", - "
" - ], - "text/plain": [ - " word1 word2 sim\n", - "0 tiger cat 7.35\n", - "1 tiger tiger 10.00\n", - "2 plane car 5.77\n", - "3 train car 6.31\n", - "4 television radio 6.77" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "addressed-consideration", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "indie-madonna", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1node1_labellabelnode2node2_labelsent
1Q17372279-P279-Q100026-beba8cd1-0Q17372279YF-16P279Q100026F-16 Fighting FalconYF-16 is F-16 Fighting Falcon
2Q17372377-P279-Q100026-fd42bd71-0Q17372377F-16A/B Fighting FalconP279Q100026F-16 Fighting FalconF-16A/B Fighting Falcon is F-16 Fighting Falcon
3Q17372444-P279-Q100026-ca0fc4bd-0Q17372444F-16C/D Fighting FalconP279Q100026F-16 Fighting FalconF-16C/D Fighting Falcon is F-16 Fighting Falcon
4Q17372455-P279-Q100026-c2b1bf36-0Q17372455F-16E/F Desert FalconP279Q100026F-16 Fighting FalconF-16E/F Desert Falcon is F-16 Fighting Falcon
5Q2029940-P279-Q100026-ceba4380-0Q2029940F-16 VISTAP279Q100026F-16 Fighting FalconF-16 VISTA is F-16 Fighting Falcon
\n", - "
" - ], - "text/plain": [ - " id node1 node1_label \\\n", - "1 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 YF-16 \n", - "2 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 F-16A/B Fighting Falcon \n", - "3 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 F-16C/D Fighting Falcon \n", - "4 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 F-16E/F Desert Falcon \n", - "5 Q2029940-P279-Q100026-ceba4380-0 Q2029940 F-16 VISTA \n", - "\n", - " label node2 node2_label \\\n", - "1 P279 Q100026 F-16 Fighting Falcon \n", - "2 P279 Q100026 F-16 Fighting Falcon \n", - "3 P279 Q100026 F-16 Fighting Falcon \n", - "4 P279 Q100026 F-16 Fighting Falcon \n", - "5 P279 Q100026 F-16 Fighting Falcon \n", - "\n", - " sent \n", - "1 YF-16 is F-16 Fighting Falcon \n", - "2 F-16A/B Fighting Falcon is F-16 Fighting Falcon \n", - "3 F-16C/D Fighting Falcon is F-16 Fighting Falcon \n", - "4 F-16E/F Desert Falcon is F-16 Fighting Falcon \n", - "5 F-16 VISTA is F-16 Fighting Falcon " - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "threatened-invasion", - "metadata": {}, - "outputs": [], - "source": [ - "# temp3[temp3.node1_label.apply(lambda p: 'tiger' in p)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "affected-protest", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "corrected-harbor", - "metadata": {}, - "source": [ - "## Extracting wordsim words from wikidata P279 dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "wrong-generation", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimWordPairsSet = set(wordSimDF.apply(lambda p: (p.word1, p.word2), axis=1).tolist())\n", - "wordSimWordsSet = set(wordSimDF.word1.tolist() + wordSimDF.word2.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "responsible-couple", - "metadata": {}, - "outputs": [], - "source": [ - "temp3wordsimed = temp3[temp3.apply(lambda p: (p.node1_label, p.node2_label) in wordSimWordPairsSet, axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "productive-contractor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1node1_labellabelnode2node2_labelsent
225669Q61509-P279-Q1914636-522de7b1-0Q61509travelP279Q1914636activitytravel is activity
253542Q192935-P279-Q2095-c9aba5ef-0Q192935seafoodP279Q2095foodseafood is food
480116Q93352-P279-Q468756-18da9376-0Q93352coastP279Q468756shorecoast is shore
\n", - "
" - ], - "text/plain": [ - " id node1 node1_label label node2 \\\n", - "225669 Q61509-P279-Q1914636-522de7b1-0 Q61509 travel P279 Q1914636 \n", - "253542 Q192935-P279-Q2095-c9aba5ef-0 Q192935 seafood P279 Q2095 \n", - "480116 Q93352-P279-Q468756-18da9376-0 Q93352 coast P279 Q468756 \n", - "\n", - " node2_label sent \n", - "225669 activity travel is activity \n", - "253542 food seafood is food \n", - "480116 shore coast is shore " - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3wordsimed" - ] - }, - { - "cell_type": "markdown", - "id": "manual-logistics", - "metadata": {}, - "source": [ - "## Extracting wordsim words from wikidata P279 siblings dataset" - ] - }, - { - "cell_type": "markdown", - "id": "polyphonic-receipt", - "metadata": {}, - "source": [ - "### Generate new P279 siblings dataset from wordsim words subset" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "atmospheric-pacific", - "metadata": {}, - "outputs": [], - "source": [ - "P279wordsimed = temp3[temp3.node1_label.apply(lambda p: p in wordSimWordsSet)]" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "optimum-palestine", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "699" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(P279wordsimed)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "mediterranean-bridal", - "metadata": {}, - "outputs": [], - "source": [ - "newPairLeftDF = P279wordsimed.copy()\n", - "newPairRightDF = P279wordsimed.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "amazing-resource", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF = newPairLeftDF.set_index('node2').join(newPairRightDF.set_index('node2'),rsuffix='_right').reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "nominated-senate", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelsentid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightsent_right
0Q100257358Q15209696-P279-Q100257358-c4b60f40-0Q15209696profitP279lucreprofit is lucreQ15209696-P279-Q100257358-c4b60f40-0Q15209696profitP279lucreprofit is lucre
1Q1002697Q28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodicalQ28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodical
2Q1002697Q28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodicalQ49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodical
3Q1002697Q49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodicalQ28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodical
4Q1002697Q49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodicalQ49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodical
\n", - "
" - ], - "text/plain": [ - " node2 id node1 node1_label \\\n", - "0 Q100257358 Q15209696-P279-Q100257358-c4b60f40-0 Q15209696 profit \n", - "1 Q1002697 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "2 Q1002697 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "3 Q1002697 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "4 Q1002697 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "\n", - " label node2_label sent \\\n", - "0 P279 lucre profit is lucre \n", - "1 P279 periodical issue is periodical \n", - "2 P279 periodical issue is periodical \n", - "3 P279 periodical journal is periodical \n", - "4 P279 periodical journal is periodical \n", - "\n", - " id_right node1_right node1_label_right \\\n", - "0 Q15209696-P279-Q100257358-c4b60f40-0 Q15209696 profit \n", - "1 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "2 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "3 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "4 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "\n", - " label_right node2_label_right sent_right \n", - "0 P279 lucre profit is lucre \n", - "1 P279 periodical issue is periodical \n", - "2 P279 periodical journal is periodical \n", - "3 P279 periodical issue is periodical \n", - "4 P279 periodical journal is periodical " - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "german-falls", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF['set_nodes'] = newPairsDF.apply(lambda p: str(sorted([p.node1, p.node1_right]) + [p.node2]), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "obvious-compatibility", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF1 = newPairsDF[~newPairsDF['set_nodes'].duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "logical-techno", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1143 statements get reduced to 916 statements after checking for duplicate pairs\n" - ] - } - ], - "source": [ - "print(f\"{len(newPairsDF)} statements get reduced to {len(newPairsDF1)} statements after checking for duplicate pairs\")" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "bound-consumer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelsentid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightsent_rightset_nodes
0Q100257358Q15209696-P279-Q100257358-c4b60f40-0Q15209696profitP279lucreprofit is lucreQ15209696-P279-Q100257358-c4b60f40-0Q15209696profitP279lucreprofit is lucre['Q15209696', 'Q15209696', 'Q100257358']
1Q1002697Q28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodicalQ28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodical['Q28869365', 'Q28869365', 'Q1002697']
2Q1002697Q28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodicalQ49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodical['Q28869365', 'Q49850', 'Q1002697']
4Q1002697Q49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodicalQ49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodical['Q49850', 'Q49850', 'Q1002697']
5Q101604684Q12562111-P279-Q101604684-bde28046-0Q12562111seriesP279lithodemic unitseries is lithodemic unitQ12562111-P279-Q101604684-bde28046-0Q12562111seriesP279lithodemic unitseries is lithodemic unit['Q12562111', 'Q12562111', 'Q101604684']
\n", - "
" - ], - "text/plain": [ - " node2 id node1 node1_label \\\n", - "0 Q100257358 Q15209696-P279-Q100257358-c4b60f40-0 Q15209696 profit \n", - "1 Q1002697 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "2 Q1002697 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "4 Q1002697 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "5 Q101604684 Q12562111-P279-Q101604684-bde28046-0 Q12562111 series \n", - "\n", - " label node2_label sent \\\n", - "0 P279 lucre profit is lucre \n", - "1 P279 periodical issue is periodical \n", - "2 P279 periodical issue is periodical \n", - "4 P279 periodical journal is periodical \n", - "5 P279 lithodemic unit series is lithodemic unit \n", - "\n", - " id_right node1_right node1_label_right \\\n", - "0 Q15209696-P279-Q100257358-c4b60f40-0 Q15209696 profit \n", - "1 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "2 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "4 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "5 Q12562111-P279-Q101604684-bde28046-0 Q12562111 series \n", - "\n", - " label_right node2_label_right sent_right \\\n", - "0 P279 lucre profit is lucre \n", - "1 P279 periodical issue is periodical \n", - "2 P279 periodical journal is periodical \n", - "4 P279 periodical journal is periodical \n", - "5 P279 lithodemic unit series is lithodemic unit \n", - "\n", - " set_nodes \n", - "0 ['Q15209696', 'Q15209696', 'Q100257358'] \n", - "1 ['Q28869365', 'Q28869365', 'Q1002697'] \n", - "2 ['Q28869365', 'Q49850', 'Q1002697'] \n", - "4 ['Q49850', 'Q49850', 'Q1002697'] \n", - "5 ['Q12562111', 'Q12562111', 'Q101604684'] " - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "together-cause", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " newPairsDF1['comb_sent'] = newPairsDF1.apply(lambda p: p.node2_label + ' such as ' + p.node1_label + ' and ' + p.node1_label_right, axis=1)\n" - ] - } - ], - "source": [ - "newPairsDF1['comb_sent'] = newPairsDF1.apply(lambda p: p.node2_label + ' such as ' + p.node1_label + ' and ' + p.node1_label_right, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "incident-amber", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelsentid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightsent_rightset_nodescomb_sent
0Q100257358Q15209696-P279-Q100257358-c4b60f40-0Q15209696profitP279lucreprofit is lucreQ15209696-P279-Q100257358-c4b60f40-0Q15209696profitP279lucreprofit is lucre['Q15209696', 'Q15209696', 'Q100257358']lucre such as profit and profit
1Q1002697Q28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodicalQ28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodical['Q28869365', 'Q28869365', 'Q1002697']periodical such as issue and issue
2Q1002697Q28869365-P279-Q1002697-ef7c4062-0Q28869365issueP279periodicalissue is periodicalQ49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodical['Q28869365', 'Q49850', 'Q1002697']periodical such as issue and journal
4Q1002697Q49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodicalQ49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodical['Q49850', 'Q49850', 'Q1002697']periodical such as journal and journal
5Q101604684Q12562111-P279-Q101604684-bde28046-0Q12562111seriesP279lithodemic unitseries is lithodemic unitQ12562111-P279-Q101604684-bde28046-0Q12562111seriesP279lithodemic unitseries is lithodemic unit['Q12562111', 'Q12562111', 'Q101604684']lithodemic unit such as series and series
\n", - "
" - ], - "text/plain": [ - " node2 id node1 node1_label \\\n", - "0 Q100257358 Q15209696-P279-Q100257358-c4b60f40-0 Q15209696 profit \n", - "1 Q1002697 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "2 Q1002697 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "4 Q1002697 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "5 Q101604684 Q12562111-P279-Q101604684-bde28046-0 Q12562111 series \n", - "\n", - " label node2_label sent \\\n", - "0 P279 lucre profit is lucre \n", - "1 P279 periodical issue is periodical \n", - "2 P279 periodical issue is periodical \n", - "4 P279 periodical journal is periodical \n", - "5 P279 lithodemic unit series is lithodemic unit \n", - "\n", - " id_right node1_right node1_label_right \\\n", - "0 Q15209696-P279-Q100257358-c4b60f40-0 Q15209696 profit \n", - "1 Q28869365-P279-Q1002697-ef7c4062-0 Q28869365 issue \n", - "2 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "4 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "5 Q12562111-P279-Q101604684-bde28046-0 Q12562111 series \n", - "\n", - " label_right node2_label_right sent_right \\\n", - "0 P279 lucre profit is lucre \n", - "1 P279 periodical issue is periodical \n", - "2 P279 periodical journal is periodical \n", - "4 P279 periodical journal is periodical \n", - "5 P279 lithodemic unit series is lithodemic unit \n", - "\n", - " set_nodes \\\n", - "0 ['Q15209696', 'Q15209696', 'Q100257358'] \n", - "1 ['Q28869365', 'Q28869365', 'Q1002697'] \n", - "2 ['Q28869365', 'Q49850', 'Q1002697'] \n", - "4 ['Q49850', 'Q49850', 'Q1002697'] \n", - "5 ['Q12562111', 'Q12562111', 'Q101604684'] \n", - "\n", - " comb_sent \n", - "0 lucre such as profit and profit \n", - "1 periodical such as issue and issue \n", - "2 periodical such as issue and journal \n", - "4 periodical such as journal and journal \n", - "5 lithodemic unit such as series and series " - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "young-reception", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF2 = newPairsDF1[['node1', 'node2', 'node1_right', 'node1_label', 'node2_label', 'node1_label_right', 'sent', 'sent_right', 'comb_sent']]" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "israeli-daniel", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3 = newPairsDF2.rename(columns={'node1_right': 'node2', 'node2': 'parent', 'node1_label_right': 'node2_label', 'node2_label': 'par_label', 'sent': 'node1_sent', 'sent_right': 'node2_sent'})" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "appointed-distributor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1parentnode2node1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sent
0Q15209696Q100257358Q15209696profitlucreprofitprofit is lucreprofit is lucrelucre such as profit and profit
1Q28869365Q1002697Q28869365issueperiodicalissueissue is periodicalissue is periodicalperiodical such as issue and issue
2Q28869365Q1002697Q49850issueperiodicaljournalissue is periodicaljournal is periodicalperiodical such as issue and journal
4Q49850Q1002697Q49850journalperiodicaljournaljournal is periodicaljournal is periodicalperiodical such as journal and journal
5Q12562111Q101604684Q12562111serieslithodemic unitseriesseries is lithodemic unitseries is lithodemic unitlithodemic unit such as series and series
\n", - "
" - ], - "text/plain": [ - " node1 parent node2 node1_label par_label node2_label \\\n", - "0 Q15209696 Q100257358 Q15209696 profit lucre profit \n", - "1 Q28869365 Q1002697 Q28869365 issue periodical issue \n", - "2 Q28869365 Q1002697 Q49850 issue periodical journal \n", - "4 Q49850 Q1002697 Q49850 journal periodical journal \n", - "5 Q12562111 Q101604684 Q12562111 series lithodemic unit series \n", - "\n", - " node1_sent node2_sent \\\n", - "0 profit is lucre profit is lucre \n", - "1 issue is periodical issue is periodical \n", - "2 issue is periodical journal is periodical \n", - "4 journal is periodical journal is periodical \n", - "5 series is lithodemic unit series is lithodemic unit \n", - "\n", - " comb_sent \n", - "0 lucre such as profit and profit \n", - "1 periodical such as issue and issue \n", - "2 periodical such as issue and journal \n", - "4 periodical such as journal and journal \n", - "5 lithodemic unit such as series and series " - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "adapted-particular", - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'wordSimWordSet' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnewPairsDF3wordsimed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnewPairsDF3\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnewPairsDF3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnode1_label\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnode2_label\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mwordSimWordSet\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, func, axis, raw, result_type, args, **kwds)\u001b[0m\n\u001b[1;32m 7763\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7764\u001b[0m )\n\u001b[0;32m-> 7765\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7766\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7767\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapplymap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mna_action\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mDataFrame\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mget_result\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 183\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_raw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 184\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 185\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 186\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapply_empty_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mapply_standard\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 276\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres_index\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_series_generator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 277\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 278\u001b[0m \u001b[0;31m# wrap results\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/apply.py\u001b[0m in \u001b[0;36mapply_series_generator\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 288\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseries_gen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 289\u001b[0m \u001b[0;31m# ignore SettingWithCopy here in case the user mutates\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 290\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 291\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mABCSeries\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 292\u001b[0m \u001b[0;31m# If we have a view on v, we need to make a copy because\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(p)\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnewPairsDF3wordsimed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnewPairsDF3\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnewPairsDF3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnode1_label\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnode2_label\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mwordSimWordSet\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'wordSimWordSet' is not defined" - ] - } - ], - "source": [ - "newPairsDF3wordsimed = newPairsDF3[newPairsDF3.apply(lambda p: (p.node1_label, p.node2_label) in wordSimWordSet, axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "dying-volleyball", - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'newPairsDF3wordsimed' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnewPairsDF3wordsimed\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'newPairsDF3wordsimed' is not defined" - ] - } - ], - "source": [ - "newPairsDF3wordsimed" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "fewer-there", - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'newPairsDF3wordsimed' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnewPairsDF3wordsimed\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'newPairsDF3wordsimed' is not defined" - ] - } - ], - "source": [ - "len(newPairsDF3wordsimed)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "naval-compound", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "piano-bernard", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "correct-validation", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "expressed-graphics", - "metadata": {}, - "source": [ - "# Amandeep's Sim File Computation" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "distinct-teacher", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF = pd.read_csv(\"../data/wordsim.csv\")" - ] - }, - { - "cell_type": "markdown", - "id": "interim-exhibition", - "metadata": {}, - "source": [ - "## Extracting wordsim word pairs from wikidata P279 dataset\n", - "\n", - "Basis: Find child-parent samples which are in wordsim" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "registered-waters", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimWordPairsSet = set(wordSimDF.apply(lambda p: (p.word1_kg_id, p.word2_kg_id), axis=1).tolist())\n", - "wordSimWordsSet = set(wordSimDF.word1_kg_id.tolist() + wordSimDF.word2_kg_id.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "separated-jenny", - "metadata": {}, - "outputs": [], - "source": [ - "temp3wordsimed = temp3[temp3.apply(lambda p: (p.node1, p.node2) in wordSimWordPairsSet, axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "suffering-belize", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1node1_labellabelnode2node2_labelsent
225669Q61509-P279-Q1914636-522de7b1-0Q61509travelP279Q1914636activitytravel is activity
253542Q192935-P279-Q2095-c9aba5ef-0Q192935seafoodP279Q2095foodseafood is food
480116Q93352-P279-Q468756-18da9376-0Q93352coastP279Q468756shorecoast is shore
495543Q98069877-P279-Q49848-07219034-0Q98069877videoP279Q49848documentvideo is document
\n", - "
" - ], - "text/plain": [ - " id node1 node1_label label \\\n", - "225669 Q61509-P279-Q1914636-522de7b1-0 Q61509 travel P279 \n", - "253542 Q192935-P279-Q2095-c9aba5ef-0 Q192935 seafood P279 \n", - "480116 Q93352-P279-Q468756-18da9376-0 Q93352 coast P279 \n", - "495543 Q98069877-P279-Q49848-07219034-0 Q98069877 video P279 \n", - "\n", - " node2 node2_label sent \n", - "225669 Q1914636 activity travel is activity \n", - "253542 Q2095 food seafood is food \n", - "480116 Q468756 shore coast is shore \n", - "495543 Q49848 document video is document " - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3wordsimed" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "billion-highlight", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "refined-mattress", - "metadata": {}, - "outputs": [], - "source": [ - "temp3wordsimedMergedDF = temp3wordsimed.set_index(['node1', 'node2']).join(wordSimDF.rename(columns={'word1_kg_id': 'node1', 'word2_kg_id': 'node2'}).set_index(['node1', 'node2']))" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "prerequisite-jewelry", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1_labellabelnode2_labelsentWord 1word1_kg_labelword1_kg_descriptionWord 2word2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
node1node2
Q192935Q2095Q192935-P279-Q2095-c9aba5ef-0seafoodP279foodseafood is foodseafoodseafoodfood from the sea, e.g. fish, shrimp, crab, mu...foodfoodany substance consumed to provide nutritional ...6.87500.5313310.4674950.6641270.565204
Q61509Q1914636Q61509-P279-Q1914636-522de7b1-0travelP279activitytravel is activitytraveltravelmovement of people between relatively distant ...activityactivityevent; actions that result in changes of state4.18750.4002340.6383470.6826830.136251
Q93352Q468756Q93352-P279-Q468756-18da9376-0coastP279shorecoast is shorecoastcoastarea where land meets the sea or oceanshoreshorefringe of land at the edge of a large body of ...8.27550.6045080.6289450.8591710.539750
Q98069877Q49848Q98069877-P279-Q49848-07219034-0videoP279documentvideo is documentvideovideomotion picture formatarchivedocumentpreserved information3.43750.5309360.2602830.6790860.649235
\n", - "
" - ], - "text/plain": [ - " id node1_label label \\\n", - "node1 node2 \n", - "Q192935 Q2095 Q192935-P279-Q2095-c9aba5ef-0 seafood P279 \n", - "Q61509 Q1914636 Q61509-P279-Q1914636-522de7b1-0 travel P279 \n", - "Q93352 Q468756 Q93352-P279-Q468756-18da9376-0 coast P279 \n", - "Q98069877 Q49848 Q98069877-P279-Q49848-07219034-0 video P279 \n", - "\n", - " node2_label sent Word 1 word1_kg_label \\\n", - "node1 node2 \n", - "Q192935 Q2095 food seafood is food seafood seafood \n", - "Q61509 Q1914636 activity travel is activity travel travel \n", - "Q93352 Q468756 shore coast is shore coast coast \n", - "Q98069877 Q49848 document video is document video video \n", - "\n", - " word1_kg_description \\\n", - "node1 node2 \n", - "Q192935 Q2095 food from the sea, e.g. fish, shrimp, crab, mu... \n", - "Q61509 Q1914636 movement of people between relatively distant ... \n", - "Q93352 Q468756 area where land meets the sea or ocean \n", - "Q98069877 Q49848 motion picture format \n", - "\n", - " Word 2 word2_kg_label \\\n", - "node1 node2 \n", - "Q192935 Q2095 food food \n", - "Q61509 Q1914636 activity activity \n", - "Q93352 Q468756 shore shore \n", - "Q98069877 Q49848 archive document \n", - "\n", - " word2_kg_description \\\n", - "node1 node2 \n", - "Q192935 Q2095 any substance consumed to provide nutritional ... \n", - "Q61509 Q1914636 event; actions that result in changes of state \n", - "Q93352 Q468756 fringe of land at the edge of a large body of ... \n", - "Q98069877 Q49848 preserved information \n", - "\n", - " Human (Mean) complex transe text class \n", - "node1 node2 \n", - "Q192935 Q2095 6.8750 0.531331 0.467495 0.664127 0.565204 \n", - "Q61509 Q1914636 4.1875 0.400234 0.638347 0.682683 0.136251 \n", - "Q93352 Q468756 8.2755 0.604508 0.628945 0.859171 0.539750 \n", - "Q98069877 Q49848 3.4375 0.530936 0.260283 0.679086 0.649235 " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3wordsimedMergedDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "reduced-treasury", - "metadata": {}, - "outputs": [], - "source": [ - "temp3wordsimedMergedDF = temp3wordsimedMergedDF.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "alike-killer", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4.745959043502808 s\n", - "0.3390045166015625 s\n" - ] - } - ], - "source": [ - "temp3wordsimedMergedDF['node1_emb'] = pd.Series(list(getSentEmbeddings(temp3wordsimedMergedDF.node1_label, 'bert-base-nli-mean-tokens')))\n", - "temp3wordsimedMergedDF['node2_emb'] = pd.Series(list(getSentEmbeddings(temp3wordsimedMergedDF.node2_label, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "surgical-victory", - "metadata": {}, - "outputs": [], - "source": [ - "temp3wordsimedMergedDF['bert2SentSim'] = temp3wordsimedMergedDF.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "id": "valued-disco", - "metadata": {}, - "outputs": [], - "source": [ - "# build gpt model\n", - "gpt_model = GPT2LMHeadModel.from_pretrained('gpt2')\n", - "gpt_tokenizer = GPT2Tokenizer.from_pretrained('gpt2')\n", - "\n", - "def gpt_score(sent1):\n", - " # input sentence tensor\n", - " # output score\n", - " tokens_tensor = gpt_tokenizer.encode(sent1, add_special_tokens=False, return_tensors=\"pt\")\n", - " loss = gpt_model(tokens_tensor, labels=tokens_tensor)[0]\n", - "# print(tokens_tensor.size(1))\n", - " return np.exp(loss.cpu().detach().numpy() / tokens_tensor.size(1))" - ] - }, - { - "cell_type": "code", - "execution_count": 174, - "id": "accepting-albuquerque", - "metadata": {}, - "outputs": [], - "source": [ - "temp3wordsimedMergedDF['gpt2Ppl'] = temp3wordsimedMergedDF.sent.apply(gpt_score)" - ] - }, - { - "cell_type": "code", - "execution_count": 175, - "id": "dedicated-paintball", - "metadata": {}, - "outputs": [], - "source": [ - "temp3wordsimedMergedDF['gpt2Ppl_normed'] = temp3wordsimedMergedDF['gpt2Ppl'].apply(lambda p: 1 / (1 + p))" - ] - }, - { - "cell_type": "code", - "execution_count": 176, - "id": "collaborative-resolution", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2idnode1_labellabelnode2_labelsentWord 1word1_kg_labelword1_kg_description...Human (Mean)complextransetextclassnode1_embnode2_embbert2SentSimgpt2Pplgpt2Ppl_normed
0Q192935Q2095Q192935-P279-Q2095-c9aba5ef-0seafoodP279foodseafood is foodseafoodseafoodfood from the sea, e.g. fish, shrimp, crab, mu......6.87500.5313310.4674950.6641270.565204[0.23942716, -0.5923174, 1.1605071, 0.01221862...[-0.143091, -0.18455797, 2.158043, 0.11467595,...0.7075663.3121160.231905
1Q61509Q1914636Q61509-P279-Q1914636-522de7b1-0travelP279activitytravel is activitytraveltravelmovement of people between relatively distant ......4.18750.4002340.6383470.6826830.136251[-0.056974184, -0.43726933, 2.6971796, 0.40128...[0.3885105, -1.4102317, 2.6005147, 0.70024395,...0.74353215.7430420.059726
2Q93352Q468756Q93352-P279-Q468756-18da9376-0coastP279shorecoast is shorecoastcoastarea where land meets the sea or ocean...8.27550.6045080.6289450.8591710.539750[0.18146253, -0.65918523, 2.4364007, -0.160515...[-0.22691835, -1.0949634, 2.380236, 0.05142845...0.8603668.6261380.103884
3Q98069877Q49848Q98069877-P279-Q49848-07219034-0videoP279documentvideo is documentvideovideomotion picture format...3.43750.5309360.2602830.6790860.649235[0.6363447, -0.42124, 2.4174998, 0.5520306, 0....[0.08141766, -0.42179188, 2.2739022, 0.4880786...0.68316122.0849060.043318
\n", - "

4 rows × 23 columns

\n", - "
" - ], - "text/plain": [ - " node1 node2 id node1_label label \\\n", - "0 Q192935 Q2095 Q192935-P279-Q2095-c9aba5ef-0 seafood P279 \n", - "1 Q61509 Q1914636 Q61509-P279-Q1914636-522de7b1-0 travel P279 \n", - "2 Q93352 Q468756 Q93352-P279-Q468756-18da9376-0 coast P279 \n", - "3 Q98069877 Q49848 Q98069877-P279-Q49848-07219034-0 video P279 \n", - "\n", - " node2_label sent Word 1 word1_kg_label \\\n", - "0 food seafood is food seafood seafood \n", - "1 activity travel is activity travel travel \n", - "2 shore coast is shore coast coast \n", - "3 document video is document video video \n", - "\n", - " word1_kg_description ... Human (Mean) \\\n", - "0 food from the sea, e.g. fish, shrimp, crab, mu... ... 6.8750 \n", - "1 movement of people between relatively distant ... ... 4.1875 \n", - "2 area where land meets the sea or ocean ... 8.2755 \n", - "3 motion picture format ... 3.4375 \n", - "\n", - " complex transe text class \\\n", - "0 0.531331 0.467495 0.664127 0.565204 \n", - "1 0.400234 0.638347 0.682683 0.136251 \n", - "2 0.604508 0.628945 0.859171 0.539750 \n", - "3 0.530936 0.260283 0.679086 0.649235 \n", - "\n", - " node1_emb \\\n", - "0 [0.23942716, -0.5923174, 1.1605071, 0.01221862... \n", - "1 [-0.056974184, -0.43726933, 2.6971796, 0.40128... \n", - "2 [0.18146253, -0.65918523, 2.4364007, -0.160515... \n", - "3 [0.6363447, -0.42124, 2.4174998, 0.5520306, 0.... \n", - "\n", - " node2_emb bert2SentSim gpt2Ppl \\\n", - "0 [-0.143091, -0.18455797, 2.158043, 0.11467595,... 0.707566 3.312116 \n", - "1 [0.3885105, -1.4102317, 2.6005147, 0.70024395,... 0.743532 15.743042 \n", - "2 [-0.22691835, -1.0949634, 2.380236, 0.05142845... 0.860366 8.626138 \n", - "3 [0.08141766, -0.42179188, 2.2739022, 0.4880786... 0.683161 22.084906 \n", - "\n", - " gpt2Ppl_normed \n", - "0 0.231905 \n", - "1 0.059726 \n", - "2 0.103884 \n", - "3 0.043318 \n", - "\n", - "[4 rows x 23 columns]" - ] - }, - "execution_count": 176, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3wordsimedMergedDF" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "studied-january", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.6666666666666669, pvalue=0.3333333333333333)" - ] - }, - "execution_count": 177, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(temp3wordsimedMergedDF['bert2SentSim'], temp3wordsimedMergedDF['Human (Mean)'])" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "id": "spiritual-andrews", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.7999999999999999, pvalue=0.20000000000000007)" - ] - }, - "execution_count": 178, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(temp3wordsimedMergedDF['bert2SentSim'], temp3wordsimedMergedDF['Human (Mean)'])" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "id": "silent-heath", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.6666666666666669, pvalue=0.3333333333333333)" - ] - }, - "execution_count": 179, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(temp3wordsimedMergedDF['gpt2Ppl_normed'], temp3wordsimedMergedDF['Human (Mean)'])" - ] - }, - { - "cell_type": "code", - "execution_count": 180, - "id": "banner-bleeding", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.7999999999999999, pvalue=0.20000000000000007)" - ] - }, - "execution_count": 180, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(temp3wordsimedMergedDF['gpt2Ppl_normed'], temp3wordsimedMergedDF['Human (Mean)'])" - ] - }, - { - "cell_type": "markdown", - "id": "married-alert", - "metadata": {}, - "source": [ - "## Extracting wordsim word pairs from wikidata P279 siblings dataset" - ] - }, - { - "cell_type": "markdown", - "id": "spoken-watershed", - "metadata": {}, - "source": [ - "### Generate new P279 siblings dataset from wordsim words subset" - ] - }, - { - "cell_type": "code", - "execution_count": 206, - "id": "positive-workshop", - "metadata": {}, - "outputs": [], - "source": [ - "from pytorch_pretrained_bert import BertTokenizer,BertForMaskedLM\n", - "import torch\n", - "import pandas as pd\n", - "import math" - ] - }, - { - "cell_type": "code", - "execution_count": 207, - "id": "impaired-correlation", - "metadata": {}, - "outputs": [], - "source": [ - "bertMaskedLM = BertForMaskedLM.from_pretrained('bert-base-uncased')" - ] - }, - { - "cell_type": "code", - "execution_count": 208, - "id": "modified-outreach", - "metadata": {}, - "outputs": [], - "source": [ - "berttokenizer = BertTokenizer.from_pretrained('bert-base-uncased')" - ] - }, - { - "cell_type": "code", - "execution_count": 211, - "id": "industrial-victory", - "metadata": {}, - "outputs": [], - "source": [ - "def bert_score(sentence):\n", - " tokenize_input = berttokenizer.tokenize(sentence)\n", - " tensor_input = torch.tensor([berttokenizer.convert_tokens_to_ids(tokenize_input)])\n", - " predictions=bertMaskedLM(tensor_input)\n", - " loss_fct = torch.nn.CrossEntropyLoss()\n", - " loss = loss_fct(predictions.squeeze(),tensor_input.squeeze()).data \n", - " return math.exp(loss / tensor_input.size(1))" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "chronic-accused", - "metadata": {}, - "outputs": [], - "source": [ - "P279wordsimed = temp3[temp3.node1.apply(lambda p: p in wordSimWordsSet)]" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "id": "intense-wonder", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "690" - ] - }, - "execution_count": 182, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(P279wordsimed)" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "id": "stopped-eligibility", - "metadata": {}, - "outputs": [], - "source": [ - "newPairLeftDF = P279wordsimed.copy()\n", - "newPairRightDF = P279wordsimed.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "id": "present-jordan", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF = newPairLeftDF.set_index('node2').join(newPairRightDF.set_index('node2'),rsuffix='_right').reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "blank-adelaide", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelsentid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightsent_right
0Q100171002Q1503443-P279-Q100171002-8282ae74-0Q1503443secrecyP279concealmentsecrecy is concealmentQ1503443-P279-Q100171002-8282ae74-0Q1503443secrecyP279concealmentsecrecy is concealment
1Q1002697Q49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodicalQ49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodical
2Q101998Q4421-P279-Q101998-d0983886-0Q4421forestP279biomeforest is biomeQ4421-P279-Q101998-d0983886-0Q4421forestP279biomeforest is biome
3Q102165Q2294-P279-Q102165-0893a180-0Q2294protonP279nucleonproton is nucleonQ2294-P279-Q102165-0893a180-0Q2294protonP279nucleonproton is nucleon
4Q102205Q11435-P279-Q102205-7b448d05-0Q11435liquidP279fluidliquid is fluidQ11435-P279-Q102205-7b448d05-0Q11435liquidP279fluidliquid is fluid
\n", - "
" - ], - "text/plain": [ - " node2 id node1 node1_label \\\n", - "0 Q100171002 Q1503443-P279-Q100171002-8282ae74-0 Q1503443 secrecy \n", - "1 Q1002697 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "2 Q101998 Q4421-P279-Q101998-d0983886-0 Q4421 forest \n", - "3 Q102165 Q2294-P279-Q102165-0893a180-0 Q2294 proton \n", - "4 Q102205 Q11435-P279-Q102205-7b448d05-0 Q11435 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " id_right node1_right node1_label_right \\\n", - "0 Q1503443-P279-Q100171002-8282ae74-0 Q1503443 secrecy \n", - "1 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "2 Q4421-P279-Q101998-d0983886-0 Q4421 forest \n", - "3 Q2294-P279-Q102165-0893a180-0 Q2294 proton \n", - "4 Q11435-P279-Q102205-7b448d05-0 Q11435 liquid \n", - "\n", - " label_right node2_label_right sent_right \n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid " - ] - }, - "execution_count": 185, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "id": "living-sigma", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF['set_nodes'] = newPairsDF.apply(lambda p: str(sorted([p.node1, p.node1_right]) + [p.node2]), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 187, - "id": "artificial-lawrence", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF1 = newPairsDF[~newPairsDF['set_nodes'].duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "id": "amended-graduate", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1340 statements get reduced to 1012 statements after checking for duplicate pairs\n" - ] - } - ], - "source": [ - "print(f\"{len(newPairsDF)} statements get reduced to {len(newPairsDF1)} statements after checking for duplicate pairs\")" - ] - }, - { - "cell_type": "code", - "execution_count": 189, - "id": "worth-albert", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelsentid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightsent_rightset_nodes
0Q100171002Q1503443-P279-Q100171002-8282ae74-0Q1503443secrecyP279concealmentsecrecy is concealmentQ1503443-P279-Q100171002-8282ae74-0Q1503443secrecyP279concealmentsecrecy is concealment['Q1503443', 'Q1503443', 'Q100171002']
1Q1002697Q49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodicalQ49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodical['Q49850', 'Q49850', 'Q1002697']
2Q101998Q4421-P279-Q101998-d0983886-0Q4421forestP279biomeforest is biomeQ4421-P279-Q101998-d0983886-0Q4421forestP279biomeforest is biome['Q4421', 'Q4421', 'Q101998']
3Q102165Q2294-P279-Q102165-0893a180-0Q2294protonP279nucleonproton is nucleonQ2294-P279-Q102165-0893a180-0Q2294protonP279nucleonproton is nucleon['Q2294', 'Q2294', 'Q102165']
4Q102205Q11435-P279-Q102205-7b448d05-0Q11435liquidP279fluidliquid is fluidQ11435-P279-Q102205-7b448d05-0Q11435liquidP279fluidliquid is fluid['Q11435', 'Q11435', 'Q102205']
\n", - "
" - ], - "text/plain": [ - " node2 id node1 node1_label \\\n", - "0 Q100171002 Q1503443-P279-Q100171002-8282ae74-0 Q1503443 secrecy \n", - "1 Q1002697 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "2 Q101998 Q4421-P279-Q101998-d0983886-0 Q4421 forest \n", - "3 Q102165 Q2294-P279-Q102165-0893a180-0 Q2294 proton \n", - "4 Q102205 Q11435-P279-Q102205-7b448d05-0 Q11435 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " id_right node1_right node1_label_right \\\n", - "0 Q1503443-P279-Q100171002-8282ae74-0 Q1503443 secrecy \n", - "1 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "2 Q4421-P279-Q101998-d0983886-0 Q4421 forest \n", - "3 Q2294-P279-Q102165-0893a180-0 Q2294 proton \n", - "4 Q11435-P279-Q102205-7b448d05-0 Q11435 liquid \n", - "\n", - " label_right node2_label_right sent_right \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " set_nodes \n", - "0 ['Q1503443', 'Q1503443', 'Q100171002'] \n", - "1 ['Q49850', 'Q49850', 'Q1002697'] \n", - "2 ['Q4421', 'Q4421', 'Q101998'] \n", - "3 ['Q2294', 'Q2294', 'Q102165'] \n", - "4 ['Q11435', 'Q11435', 'Q102205'] " - ] - }, - "execution_count": 189, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "id": "romance-trauma", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " newPairsDF1['comb_sent'] = newPairsDF1.apply(lambda p: p.node1_label + ' and ' + p.node1_label_right + ' are examples of ' + p.node2_label, axis=1)\n" - ] - } - ], - "source": [ - "# newPairsDF1['comb_sent'] = newPairsDF1.apply(lambda p: p.node2_label + ' such as ' + p.node1_label + ' and ' + p.node1_label_right, axis=1)\n", - "# newPairsDF1['comb_sent'] = newPairsDF1.apply(lambda p: p.node2_label + ' is typically ' + p.node1_label + ' or ' + p.node1_label_right, axis=1)\n", - "newPairsDF1['comb_sent'] = newPairsDF1.apply(lambda p: p.node1_label + ' and ' + p.node1_label_right + ' are examples of ' + p.node2_label, axis=1)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 223, - "id": "endangered-bacteria", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2idnode1node1_labellabelnode2_labelsentid_rightnode1_rightnode1_label_rightlabel_rightnode2_label_rightsent_rightset_nodescomb_sent
0Q100171002Q1503443-P279-Q100171002-8282ae74-0Q1503443secrecyP279concealmentsecrecy is concealmentQ1503443-P279-Q100171002-8282ae74-0Q1503443secrecyP279concealmentsecrecy is concealment['Q1503443', 'Q1503443', 'Q100171002']secrecy and secrecy are examples of concealment
1Q1002697Q49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodicalQ49850-P279-Q1002697-0c52cf68-0Q49850journalP279periodicaljournal is periodical['Q49850', 'Q49850', 'Q1002697']journal and journal are examples of periodical
2Q101998Q4421-P279-Q101998-d0983886-0Q4421forestP279biomeforest is biomeQ4421-P279-Q101998-d0983886-0Q4421forestP279biomeforest is biome['Q4421', 'Q4421', 'Q101998']forest and forest are examples of biome
3Q102165Q2294-P279-Q102165-0893a180-0Q2294protonP279nucleonproton is nucleonQ2294-P279-Q102165-0893a180-0Q2294protonP279nucleonproton is nucleon['Q2294', 'Q2294', 'Q102165']proton and proton are examples of nucleon
4Q102205Q11435-P279-Q102205-7b448d05-0Q11435liquidP279fluidliquid is fluidQ11435-P279-Q102205-7b448d05-0Q11435liquidP279fluidliquid is fluid['Q11435', 'Q11435', 'Q102205']liquid and liquid are examples of fluid
\n", - "
" - ], - "text/plain": [ - " node2 id node1 node1_label \\\n", - "0 Q100171002 Q1503443-P279-Q100171002-8282ae74-0 Q1503443 secrecy \n", - "1 Q1002697 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "2 Q101998 Q4421-P279-Q101998-d0983886-0 Q4421 forest \n", - "3 Q102165 Q2294-P279-Q102165-0893a180-0 Q2294 proton \n", - "4 Q102205 Q11435-P279-Q102205-7b448d05-0 Q11435 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " id_right node1_right node1_label_right \\\n", - "0 Q1503443-P279-Q100171002-8282ae74-0 Q1503443 secrecy \n", - "1 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal \n", - "2 Q4421-P279-Q101998-d0983886-0 Q4421 forest \n", - "3 Q2294-P279-Q102165-0893a180-0 Q2294 proton \n", - "4 Q11435-P279-Q102205-7b448d05-0 Q11435 liquid \n", - "\n", - " label_right node2_label_right sent_right \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " set_nodes \\\n", - "0 ['Q1503443', 'Q1503443', 'Q100171002'] \n", - "1 ['Q49850', 'Q49850', 'Q1002697'] \n", - "2 ['Q4421', 'Q4421', 'Q101998'] \n", - "3 ['Q2294', 'Q2294', 'Q102165'] \n", - "4 ['Q11435', 'Q11435', 'Q102205'] \n", - "\n", - " comb_sent \n", - "0 secrecy and secrecy are examples of concealment \n", - "1 journal and journal are examples of periodical \n", - "2 forest and forest are examples of biome \n", - "3 proton and proton are examples of nucleon \n", - "4 liquid and liquid are examples of fluid " - ] - }, - "execution_count": 223, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 224, - "id": "extra-monitor", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF2 = newPairsDF1[['node1', 'node2', 'node1_right', 'node1_label', 'node2_label', 'node1_label_right', 'sent', 'sent_right', 'comb_sent']]" - ] - }, - { - "cell_type": "code", - "execution_count": 225, - "id": "satisfactory-knock", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3 = newPairsDF2.rename(columns={'node1_right': 'node2', 'node2': 'parent', 'node1_label_right': 'node2_label', 'node2_label': 'par_label', 'sent': 'node1_sent', 'sent_right': 'node2_sent'})" - ] - }, - { - "cell_type": "code", - "execution_count": 226, - "id": "divided-reading", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1parentnode2node1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sent
0Q1503443Q100171002Q1503443secrecyconcealmentsecrecysecrecy is concealmentsecrecy is concealmentsecrecy and secrecy are examples of concealment
1Q49850Q1002697Q49850journalperiodicaljournaljournal is periodicaljournal is periodicaljournal and journal are examples of periodical
2Q4421Q101998Q4421forestbiomeforestforest is biomeforest is biomeforest and forest are examples of biome
3Q2294Q102165Q2294protonnucleonprotonproton is nucleonproton is nucleonproton and proton are examples of nucleon
4Q11435Q102205Q11435liquidfluidliquidliquid is fluidliquid is fluidliquid and liquid are examples of fluid
\n", - "
" - ], - "text/plain": [ - " node1 parent node2 node1_label par_label node2_label \\\n", - "0 Q1503443 Q100171002 Q1503443 secrecy concealment secrecy \n", - "1 Q49850 Q1002697 Q49850 journal periodical journal \n", - "2 Q4421 Q101998 Q4421 forest biome forest \n", - "3 Q2294 Q102165 Q2294 proton nucleon proton \n", - "4 Q11435 Q102205 Q11435 liquid fluid liquid \n", - "\n", - " node1_sent node2_sent \\\n", - "0 secrecy is concealment secrecy is concealment \n", - "1 journal is periodical journal is periodical \n", - "2 forest is biome forest is biome \n", - "3 proton is nucleon proton is nucleon \n", - "4 liquid is fluid liquid is fluid \n", - "\n", - " comb_sent \n", - "0 secrecy and secrecy are examples of concealment \n", - "1 journal and journal are examples of periodical \n", - "2 forest and forest are examples of biome \n", - "3 proton and proton are examples of nucleon \n", - "4 liquid and liquid are examples of fluid " - ] - }, - "execution_count": 226, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 227, - "id": "demanding-latter", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3wordsimed = newPairsDF3.set_index(['node1', 'node2']).join(wordSimDF.rename(columns={'word1_kg_id': 'node1', 'word2_kg_id': 'node2'}).set_index(['node1', 'node2']))" - ] - }, - { - "cell_type": "code", - "execution_count": 228, - "id": "blessed-story", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3wordsimed = newPairsDF3wordsimed.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 229, - "id": "prerequisite-spoke", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3wordsimed = newPairsDF3wordsimed[newPairsDF3wordsimed.apply(lambda p: (p.node1, p.node2) in wordSimWordPairsSet, axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 230, - "id": "upset-multiple", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3wordsimed = newPairsDF3wordsimed[newPairsDF3wordsimed.apply(lambda p: p.node1 != p.node2, axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 231, - "id": "associate-digest", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3wordsimed = newPairsDF3wordsimed.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 232, - "id": "several-supply", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "9" - ] - }, - "execution_count": 232, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(newPairsDF3wordsimed)" - ] - }, - { - "cell_type": "code", - "execution_count": 233, - "id": "textile-thousand", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.11620402336120605 s\n", - "0.14222192764282227 s\n" - ] - } - ], - "source": [ - "newPairsDF3wordsimed['node1_emb'] = pd.Series(list(getSentEmbeddings(newPairsDF3wordsimed.node1_sent, 'bert-base-nli-mean-tokens')))\n", - "newPairsDF3wordsimed['node2_emb'] = pd.Series(list(getSentEmbeddings(newPairsDF3wordsimed.node2_sent, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 234, - "id": "first-fifteen", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexnode1node2parentnode1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sent...Word 2word2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclassnode1_embnode2_emb
05Q1074Q7364Q24060765skinanimal organeyeskin is animal organeye is animal organskin and eye are examples of animal organ...eyeeyeorgan that detects light and converts it into ...2.75000.5007690.4858790.6114960.541116[0.72735953, -0.5447348, 0.95869535, 0.6319232...[0.755933, 0.04024082, 0.9340492, 0.41963616, ...
112Q1079023Q500834Q13406554championshipsports competitiontournamentchampionship is sports competitiontournament is sports competitionchampionship and tournament are examples of sp......tournamenttournamentcompetition involving a relatively large numbe...7.50000.6048820.6280380.8389090.899429[0.083933495, 0.082726024, 1.7943382, 0.518000...[0.53537947, -0.30064347, 2.2253025, 0.4019227...
247Q11399Q8341Q373342rock musicpopular musicjazzrock music is popular musicjazz is popular musicrock music and jazz are examples of popular music...jazzjazzmusical style, genre, and theory5.50000.7783660.4240960.5667540.935759[0.113906465, -0.3389766, 0.10356339, 0.254968...[-0.10467594, -0.56408674, 0.6394385, -0.28194...
3127Q12097Q16511993Q116kingmonarchqueenking is monarchqueen is monarchking and queen are examples of monarch...queenqueenclass of female monarch5.68750.6643460.6990620.7180370.894225[0.5253047, 0.57659674, 1.4201468, 0.8925513, ...[0.26084498, 0.3714701, 1.3805685, 0.7634336, ...
4182Q1308677Q21171241Q1190554deploymentoccurrencedeparturedeployment is occurrencedeparture is occurrencedeployment and departure are examples of occur......departuredepartureact of departing or something that has departed5.50000.2995400.2258390.4963310.030801[0.26534072, -0.9580938, 2.5264893, 0.30084807...[-0.32454324, -1.2765993, 2.5993214, 0.3582288...
\n", - "

5 rows × 23 columns

\n", - "
" - ], - "text/plain": [ - " index node1 node2 parent node1_label par_label \\\n", - "0 5 Q1074 Q7364 Q24060765 skin animal organ \n", - "1 12 Q1079023 Q500834 Q13406554 championship sports competition \n", - "2 47 Q11399 Q8341 Q373342 rock music popular music \n", - "3 127 Q12097 Q16511993 Q116 king monarch \n", - "4 182 Q1308677 Q21171241 Q1190554 deployment occurrence \n", - "\n", - " node2_label node1_sent \\\n", - "0 eye skin is animal organ \n", - "1 tournament championship is sports competition \n", - "2 jazz rock music is popular music \n", - "3 queen king is monarch \n", - "4 departure deployment is occurrence \n", - "\n", - " node2_sent \\\n", - "0 eye is animal organ \n", - "1 tournament is sports competition \n", - "2 jazz is popular music \n", - "3 queen is monarch \n", - "4 departure is occurrence \n", - "\n", - " comb_sent ... Word 2 \\\n", - "0 skin and eye are examples of animal organ ... eye \n", - "1 championship and tournament are examples of sp... ... tournament \n", - "2 rock music and jazz are examples of popular music ... jazz \n", - "3 king and queen are examples of monarch ... queen \n", - "4 deployment and departure are examples of occur... ... departure \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 eye organ that detects light and converts it into ... \n", - "1 tournament competition involving a relatively large numbe... \n", - "2 jazz musical style, genre, and theory \n", - "3 queen class of female monarch \n", - "4 departure act of departing or something that has departed \n", - "\n", - " Human (Mean) complex transe text class \\\n", - "0 2.7500 0.500769 0.485879 0.611496 0.541116 \n", - "1 7.5000 0.604882 0.628038 0.838909 0.899429 \n", - "2 5.5000 0.778366 0.424096 0.566754 0.935759 \n", - "3 5.6875 0.664346 0.699062 0.718037 0.894225 \n", - "4 5.5000 0.299540 0.225839 0.496331 0.030801 \n", - "\n", - " node1_emb \\\n", - "0 [0.72735953, -0.5447348, 0.95869535, 0.6319232... \n", - "1 [0.083933495, 0.082726024, 1.7943382, 0.518000... \n", - "2 [0.113906465, -0.3389766, 0.10356339, 0.254968... \n", - "3 [0.5253047, 0.57659674, 1.4201468, 0.8925513, ... \n", - "4 [0.26534072, -0.9580938, 2.5264893, 0.30084807... \n", - "\n", - " node2_emb \n", - "0 [0.755933, 0.04024082, 0.9340492, 0.41963616, ... \n", - "1 [0.53537947, -0.30064347, 2.2253025, 0.4019227... \n", - "2 [-0.10467594, -0.56408674, 0.6394385, -0.28194... \n", - "3 [0.26084498, 0.3714701, 1.3805685, 0.7634336, ... \n", - "4 [-0.32454324, -1.2765993, 2.5993214, 0.3582288... \n", - "\n", - "[5 rows x 23 columns]" - ] - }, - "execution_count": 234, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF3wordsimed.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 235, - "id": "heard-subscriber", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3wordsimed['bert2SentSim'] = newPairsDF3wordsimed.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 236, - "id": "norman-replica", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3wordsimed['gpt2Ppl'] = newPairsDF3wordsimed.comb_sent.apply(gpt_score)" - ] - }, - { - "cell_type": "code", - "execution_count": 237, - "id": "integrated-climate", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3wordsimed['gpt2Ppl_normed'] = newPairsDF3wordsimed['gpt2Ppl'].apply(lambda p: 1 / (1 + p))" - ] - }, - { - "cell_type": "code", - "execution_count": 238, - "id": "modern-irish", - "metadata": {}, - "outputs": [], - "source": [ - "newPairsDF3wordsimed['bert_ppl'] = newPairsDF3wordsimed.comb_sent.apply(bert_score)\n", - "newPairsDF3wordsimed['bert_ppl_normed'] = newPairsDF3wordsimed['bert_ppl'].apply(lambda p: 1 / (1+p))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "hispanic-thailand", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 239, - "id": "digital-family", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.3924956554446995" - ] - }, - "execution_count": 239, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "1 / (1 + bert_score('animal organ such as skin and continent'))" - ] - }, - { - "cell_type": "code", - "execution_count": 240, - "id": "practical-debate", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexnode1node2parentnode1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sent...transetextclassnode1_embnode2_embbert2SentSimgpt2Pplgpt2Ppl_normedbert_pplbert_ppl_normed
05Q1074Q7364Q24060765skinanimal organeyeskin is animal organeye is animal organskin and eye are examples of animal organ...0.4858790.6114960.541116[0.72735953, -0.5447348, 0.95869535, 0.6319232...[0.755933, 0.04024082, 0.9340492, 0.41963616, ...0.8559392.0350880.3294802.0647500.326291
112Q1079023Q500834Q13406554championshipsports competitiontournamentchampionship is sports competitiontournament is sports competitionchampionship and tournament are examples of sp......0.6280380.8389090.899429[0.083933495, 0.082726024, 1.7943382, 0.518000...[0.53537947, -0.30064347, 2.2253025, 0.4019227...0.8915401.7454130.3642441.4067440.415499
247Q11399Q8341Q373342rock musicpopular musicjazzrock music is popular musicjazz is popular musicrock music and jazz are examples of popular music...0.4240960.5667540.935759[0.113906465, -0.3389766, 0.10356339, 0.254968...[-0.10467594, -0.56408674, 0.6394385, -0.28194...0.6480351.6964210.3708621.4651250.405659
3127Q12097Q16511993Q116kingmonarchqueenking is monarchqueen is monarchking and queen are examples of monarch...0.6990620.7180370.894225[0.5253047, 0.57659674, 1.4201468, 0.8925513, ...[0.26084498, 0.3714701, 1.3805685, 0.7634336, ...0.8655482.3092540.3021831.4121100.414575
4182Q1308677Q21171241Q1190554deploymentoccurrencedeparturedeployment is occurrencedeparture is occurrencedeployment and departure are examples of occur......0.2258390.4963310.030801[0.26534072, -0.9580938, 2.5264893, 0.30084807...[-0.32454324, -1.2765993, 2.5993214, 0.3582288...0.7509431.9776210.3358391.7385800.365153
5580Q289Q872Q15078788televisionbroadcastingradiotelevision is broadcastingradio is broadcastingtelevision and radio are examples of broadcasting...0.5021570.7588090.475667[1.1445429, -0.7258359, 1.4580723, 0.4434381, ...[0.56205714, -0.253638, 1.5891607, 0.01657881,...0.5553051.8801430.3472052.1046900.322093
6666Q374Q959362Q56139vodkaliquorginvodka is liquorgin is liquorvodka and gin are examples of liquor...0.7140100.8276550.915257[-0.06934731, 0.106110536, 0.46463186, 0.45913...[-0.019106973, 0.14095607, 0.63778424, 0.74826...0.8983371.9703350.3366621.8103700.355825
7848Q58893412Q846570Q215627JapanesepersonAmericansJapanese is personAmericans is personJapanese and Americans are examples of person...0.5013140.5899880.905763[-0.30371594, -0.29769143, -0.008753488, 0.090...[-0.35450095, -0.107045874, 0.46675515, 0.1212...0.6643952.2078570.3117351.7994100.357218
8849Q58893412Q846570Q2472587JapanesepeopleAmericansJapanese is peopleAmericans is peopleJapanese and Americans are examples of people...0.5013140.5899880.905763[-0.050824374, -0.25418323, -0.12348578, -0.00...[-0.05350799, -0.10230911, 0.53688955, -0.0150...0.6284511.8831960.3468371.8280210.353604
\n", - "

9 rows × 28 columns

\n", - "
" - ], - "text/plain": [ - " index node1 node2 parent node1_label par_label \\\n", - "0 5 Q1074 Q7364 Q24060765 skin animal organ \n", - "1 12 Q1079023 Q500834 Q13406554 championship sports competition \n", - "2 47 Q11399 Q8341 Q373342 rock music popular music \n", - "3 127 Q12097 Q16511993 Q116 king monarch \n", - "4 182 Q1308677 Q21171241 Q1190554 deployment occurrence \n", - "5 580 Q289 Q872 Q15078788 television broadcasting \n", - "6 666 Q374 Q959362 Q56139 vodka liquor \n", - "7 848 Q58893412 Q846570 Q215627 Japanese person \n", - "8 849 Q58893412 Q846570 Q2472587 Japanese people \n", - "\n", - " node2_label node1_sent \\\n", - "0 eye skin is animal organ \n", - "1 tournament championship is sports competition \n", - "2 jazz rock music is popular music \n", - "3 queen king is monarch \n", - "4 departure deployment is occurrence \n", - "5 radio television is broadcasting \n", - "6 gin vodka is liquor \n", - "7 Americans Japanese is person \n", - "8 Americans Japanese is people \n", - "\n", - " node2_sent \\\n", - "0 eye is animal organ \n", - "1 tournament is sports competition \n", - "2 jazz is popular music \n", - "3 queen is monarch \n", - "4 departure is occurrence \n", - "5 radio is broadcasting \n", - "6 gin is liquor \n", - "7 Americans is person \n", - "8 Americans is people \n", - "\n", - " comb_sent ... transe text \\\n", - "0 skin and eye are examples of animal organ ... 0.485879 0.611496 \n", - "1 championship and tournament are examples of sp... ... 0.628038 0.838909 \n", - "2 rock music and jazz are examples of popular music ... 0.424096 0.566754 \n", - "3 king and queen are examples of monarch ... 0.699062 0.718037 \n", - "4 deployment and departure are examples of occur... ... 0.225839 0.496331 \n", - "5 television and radio are examples of broadcasting ... 0.502157 0.758809 \n", - "6 vodka and gin are examples of liquor ... 0.714010 0.827655 \n", - "7 Japanese and Americans are examples of person ... 0.501314 0.589988 \n", - "8 Japanese and Americans are examples of people ... 0.501314 0.589988 \n", - "\n", - " class node1_emb \\\n", - "0 0.541116 [0.72735953, -0.5447348, 0.95869535, 0.6319232... \n", - "1 0.899429 [0.083933495, 0.082726024, 1.7943382, 0.518000... \n", - "2 0.935759 [0.113906465, -0.3389766, 0.10356339, 0.254968... \n", - "3 0.894225 [0.5253047, 0.57659674, 1.4201468, 0.8925513, ... \n", - "4 0.030801 [0.26534072, -0.9580938, 2.5264893, 0.30084807... \n", - "5 0.475667 [1.1445429, -0.7258359, 1.4580723, 0.4434381, ... \n", - "6 0.915257 [-0.06934731, 0.106110536, 0.46463186, 0.45913... \n", - "7 0.905763 [-0.30371594, -0.29769143, -0.008753488, 0.090... \n", - "8 0.905763 [-0.050824374, -0.25418323, -0.12348578, -0.00... \n", - "\n", - " node2_emb bert2SentSim gpt2Ppl \\\n", - "0 [0.755933, 0.04024082, 0.9340492, 0.41963616, ... 0.855939 2.035088 \n", - "1 [0.53537947, -0.30064347, 2.2253025, 0.4019227... 0.891540 1.745413 \n", - "2 [-0.10467594, -0.56408674, 0.6394385, -0.28194... 0.648035 1.696421 \n", - "3 [0.26084498, 0.3714701, 1.3805685, 0.7634336, ... 0.865548 2.309254 \n", - "4 [-0.32454324, -1.2765993, 2.5993214, 0.3582288... 0.750943 1.977621 \n", - "5 [0.56205714, -0.253638, 1.5891607, 0.01657881,... 0.555305 1.880143 \n", - "6 [-0.019106973, 0.14095607, 0.63778424, 0.74826... 0.898337 1.970335 \n", - "7 [-0.35450095, -0.107045874, 0.46675515, 0.1212... 0.664395 2.207857 \n", - "8 [-0.05350799, -0.10230911, 0.53688955, -0.0150... 0.628451 1.883196 \n", - "\n", - " gpt2Ppl_normed bert_ppl bert_ppl_normed \n", - "0 0.329480 2.064750 0.326291 \n", - "1 0.364244 1.406744 0.415499 \n", - "2 0.370862 1.465125 0.405659 \n", - "3 0.302183 1.412110 0.414575 \n", - "4 0.335839 1.738580 0.365153 \n", - "5 0.347205 2.104690 0.322093 \n", - "6 0.336662 1.810370 0.355825 \n", - "7 0.311735 1.799410 0.357218 \n", - "8 0.346837 1.828021 0.353604 \n", - "\n", - "[9 rows x 28 columns]" - ] - }, - "execution_count": 240, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "newPairsDF3wordsimed" - ] - }, - { - "cell_type": "code", - "execution_count": 241, - "id": "naked-birth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.45732956038002354, pvalue=0.09169028154942921)" - ] - }, - "execution_count": 241, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(newPairsDF3wordsimed['bert2SentSim'], newPairsDF3wordsimed['Human (Mean)'])" - ] - }, - { - "cell_type": "code", - "execution_count": 242, - "id": "announced-median", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.6218706970438532, pvalue=0.0737649506248493)" - ] - }, - "execution_count": 242, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(newPairsDF3wordsimed['bert2SentSim'], newPairsDF3wordsimed['Human (Mean)'])" - ] - }, - { - "cell_type": "code", - "execution_count": 243, - "id": "dominican-botswana", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.5716619504750294, pvalue=0.035014981019662494)" - ] - }, - "execution_count": 243, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(newPairsDF3wordsimed['bert_ppl_normed'], newPairsDF3wordsimed['Human (Mean)'])" - ] - }, - { - "cell_type": "code", - "execution_count": 244, - "id": "ranking-valentine", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.6975036196572949, pvalue=0.036722324744514964)" - ] - }, - "execution_count": 244, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(newPairsDF3wordsimed['bert_ppl_normed'], newPairsDF3wordsimed['Human (Mean)'])" - ] - }, - { - "cell_type": "code", - "execution_count": 245, - "id": "sealed-motion", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.22866478019001177, pvalue=0.3990751965482373)" - ] - }, - "execution_count": 245, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(newPairsDF3wordsimed['gpt2Ppl_normed'], newPairsDF3wordsimed['Human (Mean)'])" - ] - }, - { - "cell_type": "code", - "execution_count": 246, - "id": "median-palestine", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.2773207162492859, pvalue=0.4700126440526218)" - ] - }, - "execution_count": 246, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(newPairsDF3wordsimed['gpt2Ppl_normed'], newPairsDF3wordsimed['Human (Mean)'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cleared-appreciation", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "magnetic-incentive", - "metadata": {}, - "source": [ - "## Creating wordsim word pairs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "silent-march", - "metadata": {}, - "outputs": [], - "source": [ - "P279wordsimed.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "infinite-steering", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "environmental-interim", - "metadata": {}, - "outputs": [], - "source": [ - "sentMapper = {node: sent for (node, sent) in zip(P279wordsimed.node1.to_list(), P279wordsimed.sent.to_list())}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "horizontal-james", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF['word1_sent'] = wordSimDF.word1_kg_id.apply(lambda p: sentMapper[p] if p in sentMapper else None)\n", - "wordSimDF['word2_sent'] = wordSimDF.word2_kg_id.apply(lambda p: sentMapper[p] if p in sentMapper else None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "global-cooking", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF.word1_sent.isna().sum(), wordSimDF.word2_sent.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "alive-safety", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF1 = wordSimDF[~wordSimDF.word1_sent.isna() & ~wordSimDF.word2_sent.isna()].reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "standing-engineering", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF1['word1_emb'] = pd.Series(list(getSentEmbeddings(wordSimDF1.word1_sent, 'bert-base-nli-mean-tokens')))\n", - "wordSimDF1['word2_emb'] = pd.Series(list(getSentEmbeddings(wordSimDF1.word2_sent, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "italic-subscriber", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF1['bertChildParSim'] = wordSimDF1.apply(lambda p: cosine_similarity(p.word1_emb.reshape(1,-1), p.word2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "linear-mother", - "metadata": {}, - "outputs": [], - "source": [ - "len(wordSimDF1)" - ] - }, - { - "cell_type": "markdown", - "id": "built-ordinance", - "metadata": {}, - "source": [ - "# Wordsim words seed based extraction from Wordsim 353 - Amandeep's file" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "distant-declaration", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.utils.random import sample_without_replacement" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "confirmed-overhead", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimDF = pd.read_csv(\"../data/wordsim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "chubby-table", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "common-making", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "349" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "photographic-doctrine", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimWordPairsSet = set(wordSimDF.apply(lambda p: (p.word1_kg_id, p.word2_kg_id), axis=1).tolist())\n", - "wordSimWordsSet = set(wordSimDF.word1_kg_id.tolist() + wordSimDF.word2_kg_id.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "suspended-flooring", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "422" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSimWordsSet)" - ] - }, - { - "cell_type": "markdown", - "id": "material-sessions", - "metadata": {}, - "source": [ - "## P279 Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "nutritional-brazil", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1node1_labellabelnode2node2_labelsent
1Q17372279-P279-Q100026-beba8cd1-0Q17372279YF-16P279Q100026F-16 Fighting FalconYF-16 is F-16 Fighting Falcon
2Q17372377-P279-Q100026-fd42bd71-0Q17372377F-16A/B Fighting FalconP279Q100026F-16 Fighting FalconF-16A/B Fighting Falcon is F-16 Fighting Falcon
3Q17372444-P279-Q100026-ca0fc4bd-0Q17372444F-16C/D Fighting FalconP279Q100026F-16 Fighting FalconF-16C/D Fighting Falcon is F-16 Fighting Falcon
4Q17372455-P279-Q100026-c2b1bf36-0Q17372455F-16E/F Desert FalconP279Q100026F-16 Fighting FalconF-16E/F Desert Falcon is F-16 Fighting Falcon
5Q2029940-P279-Q100026-ceba4380-0Q2029940F-16 VISTAP279Q100026F-16 Fighting FalconF-16 VISTA is F-16 Fighting Falcon
\n", - "
" - ], - "text/plain": [ - " id node1 node1_label \\\n", - "1 Q17372279-P279-Q100026-beba8cd1-0 Q17372279 YF-16 \n", - "2 Q17372377-P279-Q100026-fd42bd71-0 Q17372377 F-16A/B Fighting Falcon \n", - "3 Q17372444-P279-Q100026-ca0fc4bd-0 Q17372444 F-16C/D Fighting Falcon \n", - "4 Q17372455-P279-Q100026-c2b1bf36-0 Q17372455 F-16E/F Desert Falcon \n", - "5 Q2029940-P279-Q100026-ceba4380-0 Q2029940 F-16 VISTA \n", - "\n", - " label node2 node2_label \\\n", - "1 P279 Q100026 F-16 Fighting Falcon \n", - "2 P279 Q100026 F-16 Fighting Falcon \n", - "3 P279 Q100026 F-16 Fighting Falcon \n", - "4 P279 Q100026 F-16 Fighting Falcon \n", - "5 P279 Q100026 F-16 Fighting Falcon \n", - "\n", - " sent \n", - "1 YF-16 is F-16 Fighting Falcon \n", - "2 F-16A/B Fighting Falcon is F-16 Fighting Falcon \n", - "3 F-16C/D Fighting Falcon is F-16 Fighting Falcon \n", - "4 F-16E/F Desert Falcon is F-16 Fighting Falcon \n", - "5 F-16 VISTA is F-16 Fighting Falcon " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "satisfactory-profile", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "620830" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(temp3)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "casual-dublin", - "metadata": {}, - "outputs": [], - "source": [ - "def filter1(row):\n", - " return row.node1 in wordSimWordsSet or row.node2 in wordSimWordsSet" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "advised-photography", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF = temp3[temp3.apply(filter1, axis=1)]\n", - "# p279WordSimSeededDF = temp3[temp3.apply(filter1, axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "alien-davis", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using our wordsim seed of size 422, we are using the dataset of 620830 having P279 relations and both nodes having a label. This dataset gets reduced to a size of 19454\n" - ] - } - ], - "source": [ - "print(f\"Using our wordsim seed of size {len(wordSimWordsSet)}, we are using the dataset of {len(temp3)} having P279 relations and both nodes having a label. This dataset gets reduced to a size of {len(p279WordSimSeededDF)}\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "sacred-egyptian", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1node1_labellabelnode2node2_labelsent
160Q1503443-P279-Q100171002-8282ae74-0Q1503443secrecyP279Q100171002concealmentsecrecy is concealment
211Q49850-P279-Q1002697-0c52cf68-0Q49850journalP279Q1002697periodicaljournal is periodical
3495Q4421-P279-Q101998-d0983886-0Q4421forestP279Q101998biomeforest is biome
3827Q2294-P279-Q102165-0893a180-0Q2294protonP279Q102165nucleonproton is nucleon
4267Q11435-P279-Q102205-7b448d05-0Q11435liquidP279Q102205fluidliquid is fluid
\n", - "
" - ], - "text/plain": [ - " id node1 node1_label label \\\n", - "160 Q1503443-P279-Q100171002-8282ae74-0 Q1503443 secrecy P279 \n", - "211 Q49850-P279-Q1002697-0c52cf68-0 Q49850 journal P279 \n", - "3495 Q4421-P279-Q101998-d0983886-0 Q4421 forest P279 \n", - "3827 Q2294-P279-Q102165-0893a180-0 Q2294 proton P279 \n", - "4267 Q11435-P279-Q102205-7b448d05-0 Q11435 liquid P279 \n", - "\n", - " node2 node2_label sent \n", - "160 Q100171002 concealment secrecy is concealment \n", - "211 Q1002697 periodical journal is periodical \n", - "3495 Q101998 biome forest is biome \n", - "3827 Q102165 nucleon proton is nucleon \n", - "4267 Q102205 fluid liquid is fluid " - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "virgin-decrease", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19454" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p279WordSimSeededDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "nasty-ready", - "metadata": {}, - "outputs": [], - "source": [ - "p279S_Set = set(p279WordSimSeededDF.node1.to_list() + p279WordSimSeededDF.node2.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "breeding-egyptian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "front-theater", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "296" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimDF.apply(lambda p: p.word1_kg_id in p279S_Set and p.word2_kg_id in p279S_Set, axis=1).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "nearby-oakland", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF = p279WordSimSeededDF.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "coral-auction", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "passive-michigan", - "metadata": {}, - "outputs": [], - "source": [ - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "elegant-wiring", - "metadata": {}, - "outputs": [], - "source": [ - "# getSentEmbeddings('secrecy', 'bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "abroad-youth", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "15.729505062103271 s\n", - "6.890929937362671 s\n" - ] - } - ], - "source": [ - "p279WordSimSeededDF['node1_emb'] = pd.Series(list(getSentEmbeddings(p279WordSimSeededDF.node1_label, 'bert-base-nli-mean-tokens')))\n", - "p279WordSimSeededDF['node2_emb'] = pd.Series(list(getSentEmbeddings(p279WordSimSeededDF.node2_label, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "portuguese-yugoslavia", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF['bert2SentSim'] = p279WordSimSeededDF.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "expressed-ancient", - "metadata": {}, - "outputs": [], - "source": [ - "# from transformers import GPT2LMHeadModel, GPT2Tokenizer\n", - "# # build gpt model\n", - "# model = GPT2LMHeadModel.from_pretrained('gpt2')\n", - "# tokenizer = GPT2Tokenizer.from_pretrained('gpt2')\n", - "\n", - "# def gpt_score(sent1):\n", - "# # input sentence tensor\n", - "# # output score\n", - "# tokens_tensor = tokenizer.encode(sent1, add_special_tokens=False, return_tensors=\"pt\")\n", - "# loss = model(tokens_tensor, labels=tokens_tensor)[0]\n", - "# # print(tokens_tensor.size(1))\n", - "# return np.exp(loss.cpu().detach().numpy() / tokens_tensor.size(1))" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "lyric-cooperation", - "metadata": {}, - "outputs": [], - "source": [ - "# p279WordSimSeededDF['gpt2Ppl'] = p279WordSimSeededDF.sent.apply(gpt_score)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "regular-burton", - "metadata": {}, - "outputs": [], - "source": [ - "# p279WordSimSeededDF['gpt2Ppl_normed'] = p279WordSimSeededDF['gpt2Ppl'].apply(lambda p: 1/(1+p))" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "dominican-endorsement", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19454" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p279WordSimSeededDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "norwegian-relaxation", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF.to_csv('../data/P279_dataset/P279_19k_ChildPar_Dataset.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "capable-thermal", - "metadata": {}, - "outputs": [], - "source": [ - "# p279WordSimSeededDF.iloc[sample_without_replacement(len(p279WordSimSeededDF), 50, random_state=13)][['node1', 'node1_label', 'node2', 'node2_label']].to_csv('../data/output/P279Sim_Dataset.csv')" - ] - }, - { - "cell_type": "markdown", - "id": "enhanced-trash", - "metadata": {}, - "source": [ - "## P279 Siblings Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "retained-edwards", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_Siblings_left = p279WordSimSeededDF.copy()\n", - "p279WordSimSeededDF_Siblings_right = p279WordSimSeededDF.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "separate-basics", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF = p279WordSimSeededDF_Siblings_left.set_index('node2').join(p279WordSimSeededDF_Siblings_right.set_index('node2'),rsuffix='_right').reset_index()\n", - "p279Seeded_SiblingsDF['set_nodes'] = p279Seeded_SiblingsDF.apply(lambda p: str(sorted([p.node1, p.node1_right]) + [p.node2]), axis=1)\n", - "p279Seeded_SiblingsDF = p279Seeded_SiblingsDF[~p279Seeded_SiblingsDF['set_nodes'].duplicated()]\n", - "p279Seeded_SiblingsDF['comb_sent'] = p279Seeded_SiblingsDF.apply(lambda p: p.node2_label + ' is typically ' + p.node1_label + ' or ' + p.node1_label_right, axis=1)\n", - "p279Seeded_SiblingsDF1 = p279Seeded_SiblingsDF[['node1', 'node2', 'node1_right', 'node1_label', 'node2_label', 'node1_label_right', 'sent', 'sent_right', 'comb_sent']]\n", - "p279Seeded_SiblingsDF2 = p279Seeded_SiblingsDF1.rename(columns={'node1_right': 'node2', 'node2': 'parent', 'node1_label_right': 'node2_label', 'node2_label': 'par_label', 'sent': 'node1_sent', 'sent_right': 'node2_sent'})\n" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "adjusted-karaoke", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1parentnode2node1_labelpar_labelnode2_labelnode1_sentnode2_sentcomb_sent
0Q1503443Q100171002Q1503443secrecyconcealmentsecrecysecrecy is concealmentsecrecy is concealmentconcealment is typically secrecy or secrecy
1Q49850Q1002697Q49850journalperiodicaljournaljournal is periodicaljournal is periodicalperiodical is typically journal or journal
2Q4421Q101998Q4421forestbiomeforestforest is biomeforest is biomebiome is typically forest or forest
3Q2294Q102165Q2294protonnucleonprotonproton is nucleonproton is nucleonnucleon is typically proton or proton
4Q11435Q102205Q11435liquidfluidliquidliquid is fluidliquid is fluidfluid is typically liquid or liquid
\n", - "
" - ], - "text/plain": [ - " node1 parent node2 node1_label par_label node2_label \\\n", - "0 Q1503443 Q100171002 Q1503443 secrecy concealment secrecy \n", - "1 Q49850 Q1002697 Q49850 journal periodical journal \n", - "2 Q4421 Q101998 Q4421 forest biome forest \n", - "3 Q2294 Q102165 Q2294 proton nucleon proton \n", - "4 Q11435 Q102205 Q11435 liquid fluid liquid \n", - "\n", - " node1_sent node2_sent \\\n", - "0 secrecy is concealment secrecy is concealment \n", - "1 journal is periodical journal is periodical \n", - "2 forest is biome forest is biome \n", - "3 proton is nucleon proton is nucleon \n", - "4 liquid is fluid liquid is fluid \n", - "\n", - " comb_sent \n", - "0 concealment is typically secrecy or secrecy \n", - "1 periodical is typically journal or journal \n", - "2 biome is typically forest or forest \n", - "3 nucleon is typically proton or proton \n", - "4 fluid is typically liquid or liquid " - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Seeded_SiblingsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "growing-ethics", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF2 = p279Seeded_SiblingsDF2[p279Seeded_SiblingsDF2.node1 != p279Seeded_SiblingsDF2.node2]" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "selective-consideration", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "5948051" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p279Seeded_SiblingsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "binding-reason", - "metadata": {}, - "outputs": [], - "source": [ - "# p279Seeded_SiblingsDF2.iloc[sample_without_replacement(len(p279Seeded_SiblingsDF2), 250, random_state=13)][['node1', 'node1_label', 'node2', 'node2_label']].to_csv('../data/output/P279SiblingsSim_Dataset.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "sustainable-hughes", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def validateSeeders(row):\n", - " return not(row.node1 in wordSimWordsSet or row.node2 in wordSimWordsSet or row.parent in wordSimWordsSet)\n", - "p279Seeded_SiblingsDF2.apply(validateSeeders, axis=1).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "loaded-success", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3 = p279Seeded_SiblingsDF2.iloc[sample_without_replacement(len(p279Seeded_SiblingsDF2), len(p279WordSimSeededDF), random_state=13)]\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "tribal-absolute", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3 = p279Seeded_SiblingsDF3.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "democratic-island", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "7.479024887084961 s\n", - "7.432664394378662 s\n" - ] - } - ], - "source": [ - "p279Seeded_SiblingsDF3['node1_emb'] = pd.Series(list(getSentEmbeddings(p279Seeded_SiblingsDF3.node1_sent, 'bert-base-nli-mean-tokens')))\n", - "p279Seeded_SiblingsDF3['node2_emb'] = pd.Series(list(getSentEmbeddings(p279Seeded_SiblingsDF3.node2_sent, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "numerical-delicious", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3['bert2SentSim'] = p279Seeded_SiblingsDF3.apply(lambda p: cosine_similarity(p.node1_emb.reshape(1,-1), p.node2_emb.reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "seeing-manner", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19454" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p279Seeded_SiblingsDF3)" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "collectible-worry", - "metadata": {}, - "outputs": [], - "source": [ - "p279Seeded_SiblingsDF3.to_csv('../data/P279_dataset/P279_19k_Siblings_Dataset.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "special-combination", - "metadata": {}, - "outputs": [], - "source": [ - "# p279Seeded_SiblingsDF2['gpt2Ppl'] = p279Seeded_SiblingsDF2.comb_sent.apply(gpt_score)" - ] - }, - { - "cell_type": "markdown", - "id": "several-survey", - "metadata": {}, - "source": [ - "# Annotated P279s datasets" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "flexible-supplement", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "p279_ann_DF = pd.read_csv(\"../data/P279_dataset/P279Sim_annotated.csv\")\n", - "p279Sib_ann_DF = pd.read_csv(\"../data/P279_dataset/P279SiblingSim_annotated.csv\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "working-basics", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node1_labelnode2node2_labelSimDim
0Q48842375Asian Women\\'s Softball ChampionshipQ1079023championship2.0I
1Q8001434Wildlife of South AfricaQ104021fauna2.0I
2Q40189366interstellar radiation fieldQ11379energy2.0I
3Q2162453traditional political partyQ7278political party1.0I
4Q6786579materials physicsQ413physics2.0I
\n", - "
" - ], - "text/plain": [ - " node1 node1_label node2 node2_label \\\n", - "0 Q48842375 Asian Women\\'s Softball Championship Q1079023 championship \n", - "1 Q8001434 Wildlife of South Africa Q104021 fauna \n", - "2 Q40189366 interstellar radiation field Q11379 energy \n", - "3 Q2162453 traditional political party Q7278 political party \n", - "4 Q6786579 materials physics Q413 physics \n", - "\n", - " Sim Dim \n", - "0 2.0 I \n", - "1 2.0 I \n", - "2 2.0 I \n", - "3 1.0 I \n", - "4 2.0 I " - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279_ann_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "ahead-indonesia", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node1_labelnode2node2_labelSimDim
0Q4165229gainQ570938net income2S
1Q30461presidentQ48352head of state1S
2Q381072crisisQ3839081disaster1NaN
3Q39546toolQ7397software2H
4Q1400881propertyQ2574811cause4NaN
\n", - "
" - ], - "text/plain": [ - " node1 node1_label node2 node2_label Sim Dim\n", - "0 Q4165229 gain Q570938 net income 2 S\n", - "1 Q30461 president Q48352 head of state 1 S\n", - "2 Q381072 crisis Q3839081 disaster 1 NaN\n", - "3 Q39546 tool Q7397 software 2 H\n", - "4 Q1400881 property Q2574811 cause 4 NaN" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Sib_ann_DF.head()" - ] - }, - { - "cell_type": "markdown", - "id": "alpine-interval", - "metadata": {}, - "source": [ - "## P279 dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "ordered-teacher", - "metadata": {}, - "outputs": [], - "source": [ - "p279_ann_DF1 = p279_ann_DF.set_index(['node1', 'node2']).join(p279WordSimSeededDF.set_index(['node1', 'node2']), rsuffix='_og').reset_index().drop(columns=['node2_label_og', 'node1_label_og', 'label'])\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "parallel-jerusalem", - "metadata": {}, - "outputs": [], - "source": [ - "p279_ann_DF1 = p279_ann_DF1[~p279_ann_DF1.Sim.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "defensive-processor", - "metadata": {}, - "outputs": [], - "source": [ - "from pytorch_pretrained_bert import BertTokenizer,BertForMaskedLM\n", - "import torch\n", - "import pandas as pd\n", - "import math" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "committed-cyprus", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 407873900/407873900 [00:37<00:00, 11005250.37B/s]\n" - ] - } - ], - "source": [ - "bertMaskedLM = BertForMaskedLM.from_pretrained('bert-base-uncased')" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "alleged-malaysia", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 231508/231508 [00:00<00:00, 902966.47B/s]\n" - ] - } - ], - "source": [ - "tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "annual-lincoln", - "metadata": {}, - "outputs": [], - "source": [ - "def bert_score(sentence):\n", - " tokenize_input = tokenizer.tokenize(sentence)\n", - " tensor_input = torch.tensor([tokenizer.convert_tokens_to_ids(tokenize_input)])\n", - " predictions=bertMaskedLM(tensor_input)\n", - " loss_fct = torch.nn.CrossEntropyLoss()\n", - " loss = loss_fct(predictions.squeeze(),tensor_input.squeeze()).data \n", - " return math.exp(loss / tensor_input.size(1))" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "disturbed-omaha", - "metadata": {}, - "outputs": [], - "source": [ - "p279_ann_DF1['bert_ppl'] = p279_ann_DF1.sent.apply(get_gpt_score)\n", - "p279_ann_DF1['bert_ppl_normed'] = p279_ann_DF1['bert_ppl'].apply(lambda p: 4 - 3 / (1+p))" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "brief-mounting", - "metadata": {}, - "outputs": [], - "source": [ - "p279_ann_DF1['bert2SentSim'] = p279_ann_DF1['bert2SentSim'].apply(lambda p: 4 - p*3)\n", - "p279_ann_DF1['gpt2Ppl_normed'] = p279_ann_DF1['gpt2Ppl_normed'].apply(lambda p: 4 - p*3)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "renewable-magnet", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1node2node1_labelnode2_labelSimDimindexidsentnode1_embnode2_embbert2SentSimgpt2Pplgpt2Ppl_normedbert_pplbert_ppl_normed
0Q1125755Q11410Linux gaminggame2.0I29906.0Q1125755-P279-Q11410-c6c8e293-0Linux gaming is game[-0.38090447, -0.072453715, 1.0361495, -0.0768...[0.049388338, -0.96375394, 2.6406975, 0.740393...2.8028445.6291063.5474504.1261951.393231
1Q12097Q8441kingman4.0I689705.0Q12097-P279-Q8441-5aee777a-0king is man[0.39023998, 0.35056773, 1.8369316, 0.78192997...[0.30512533, -0.11468178, 2.2824647, 0.7221913...1.9079259.9256283.7254163.5143881.251559
2Q1262537Q17517dual SIMmobile phone3.0H189153.0Q1262537-P279-Q17517-5c20a786-0dual SIM is mobile phone[-0.2609788, -0.645304, 0.78149086, 0.5846581,...[0.18702456, 0.18690406, 1.2201738, -0.1322266...2.4853253.0249703.2546533.9491151.597018
3Q1362373Q16334298Cultigengroup of living things3.0I172384.0Q1362373-P279-Q16334298-91d03ec5-0Cultigen is group of living things[-0.2755343, -0.1904294, 1.8262575, 0.18963182...[1.1029037, 0.13540803, 1.1756531, 0.5193954, ...2.2911702.4115333.1206301.7496291.680036
4Q14328596Q11004cabbagevegetable2.0I20311.0Q14328596-P279-Q11004-4dce84cb-0cabbage is vegetable[-0.2028479, 0.33753565, 0.864861, -0.3964703,...[-0.24074318, -0.59905654, 1.2529583, 0.276870...1.6051598.3931723.68061916.2037551.288651
\n", - "
" - ], - "text/plain": [ - " node1 node2 node1_label node2_label Sim Dim \\\n", - "0 Q1125755 Q11410 Linux gaming game 2.0 I \n", - "1 Q12097 Q8441 king man 4.0 I \n", - "2 Q1262537 Q17517 dual SIM mobile phone 3.0 H \n", - "3 Q1362373 Q16334298 Cultigen group of living things 3.0 I \n", - "4 Q14328596 Q11004 cabbage vegetable 2.0 I \n", - "\n", - " index id \\\n", - "0 29906.0 Q1125755-P279-Q11410-c6c8e293-0 \n", - "1 689705.0 Q12097-P279-Q8441-5aee777a-0 \n", - "2 189153.0 Q1262537-P279-Q17517-5c20a786-0 \n", - "3 172384.0 Q1362373-P279-Q16334298-91d03ec5-0 \n", - "4 20311.0 Q14328596-P279-Q11004-4dce84cb-0 \n", - "\n", - " sent \\\n", - "0 Linux gaming is game \n", - "1 king is man \n", - "2 dual SIM is mobile phone \n", - "3 Cultigen is group of living things \n", - "4 cabbage is vegetable \n", - "\n", - " node1_emb \\\n", - "0 [-0.38090447, -0.072453715, 1.0361495, -0.0768... \n", - "1 [0.39023998, 0.35056773, 1.8369316, 0.78192997... \n", - "2 [-0.2609788, -0.645304, 0.78149086, 0.5846581,... \n", - "3 [-0.2755343, -0.1904294, 1.8262575, 0.18963182... \n", - "4 [-0.2028479, 0.33753565, 0.864861, -0.3964703,... \n", - "\n", - " node2_emb bert2SentSim gpt2Ppl \\\n", - "0 [0.049388338, -0.96375394, 2.6406975, 0.740393... 2.802844 5.629106 \n", - "1 [0.30512533, -0.11468178, 2.2824647, 0.7221913... 1.907925 9.925628 \n", - "2 [0.18702456, 0.18690406, 1.2201738, -0.1322266... 2.485325 3.024970 \n", - "3 [1.1029037, 0.13540803, 1.1756531, 0.5193954, ... 2.291170 2.411533 \n", - "4 [-0.24074318, -0.59905654, 1.2529583, 0.276870... 1.605159 8.393172 \n", - "\n", - " gpt2Ppl_normed bert_ppl bert_ppl_normed \n", - "0 3.547450 4.126195 1.393231 \n", - "1 3.725416 3.514388 1.251559 \n", - "2 3.254653 3.949115 1.597018 \n", - "3 3.120630 1.749629 1.680036 \n", - "4 3.680619 16.203755 1.288651 " - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279_ann_DF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "front-dance", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "lovely-fraction", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=-0.34042801211515844, pvalue=0.09588091799975365)" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(p279_ann_DF1.Sim, p279_ann_DF1.bert_ppl_normed)" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "pursuant-angel", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.04421700535669775, pvalue=0.8337702651869092)" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(p279_ann_DF1.Sim, p279_ann_DF1.bert2SentSim)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "african-standard", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.34042801211515844, pvalue=0.09588091799975365)" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(p279_ann_DF1.Sim, p279_ann_DF1.gpt2Ppl_normed)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "metric-essex", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "362px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/PyKeen Experiments.ipynb b/PyKeen Experiments.ipynb deleted file mode 100644 index 83ee2e9..0000000 --- a/PyKeen Experiments.ipynb +++ /dev/null @@ -1,455 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "armed-stewart", - "metadata": {}, - "outputs": [], - "source": [ - "from pykeen.pipeline import pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "frozen-compound", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "No random seed is specified. Setting to 3177612343.\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d77c3efdf45c4a1689aa9931034c9ccf", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Training epochs on cuda: 0%| | 0/5 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mrelation_to_id\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtraining\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrelation_to_id\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m )\n\u001b[0;32m---> 10\u001b[0;31m result = pipeline(\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtraining\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mtesting\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtesting\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pykeen/pipeline/api.py\u001b[0m in \u001b[0;36mpipeline\u001b[0;34m(dataset, dataset_kwargs, training, testing, validation, evaluation_entity_whitelist, evaluation_relation_whitelist, model, model_kwargs, interaction, interaction_kwargs, dimensions, loss, loss_kwargs, regularizer, regularizer_kwargs, optimizer, optimizer_kwargs, clear_optimizer, lr_scheduler, lr_scheduler_kwargs, training_loop, training_loop_kwargs, negative_sampler, negative_sampler_kwargs, epochs, training_kwargs, stopper, stopper_kwargs, evaluator, evaluator_kwargs, evaluation_kwargs, result_tracker, result_tracker_kwargs, metadata, device, random_seed, use_testing_data, evaluation_fallback, filter_validation_when_testing, use_tqdm)\u001b[0m\n\u001b[1;32m 919\u001b[0m \u001b[0;31m# TODO should kwargs for loss and regularizer be checked and raised for?\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 920\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 921\u001b[0;31m model_instance = _build_model_helper(\n\u001b[0m\u001b[1;32m 922\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 923\u001b[0m \u001b[0mmodel_kwargs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmodel_kwargs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pykeen/pipeline/api.py\u001b[0m in \u001b[0;36m_build_model_helper\u001b[0;34m(model, model_kwargs, loss, loss_kwargs, _device, _random_seed, regularizer, regularizer_kwargs, training_triples_factory)\u001b[0m\n\u001b[1;32m 642\u001b[0m \u001b[0mloss_instance\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mloss_resolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloss_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 643\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 644\u001b[0;31m return model_resolver.make(\n\u001b[0m\u001b[1;32m 645\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 646\u001b[0m \u001b[0mtriples_factory\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtraining_triples_factory\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/class_resolver/api.py\u001b[0m in \u001b[0;36mmake\u001b[0;34m(self, query, pos_kwargs, **kwargs)\u001b[0m\n\u001b[1;32m 255\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mType\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlookup\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mquery\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 256\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 257\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpos_kwargs\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 258\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 259\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m\"required keyword-only argument\"\u001b[0m \u001b[0;32min\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pykeen/models/unimodal/compgcn.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, triples_factory, embedding_dim, encoder_kwargs, interaction, interaction_kwargs, **kwargs)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;31m# combined representation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 69\u001b[0;31m entity_representations, relation_representations = CombinedCompGCNRepresentations(\n\u001b[0m\u001b[1;32m 70\u001b[0m \u001b[0mtriples_factory\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtriples_factory\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 71\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mencoder_kwargs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pykeen/nn/emb.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, triples_factory, embedding_specification, num_layers, dims, layer_kwargs)\u001b[0m\n\u001b[1;32m 944\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 945\u001b[0m \u001b[0;31m# TODO: Check\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 946\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0mtriples_factory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcreate_inverse_triples\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 947\u001b[0m self.entity_representations = embedding_specification.make(\n\u001b[1;32m 948\u001b[0m \u001b[0mnum_embeddings\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtriples_factory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnum_entities\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mAssertionError\u001b[0m: " - ] - } - ], - "source": [ - "from pykeen.triples import TriplesFactory\n", - "from pykeen.pipeline import pipeline\n", - "from pykeen.datasets.nations import NATIONS_TRAIN_PATH, NATIONS_TEST_PATH\n", - "training = TriplesFactory.from_path(NATIONS_TRAIN_PATH)\n", - "testing = TriplesFactory.from_path(\n", - " NATIONS_TEST_PATH,\n", - " entity_to_id=training.entity_to_id,\n", - " relation_to_id=training.relation_to_id,\n", - ")\n", - "result = pipeline(\n", - " training=training,\n", - " testing=testing,\n", - " model='CompGCN',\n", - " model_kwargs=dict(embedding_dim=2),\n", - " epochs=5, # short epochs for testing - you should go higher\n", - ")\n", - "result.save_to_directory('../data/pykeen_exp/test_pre_stratified_transe')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "pursuant-colors", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(100,)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result.model.entity_representations[0](indices=None).cpu().detach().numpy()[0].shape" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Retrofitting using 19k + 19k dataset REEXEC Reorganized.ipynb b/Retrofitting using 19k + 19k dataset REEXEC Reorganized.ipynb deleted file mode 100644 index 513c907..0000000 --- a/Retrofitting using 19k + 19k dataset REEXEC Reorganized.ipynb +++ /dev/null @@ -1,18134 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "dynamic-generator", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn.metrics.pairwise import euclidean_distances\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.metrics import confusion_matrix\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from tqdm.notebook import tqdm\n", - "from itertools import combinations\n", - "from math import comb\n", - "from sklearn.ensemble import RandomForestClassifier" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "strange-saturn", - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option('mode.chained_assignment', None)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "objective-saturday", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmbAndCosSim.csv\")\n", - "p279Seeded_SiblingsDF3_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmbAndCosSim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "joint-magnet", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1idnode1_labellabelnode2_labelsentnode1_embnode2_embbert2SentSim...BERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
0Q100171002Q1503443Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+...[ 3.61319035e-01 1.03393383e-01 1.50166345e+...0.901134...NaNNaN[0.87660795, 0.4991357, -0.39552155, 0.7046891...[0.36156428, -0.015657336, -0.14483449, -0.253...[0.79082793, 0.53679967, -0.3825465, 0.6778466...[0.36156428, -0.015657336, -0.14483449, -0.253...0.8326020.823419-1.000000-1.000000
1Q1002697Q49850Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+...[-2.23196611e-01 -4.97725368e-01 2.20271492e+...0.863449...[-0.28667202591896057, -0.4099476933479309, 0....[-0.25435054302215576, -0.92085862159729, 1.68...[1.256428, 0.3254261, -0.26960722, 0.101883665...[0.92698413, 0.32396156, -0.7647308, 0.6973268...[1.256428, 0.3254261, -0.26960722, 0.101883665...[1.0344226, 0.39984593, -0.76180136, 0.8256311...0.7426380.734428-1.000000-1.000000
2Q101998Q4421Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+...[ 5.09670794e-01 -4.42380428e-01 1.53245163e+...0.507148...[0.12320789694786072, 0.2723684310913086, 0.05...[0.5991100072860718, 0.15195603668689728, 0.59...[0.8141036, 0.14491142, -0.59703183, 0.335001,...[-0.16750671, -0.17960861, -0.58211946, -0.687...[0.91628444, 0.104261845, -0.49683735, 0.21296...[-0.13534825, -0.23398273, -0.5165668, -0.7297...0.6470310.7076110.5080600.455747
3Q102165Q2294Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+...[-6.87960759e-02 -1.65659860e-01 9.53789592e-...0.798707...[0.17410606145858765, 0.6839145421981812, -0.8...[-0.04499293863773346, 0.6921464204788208, -0....[0.469377, 0.7162001, -0.36740896, 0.76742333,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...[0.4080446, 0.7498908, -0.2665757, 0.74437106,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...0.8365310.8475910.8559590.770030
4Q102205Q11435Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+...[ 1.30038410e-01 -8.53226840e-01 2.37821031e+...0.934246...[0.4393930733203888, 0.7159943580627441, 0.647...[0.5091343522071838, -0.05845202878117561, 1.0...[-0.19995248, 0.65605164, -0.14234662, 0.43931...[0.4293771, 1.1976917, 0.04422909, 0.5975481, ...[-0.45549682, 0.73478854, -0.1980287, 0.436793...[0.33631665, 1.1661042, 0.13744242, 0.6776439,...0.7655890.7803420.7526930.515319
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 id node1_label \\\n", - "0 Q100171002 Q1503443 Q1503443-P279-Q100171002-8282ae74-0 secrecy \n", - "1 Q1002697 Q49850 Q49850-P279-Q1002697-0c52cf68-0 journal \n", - "2 Q101998 Q4421 Q4421-P279-Q101998-d0983886-0 forest \n", - "3 Q102165 Q2294 Q2294-P279-Q102165-0893a180-0 proton \n", - "4 Q102205 Q11435 Q11435-P279-Q102205-7b448d05-0 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " node1_emb \\\n", - "0 [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " node2_emb bert2SentSim ... \\\n", - "0 [ 3.61319035e-01 1.03393383e-01 1.50166345e+... 0.901134 ... \n", - "1 [-2.23196611e-01 -4.97725368e-01 2.20271492e+... 0.863449 ... \n", - "2 [ 5.09670794e-01 -4.42380428e-01 1.53245163e+... 0.507148 ... \n", - "3 [-6.87960759e-02 -1.65659860e-01 9.53789592e-... 0.798707 ... \n", - "4 [ 1.30038410e-01 -8.53226840e-01 2.37821031e+... 0.934246 ... \n", - "\n", - " BERT_abstract_emb_right \\\n", - "0 NaN \n", - "1 [-0.28667202591896057, -0.4099476933479309, 0.... \n", - "2 [0.12320789694786072, 0.2723684310913086, 0.05... \n", - "3 [0.17410606145858765, 0.6839145421981812, -0.8... \n", - "4 [0.4393930733203888, 0.7159943580627441, 0.647... \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 [-0.25435054302215576, -0.92085862159729, 1.68... \n", - "2 [0.5991100072860718, 0.15195603668689728, 0.59... \n", - "3 [-0.04499293863773346, 0.6921464204788208, -0.... \n", - "4 [0.5091343522071838, -0.05845202878117561, 1.0... \n", - "\n", - " textEmb_7props_left \\\n", - "0 [0.87660795, 0.4991357, -0.39552155, 0.7046891... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.8141036, 0.14491142, -0.59703183, 0.335001,... \n", - "3 [0.469377, 0.7162001, -0.36740896, 0.76742333,... \n", - "4 [-0.19995248, 0.65605164, -0.14234662, 0.43931... \n", - "\n", - " textEmb_7props_right \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... \n", - "1 [0.92698413, 0.32396156, -0.7647308, 0.6973268... \n", - "2 [-0.16750671, -0.17960861, -0.58211946, -0.687... \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... \n", - "4 [0.4293771, 1.1976917, 0.04422909, 0.5975481, ... \n", - "\n", - " textEmb_2props_left \\\n", - "0 [0.79082793, 0.53679967, -0.3825465, 0.6778466... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.91628444, 0.104261845, -0.49683735, 0.21296... \n", - "3 [0.4080446, 0.7498908, -0.2665757, 0.74437106,... \n", - "4 [-0.45549682, 0.73478854, -0.1980287, 0.436793... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... 0.832602 \n", - "1 [1.0344226, 0.39984593, -0.76180136, 0.8256311... 0.742638 \n", - "2 [-0.13534825, -0.23398273, -0.5165668, -0.7297... 0.647031 \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... 0.836531 \n", - "4 [0.33631665, 1.1661042, 0.13744242, 0.6776439,... 0.765589 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \n", - "0 0.823419 -1.000000 -1.000000 \n", - "1 0.734428 -1.000000 -1.000000 \n", - "2 0.707611 0.508060 0.455747 \n", - "3 0.847591 0.855959 0.770030 \n", - "4 0.780342 0.752693 0.515319 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "random-france", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.602876\n", - "std 0.146181\n", - "min 0.064503\n", - "25% 0.493110\n", - "50% 0.597949\n", - "75% 0.711631\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "incorporated-ambassador", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['node2', 'node1', 'id', 'node1_label', 'label', 'node2_label', 'sent',\n", - " 'node1_emb', 'node2_emb', 'bert2SentSim', 'abstract',\n", - " 'abstract_firstSent', 'BERT_abstract_emb',\n", - " 'BERT_abstract_firstSent_emb', 'abstract_right',\n", - " 'abstract_firstSent_right', 'BERT_abstract_emb_right',\n", - " 'BERT_abstract_firstSent_emb_right', 'textEmb_7props_left',\n", - " 'textEmb_7props_right', 'textEmb_2props_left', 'textEmb_2props_right',\n", - " 'textEmb_7props_cosSim', 'textEmb_2props_cosSim',\n", - " 'BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim'],\n", - " dtype='object')" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "original-grass", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.772184\n", - "std 0.122326\n", - "min 0.120480\n", - "25% 0.684141\n", - "50% 0.793718\n", - "75% 0.874284\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279Seeded_SiblingsDF3_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "under-rabbit", - "metadata": {}, - "source": [ - "# Embeddings Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "annoying-intake", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## Complex, Transe Embeddings Datasets generation" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "tamil-activity", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353LatestAnnot.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "immune-nashville", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "residential-cleaners", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "current-great", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_id
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id \n", - "0 Q454 \n", - "1 Q13648784 \n", - "2 Q178022 \n", - "3 Q21004260 \n", - "4 Q49112 " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "valued-progressive", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# wordSimSet = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "different-vancouver", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSimSet = set(p279WordSimSeededDF_wabs_text.node1.to_list() + p279WordSimSeededDF_wabs_text.node2.to_list() + p279Seeded_SiblingsDF3_wabs_text.node1.to_list() + p279Seeded_SiblingsDF3_wabs_text.node2.to_list() + wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quick-lewis", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "19166" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "collected-regular", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1499717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64763437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17144564\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4765290\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16000518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6423382\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2177259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q100448831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2857578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13577338\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q96158854\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7892\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29053864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7675683\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2380954\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77527200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21083881\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q211521\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66368425\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16023742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q97627995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16721350\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q32979618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4553362\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q98232491\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66194218\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5372\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42559432\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25481995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61466331\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6983403\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84105477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11002\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30107768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56753514\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91927989\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12047900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2144951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11698973\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q517386\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17097928\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5281737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27983054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19838691\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q101541623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17376918\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5193377\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23013268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66363580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55693905\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68131879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85803433\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29053744\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82785806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21406831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29957548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78710574\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6462051\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1042920\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7925\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56297152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2515879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28324850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28132458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2849391\n" - ] - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "compEmbeddings = {}\n", - "transeEmbeddings = {}\n", - "\n", - "for wordID in wordSimSet:\n", - " try:\n", - " resp = requests.get(\"http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID).json()['_source']\n", - " compEmbeddings[wordID] = resp['graph_embedding_complex']\n", - " transeEmbeddings[wordID] = resp['graph_embeddings_transe']\n", - " except:\n", - " print(\"Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "elect-gothic", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.DataFrame(compEmbeddings.items(), columns=['node', 'complex_embedding']).to_csv('../data/wordsim353_complex_embeddings.csv', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "combined-theme", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.DataFrame(transeEmbeddings.items(), columns=['node', 'transe_embedding']).to_csv('../data/wordsim353_transe_embeddings.csv', index=False)" - ] - }, - { - "cell_type": "markdown", - "id": "suffering-extraction", - "metadata": {}, - "source": [ - "# Basis Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "hairy-tuition", - "metadata": {}, - "source": [ - "## Probase Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "opened-quarter", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = pd.read_csv('../data/probase/probase_WQnodes_subset_and_sim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "major-peter", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0node1_labelnode2_labelno_of_relationsnode1_qnodenode2_qnoden1_final_qnoden2_final_qnodesim
00factorage35167NaNNaNQ15061738Q1003432191.000000
15factorgender14230NaNQ48277Q15061738Q482770.913568
26factortemperature13660NaNNaNQ15061738P20760.909663
37metalcopper11142Q11426NaNQ11426Q158305000.890199
49variableage9375NaNNaNQ10954303Q1003432190.873703
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 node1_label node2_label no_of_relations node1_qnode \\\n", - "0 0 factor age 35167 NaN \n", - "1 5 factor gender 14230 NaN \n", - "2 6 factor temperature 13660 NaN \n", - "3 7 metal copper 11142 Q11426 \n", - "4 9 variable age 9375 NaN \n", - "\n", - " node2_qnode n1_final_qnode n2_final_qnode sim \n", - "0 NaN Q15061738 Q100343219 1.000000 \n", - "1 Q48277 Q15061738 Q48277 0.913568 \n", - "2 NaN Q15061738 P2076 0.909663 \n", - "3 NaN Q11426 Q15830500 0.890199 \n", - "4 NaN Q10954303 Q100343219 0.873703 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "photographic-character", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset = probDF_Qnodes_DF_WQnodes1_subset.rename(columns={'n1_final_qnode': 'node1', 'n2_final_qnode': 'node2', 'sim': 'bert2SentSim'})" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "russian-proceeding", - "metadata": {}, - "outputs": [], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim'] = 0.5 + 0.5 * probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim']" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "painted-selection", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 1.600841e+06\n", - "mean 5.429549e-01\n", - "std 5.363352e-02\n", - "min 5.000000e-01\n", - "25% 5.000000e-01\n", - "50% 5.331083e-01\n", - "75% 5.662167e-01\n", - "max 1.000000e+00\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probDF_Qnodes_DF_WQnodes1_subset['bert2SentSim'].describe()" - ] - }, - { - "cell_type": "markdown", - "id": "alpine-portsmouth", - "metadata": {}, - "source": [ - "## 19k+19k dataset with class similarity scores generation" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "id": "sublime-girlfriend", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "classSim = []\n", - "\n", - "for _, row in tqdm(p279WordSimSeededDF_wabs_text.iterrows()):\n", - " resp = requests.get(\"https://dsbox02.isi.edu:8888/qnode-similarity?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['bert2SentSim'] = float(resp) if resp else -1\n", - " classSim.append(row)" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "id": "optional-bracelet", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ff86112887254e7f950c4586072a22f5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "for _, row in tqdm(p279Seeded_SiblingsDF3_wabs_text.iterrows()):\n", - " resp = requests.get(\"https://dsbox02.isi.edu:8888/qnode-similarity?q1=\"+row['node1']+\"&q2=\"+row['node2']+\"&embedding_type=class\").json()['similarity']\n", - " row['bert2SentSim'] = float(resp) if resp else -1\n", - " classSim.append(row)" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "interior-yield", - "metadata": {}, - "outputs": [], - "source": [ - "classSimT = []\n", - "for class1 in classSim:\n", - " classSimT.append(pd.DataFrame(class1).transpose())" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "id": "single-ethiopia", - "metadata": {}, - "outputs": [], - "source": [ - "classSimDF = pd.concat(classSimT, ignore_index=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "stuck-formation", - "metadata": {}, - "outputs": [], - "source": [ - "classSimDF['bert2SentSim'] = classSimDF.bert2SentSim.astype(float)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "enclosed-plenty", - "metadata": {}, - "outputs": [], - "source": [ - "classSimDF.loc[classSimDF['bert2SentSim'] == -1, ['bert2SentSim']] = 0.621981" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "public-thesis", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 38790.000000\n", - "mean 0.621981\n", - "std 0.248664\n", - "min -0.035900\n", - "25% 0.426818\n", - "50% 0.720367\n", - "75% 0.840006\n", - "max 0.985841\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 135, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "classSimDF[classSimDF['bert2SentSim'] != -1]['bert2SentSim'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "becoming-thomson", - "metadata": {}, - "outputs": [], - "source": [ - "max1 = classSimDF['bert2SentSim'].max()\n", - "min1 = classSimDF['bert2SentSim'].min()\n", - "classSimDF['bert2SentSim'] = classSimDF['bert2SentSim'].apply(lambda p: (p - min1) / (max1 - min1))" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "coastal-edition", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1idnode1_labellabelnode2_labelsentnode1_embnode2_embbert2SentSim...textEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSimparentpar_labelnode1_sentnode2_sentcomb_sent
0Q100171002Q1503443Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+...[ 3.61319035e-01 1.03393383e-01 1.50166345e+...0.840243...[0.36156428, -0.015657336, -0.14483449, -0.253...0.8326020.823419-1.0-1.0NaNNaNNaNNaNNaN
1Q1002697Q49850Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+...[-2.23196611e-01 -4.97725368e-01 2.20271492e+...0.672269...[1.0344226, 0.39984593, -0.76180136, 0.8256311...0.7426380.734428-1.0-1.0NaNNaNNaNNaNNaN
2Q101998Q4421Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+...[ 5.09670794e-01 -4.42380428e-01 1.53245163e+...0.613978...[-0.13534825, -0.23398273, -0.5165668, -0.7297...0.6470310.7076110.508060.455747NaNNaNNaNNaNNaN
3Q102165Q2294Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+...[-6.87960759e-02 -1.65659860e-01 9.53789592e-...0.798362...[-0.11307852, 0.65730673, -0.13959256, 1.46633...0.8365310.8475910.8559590.77003NaNNaNNaNNaNNaN
4Q102205Q11435Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+...[ 1.30038410e-01 -8.53226840e-01 2.37821031e+...0.320911...[0.33631665, 1.1661042, 0.13744242, 0.6776439,...0.7655890.7803420.7526930.515319NaNNaNNaNNaNNaN
\n", - "

5 rows × 31 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 id node1_label \\\n", - "0 Q100171002 Q1503443 Q1503443-P279-Q100171002-8282ae74-0 secrecy \n", - "1 Q1002697 Q49850 Q49850-P279-Q1002697-0c52cf68-0 journal \n", - "2 Q101998 Q4421 Q4421-P279-Q101998-d0983886-0 forest \n", - "3 Q102165 Q2294 Q2294-P279-Q102165-0893a180-0 proton \n", - "4 Q102205 Q11435 Q11435-P279-Q102205-7b448d05-0 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " node1_emb \\\n", - "0 [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " node2_emb bert2SentSim ... \\\n", - "0 [ 3.61319035e-01 1.03393383e-01 1.50166345e+... 0.840243 ... \n", - "1 [-2.23196611e-01 -4.97725368e-01 2.20271492e+... 0.672269 ... \n", - "2 [ 5.09670794e-01 -4.42380428e-01 1.53245163e+... 0.613978 ... \n", - "3 [-6.87960759e-02 -1.65659860e-01 9.53789592e-... 0.798362 ... \n", - "4 [ 1.30038410e-01 -8.53226840e-01 2.37821031e+... 0.320911 ... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... 0.832602 \n", - "1 [1.0344226, 0.39984593, -0.76180136, 0.8256311... 0.742638 \n", - "2 [-0.13534825, -0.23398273, -0.5165668, -0.7297... 0.647031 \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... 0.836531 \n", - "4 [0.33631665, 1.1661042, 0.13744242, 0.6776439,... 0.765589 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \\\n", - "0 0.823419 -1.0 -1.0 \n", - "1 0.734428 -1.0 -1.0 \n", - "2 0.707611 0.50806 0.455747 \n", - "3 0.847591 0.855959 0.77003 \n", - "4 0.780342 0.752693 0.515319 \n", - "\n", - " parent par_label node1_sent node2_sent comb_sent \n", - "0 NaN NaN NaN NaN NaN \n", - "1 NaN NaN NaN NaN NaN \n", - "2 NaN NaN NaN NaN NaN \n", - "3 NaN NaN NaN NaN NaN \n", - "4 NaN NaN NaN NaN NaN \n", - "\n", - "[5 rows x 31 columns]" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "classSimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 143, - "id": "governing-detector", - "metadata": {}, - "outputs": [], - "source": [ - "classSimDF[:19454].to_csv('../data/P279_ChildPar_19k_WEmbAndClassSim.csv', index=None)\n", - "classSimDF[19454:].to_csv('../data/P279_Siblings_19k_WEmbAndClassSim.csv', index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "compact-bridges", - "metadata": {}, - "source": [ - "## 19k+19k dataset with class similarity scores fetch" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "nominated-blogger", - "metadata": {}, - "outputs": [], - "source": [ - "classSimTargetChildPar = pd.read_csv('../data/P279_ChildPar_19k_WEmbAndClassSim.csv')\n", - "classSimTargetSiblings = pd.read_csv('../data/P279_Siblings_19k_WEmbAndClassSim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "korean-guitar", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(classSimTargetSiblings['bert2SentSim'] == 0.5).sum()" - ] - }, - { - "cell_type": "markdown", - "id": "hundred-virus", - "metadata": {}, - "source": [ - "# Ground Truth Datasets" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "limited-hormone", - "metadata": {}, - "outputs": [], - "source": [ - "bioDF = pd.read_csv('../data/pedersen2007measures_table1.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "alien-happiness", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Term1Term1_kg_idTerm1_kg_labelTerm1_descriptionTerm2Term2_kg_idTerm2_kg_labelTerm2_descriptionPhysicianCoder
0Renal failureQ476921kidney failuredisease where the kidneys fail to adequately f...Kidney failureQ476921kidney failuredisease where the kidneys fail to adequately f...4.04.0
1HeartQ1072heartorgan for the circulation of blood in animal c...MyocardiumQ84133myocardiummiddle layer of the heart wall, which consists...3.33.0
2StrokeQ12202strokeproblem with the arteries supplying blood to t...InfarctQ207550infarctiontissue death caused by a local lack of oxygen,...3.02.8
3AbortionQ8452abortionintentional ending of a pregnancyMiscarriageQ28693miscarriagenatural death of an embryo or fetus before it ...3.03.3
4DelusionQ189643delusionfirm and fixed belief based on inadequate grou...SchizophreniaQ41112schizophreniapsychotic disorder characterized by emotional ...3.02.2
\n", - "
" - ], - "text/plain": [ - " Term1 Term1_kg_id Term1_kg_label \\\n", - "0 Renal failure Q476921 kidney failure \n", - "1 Heart Q1072 heart \n", - "2 Stroke Q12202 stroke \n", - "3 Abortion Q8452 abortion \n", - "4 Delusion Q189643 delusion \n", - "\n", - " Term1_description Term2 \\\n", - "0 disease where the kidneys fail to adequately f... Kidney failure \n", - "1 organ for the circulation of blood in animal c... Myocardium \n", - "2 problem with the arteries supplying blood to t... Infarct \n", - "3 intentional ending of a pregnancy Miscarriage \n", - "4 firm and fixed belief based on inadequate grou... Schizophrenia \n", - "\n", - " Term2_kg_id Term2_kg_label \\\n", - "0 Q476921 kidney failure \n", - "1 Q84133 myocardium \n", - "2 Q207550 infarction \n", - "3 Q28693 miscarriage \n", - "4 Q41112 schizophrenia \n", - "\n", - " Term2_description Physician Coder \n", - "0 disease where the kidneys fail to adequately f... 4.0 4.0 \n", - "1 middle layer of the heart wall, which consists... 3.3 3.0 \n", - "2 tissue death caused by a local lack of oxygen,... 3.0 2.8 \n", - "3 natural death of an embryo or fetus before it ... 3.0 3.3 \n", - "4 psychotic disorder characterized by emotional ... 3.0 2.2 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bioDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "parental-event", - "metadata": {}, - "outputs": [], - "source": [ - "bioDFNodesSet = set(bioDF.Term1_kg_id.to_list() + bioDF.Term2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "wicked-proportion", - "metadata": {}, - "outputs": [], - "source": [ - "P279childParNodesSet = set(p279WordSimSeededDF_wabs_text.node1.to_list() + p279WordSimSeededDF_wabs_text.node2.to_list())\n", - "P279siblingsNodesSet = set(p279Seeded_SiblingsDF3_wabs_text.node1.to_list() + p279Seeded_SiblingsDF3_wabs_text.node2.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "pediatric-tomato", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 1)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sum(bioDF.Term1_kg_id.apply(lambda p: p in P279childParNodesSet or p in P279siblingsNodesSet)), \\\n", - "sum(bioDF.Term2_kg_id.apply(lambda p: p in P279childParNodesSet or p in P279siblingsNodesSet))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "transparent-diversity", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(23, 25)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probaseNodesSet = set(probDF_Qnodes_DF_WQnodes1_subset.node1.to_list() + probDF_Qnodes_DF_WQnodes1_subset.node2.to_list())\n", - "\n", - "sum(bioDF.Term1_kg_id.apply(lambda p: p in probaseNodesSet)), \\\n", - "sum(bioDF.Term2_kg_id.apply(lambda p: p in probaseNodesSet))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "uniform-civilian", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "voluntary-logic", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "removed-occupation", - "metadata": {}, - "source": [ - "# Retrofitting Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "consolidated-investigation", - "metadata": {}, - "outputs": [], - "source": [ - "def normalize(embedDict):\n", - " for key, val in embedDict.items():\n", - " temp = np.array([float(val1) for val1 in val])\n", - " temp2 = temp**2\n", - " embedDict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - " return embedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "irish-disposal", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchEmbeddings(df):\n", - " embedDict = {}\n", - " for _, row in df.iterrows():\n", - " embedDict[row.node] = row.value\n", - " return normalize(embedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "orange-person", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchNeighbours(df):\n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row.bert2SentSim))\n", - " \n", - " if row.node2 not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row.bert2SentSim))\n", - " print(max([len(neigh) for neigh in neighboursDict.values()]))\n", - " return neighboursDict" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "joined-kazakhstan", - "metadata": {}, - "outputs": [], - "source": [ - "def retrofit(embedDict, neighDict, weightCase, weightAssignment=False):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - "# assert len(neighbs) == 1\n", - " if weightAssignment:\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " else:\n", - " sumOfSims = sum([1 for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] for neighb in neighbs])\n", - " \n", - " if weightCase == 1:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sumOfEmbs) / ((len(neighbs)) + sumOfSims)\n", - " elif weightCase == 2:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " elif weightCase == 0.5:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sumOfEmbs) / ((len(neighbs))**0.5 + sumOfSims)\n", - " else:\n", - " raise\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "collected-performance", - "metadata": {}, - "outputs": [], - "source": [ - "def determineDistances(embedDict, newEmbedDict):\n", - " dist = []\n", - " for word in embedDict.keys():\n", - " dist.append(euclidean_distances([embedDict[word]], [newEmbedDict[word]])[0][0])\n", - " return dist" - ] - }, - { - "cell_type": "markdown", - "id": "later-dimension", - "metadata": {}, - "source": [ - "# Attempts" - ] - }, - { - "cell_type": "markdown", - "id": "serious-milan", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## Sample attempt" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "substantial-aggregate", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text_sample = p279WordSimSeededDF_wabs_text[:1000]" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "id": "analyzed-passion", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "id": "japanese-defense", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "dying-nigeria", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "reduced-avenue", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1034" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "advised-hollywood", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "authentic-greene", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 1034.000000\n", - "mean 0.281990\n", - "std 0.054759\n", - "min 0.069792\n", - "25% 0.244698\n", - "50% 0.278019\n", - "75% 0.319656\n", - "max 0.450444\n", - "dtype: float64" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "variable-transportation", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## ChildPar dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "central-spyware", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "white-genesis", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "id": "registered-original", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "id": "experienced-conspiracy", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "18860" - ] - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "id": "every-interface", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 131, - "id": "specified-berry", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 18860.000000\n", - "mean 0.283712\n", - "std 0.056573\n", - "min 0.050719\n", - "25% 0.246137\n", - "50% 0.281897\n", - "75% 0.319687\n", - "max 0.564922\n", - "dtype: float64" - ] - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "incoming-calvin", - "metadata": {}, - "source": [ - "# Correlation Code" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "answering-exhaust", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import classification_report\n", - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - "LABELS = ['I','U','M']\n", - "def fetchCorrelationResults(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "# print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - "# wordSim353AnnotDF_New2 = wordSim353AnnotDF_New\n", - " wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - " wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - " responseDict = {}\n", - " responseDict['wordSimMissingSet'] = wordSimMissingSet\n", - " responseDict['coveredPairs'] = len(wordSim353AnnotDF_New2)\n", - " responseDict['totalPairs'] = len(wordSim353AnnotDF_New)\n", - " \n", - "# wordSimMissingSet\n", - "# print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0] if p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict else -1, axis=1)\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textOld'] == -1, 'textOld'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textOld'] != -1]['textOld'].mean()\n", - " wordSim353AnnotDF_New.loc[wordSim353AnnotDF_New['textNew'] == -1, 'textNew'] = wordSim353AnnotDF_New[wordSim353AnnotDF_New['textNew'] != -1]['textNew'].mean()\n", - " \n", - " # Logic 1: Scale min,max value to 1,4 strictly\n", - "# min1, max1 = wordSim353AnnotDF_New['textOld'].min(), wordSim353AnnotDF_New['textOld'].max()\n", - "# min2, max2 = wordSim353AnnotDF_New['textNew'].min(), wordSim353AnnotDF_New['textNew'].max()\n", - "# wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * (p - min1) / (max1 - min1))\n", - "# wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * (p - min2) / (max2 - min2))\n", - " \n", - " # Logic 2: Scale abs value to 1,4 strictly\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * abs(p))\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * abs(p))\n", - "\n", - " \n", - "# print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "# print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "# print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " \n", - "# print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - "# print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " responseDict['KT_old_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_new_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['Avg'])\n", - " responseDict['KT_old_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['KT_new_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['H_reversed'])\n", - " responseDict['old_acc'] = accuracy_score(wordSim353AnnotDF_New['textOld'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " responseDict['new_acc'] = accuracy_score(wordSim353AnnotDF_New['textNew'].apply(labelSamples), wordSim353AnnotDF_New['category'])\n", - " \n", - " responseDict['class_rep_old'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), output_dict=True)\n", - " responseDict['class_rep_new'] = classification_report(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), output_dict=True)\n", - " \n", - " cm_old = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textOld'].apply(labelSamples), labels=LABELS)\n", - " cm_new = confusion_matrix(wordSim353AnnotDF_New['category'], wordSim353AnnotDF_New['textNew'].apply(labelSamples), labels=LABELS)\n", - " \n", - " responseDict['cm_old'] = cm_old\n", - " responseDict['cm_new'] = cm_new\n", - " \n", - " return responseDict" - ] - }, - { - "cell_type": "markdown", - "id": "sacred-bacon", - "metadata": {}, - "source": [ - "# Dataset-Target Combinations" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "premier-crisis", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster = {}\n", - "newEmbedDictMaster = {}\n", - "confusionMatrixMaster = {}\n", - "neighDictMaster = {}\n", - "responsesDictMaster = {}" - ] - }, - { - "cell_type": "markdown", - "id": "previous-applicant", - "metadata": {}, - "source": [ - "## Input Datasets Processing and Parsing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "spoken-buying", - "metadata": {}, - "outputs": [], - "source": [ - "# Text 7 props Embeddings\n", - "textEmb_7props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-7-props-all.tsv', sep='\\t')\n", - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "embedDict = fetchEmbeddings(textEmb_7props_DF)\n", - "embedDictMaster['text_7props'] = embedDict\n", - "len(textEmb_7props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "closing-biotechnology", - "metadata": {}, - "outputs": [], - "source": [ - "# Text 2 props Embeddings\n", - "textEmb_2props_DF = pd.read_csv('../data/P279_dataset/output/P279-text-embedding-2-props-all.tsv', sep='\\t')\n", - "textEmb_2props_DF['value'] = textEmb_2props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "embedDict = fetchEmbeddings(textEmb_2props_DF)\n", - "embedDictMaster['text_2props'] = embedDict\n", - "len(textEmb_2props_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "oriented-brush", - "metadata": {}, - "outputs": [], - "source": [ - "# Complex Embeddings\n", - "compEmbeddingsDF = pd.read_csv('../data/wordsim353_complex_embeddings.csv')\n", - "compEmbeddingsDF['complex_embedding'] = compEmbeddingsDF['complex_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "compEmbeddings = {}\n", - "for _, row in compEmbeddingsDF.iterrows():\n", - " compEmbeddings[row['node']] = np.array(row['complex_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "absolute-brazil", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster['complex'] = normalize(compEmbeddings)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "transsexual-lender", - "metadata": {}, - "outputs": [], - "source": [ - "# Transe Embeddings\n", - "transeEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')\n", - "transeEmbeddingsDF['transe_embedding'] = transeEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "transeEmbeddings = {}\n", - "for _, row in transeEmbeddingsDF.iterrows():\n", - " transeEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "printable-trinity", - "metadata": {}, - "outputs": [], - "source": [ - "embedDictMaster['transe'] = normalize(transeEmbeddings)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "federal-conservation", - "metadata": {}, - "outputs": [], - "source": [ - "import re\n", - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "def getSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries)\n", - "# print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "narrative-security", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "choice-discipline", - "metadata": {}, - "outputs": [], - "source": [ - "descriptions = pd.read_csv('../../wd-correctness/gdrive-kgtk-dump-2020-12-07/descriptions.en.tsv.gz', compression='gzip', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "quick-insulin", - "metadata": {}, - "outputs": [], - "source": [ - "list_of_nodes = set(wordSim353AnnotDF_New.word1_kg_id.to_list() + wordSim353AnnotDF_New.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "objective-pendant", - "metadata": {}, - "outputs": [], - "source": [ - "descriptions1 = descriptions[descriptions.node1.apply(lambda p: p in list_of_nodes)]" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "headed-cheese", - "metadata": {}, - "outputs": [], - "source": [ - "desc_dict = {row['node1']: row['node2'][1:-4] for _, row in descriptions1.iterrows()}" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "mature-folder", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f13d01b193b1463fb947c4a1b0f71dcb", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/38908 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mneighDictMasterBKP\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdeepcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mneighDictMaster\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0membedDictMasterBKP\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdeepcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0membedDictMaster\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'neighDictMaster' is not defined" - ] - } - ], - "source": [ - "import copy\n", - "neighDictMasterBKP = copy.deepcopy(neighDictMaster)\n", - "embedDictMasterBKP = copy.deepcopy(embedDictMaster)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prepared-culture", - "metadata": {}, - "outputs": [], - "source": [ - "# import copy\n", - "# neighDictMaster = copy.deepcopy(neighDictMasterBKP)\n", - "# embedDictMaster = copy.deepcopy(embedDictMasterBKP)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "assisted-virtue", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d0deeddfa23149abb21e197b4dee3ea1", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/8 [00:00= 0, wordSim353AnnotDF_New['textOld'].min()\n", - "# assert wordSim353AnnotDF_New['textNew'].min() >= 0, wordSim353AnnotDF_New['textNew'].min()\n", - " wordSim353AnnotDF_New['textOld'] = wordSim353AnnotDF_New.textOld.apply(lambda p: 4 - 3 * (p - min1) / (max1 - min1))\n", - " wordSim353AnnotDF_New['textNew'] = wordSim353AnnotDF_New.textNew.apply(lambda p: 4 - 3 * (p - min2) / (max2 - min2))\n", - " wordSim353AnnotDF_New['old_class'] = wordSim353AnnotDF_New['textOld'].apply(labelSamples)\n", - " wordSim353AnnotDF_New['new_class'] = wordSim353AnnotDF_New['textNew'].apply(labelSamples)\n", - " wordSim353AnnotDF_New['retro_worked'] = ((wordSim353AnnotDF_New['new_class'] == wordSim353AnnotDF_New['category']) & (wordSim353AnnotDF_New['old_class'] != wordSim353AnnotDF_New['category']))\n", - " return wordSim353AnnotDF_New\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 215, - "id": "fatty-secretary", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = addColumnToGroundTruth(embedDictMaster['three_emb'], newEmbedDictMaster['three_emb_19k_2_class_1_weighted'])" - ] - }, - { - "cell_type": "code", - "execution_count": 219, - "id": "antique-moscow", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = addColumnToGroundTruth(embedDictMaster['six_emb'], newEmbedDictMaster['six_emb_19k_2_class_1_weighted'])" - ] - }, - { - "cell_type": "code", - "execution_count": 220, - "id": "defined-sense", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idWord 1word2_kg_idWord 2AvgcategorytextOldtextNewold_classnew_class
2Q8333FBIQ178022fingerprint3.6U3.2606383.557514MU
28Q5369baseballQ1539532season3.2M3.5845453.246840UM
41Q622821calculationQ12525525computation1.0I2.1731121.663656MI
47Q578centuryQ6266nation4.0U3.4557423.616025MU
56Q93352coastQ468756shore1.6I1.9259051.667819MI
57Q6881511companyQ1196314stock3.0M3.5081463.224211UM
126Q2095foodQ2216236rooster3.2M3.8287303.393004UM
133Q11410gameQ11499267defeat3.0M3.6998013.245156UM
170Q798505listingQ21146257category3.2M3.5545063.300242UM
173Q61864890lobsterQ282wine3.2M3.5340903.345835UM
190Q1368moneyQ693464cash1.0I1.9145541.497877MI
209Q132821murderQ3882220manslaughter1.6I2.0230821.646781MI
227Q17285planeQ1420car2.6M3.6465833.394859UM
295Q529711startQ577year3.4M3.5308993.088973UM
303Q79007streetQ7543083avenue1.4I2.5138241.561554MI
\n", - "
" - ], - "text/plain": [ - " word1_kg_id Word 1 word2_kg_id Word 2 Avg category \\\n", - "2 Q8333 FBI Q178022 fingerprint 3.6 U \n", - "28 Q5369 baseball Q1539532 season 3.2 M \n", - "41 Q622821 calculation Q12525525 computation 1.0 I \n", - "47 Q578 century Q6266 nation 4.0 U \n", - "56 Q93352 coast Q468756 shore 1.6 I \n", - "57 Q6881511 company Q1196314 stock 3.0 M \n", - "126 Q2095 food Q2216236 rooster 3.2 M \n", - "133 Q11410 game Q11499267 defeat 3.0 M \n", - "170 Q798505 listing Q21146257 category 3.2 M \n", - "173 Q61864890 lobster Q282 wine 3.2 M \n", - "190 Q1368 money Q693464 cash 1.0 I \n", - "209 Q132821 murder Q3882220 manslaughter 1.6 I \n", - "227 Q17285 plane Q1420 car 2.6 M \n", - "295 Q529711 start Q577 year 3.4 M \n", - "303 Q79007 street Q7543083 avenue 1.4 I \n", - "\n", - " textOld textNew old_class new_class \n", - "2 3.260638 3.557514 M U \n", - "28 3.584545 3.246840 U M \n", - "41 2.173112 1.663656 M I \n", - "47 3.455742 3.616025 M U \n", - "56 1.925905 1.667819 M I \n", - "57 3.508146 3.224211 U M \n", - "126 3.828730 3.393004 U M \n", - "133 3.699801 3.245156 U M \n", - "170 3.554506 3.300242 U M \n", - "173 3.534090 3.345835 U M \n", - "190 1.914554 1.497877 M I \n", - "209 2.023082 1.646781 M I \n", - "227 3.646583 3.394859 U M \n", - "295 3.530899 3.088973 U M \n", - "303 2.513824 1.561554 M I " - ] - }, - "execution_count": 220, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp1[temp1['retro_worked']][['word1_kg_id', 'Word 1', 'word2_kg_id', 'Word 2', 'Avg', 'category', 'textOld', 'textNew', 'old_class','new_class']]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "renewable-stylus", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "leading-frontier", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "extensive-forty", - "metadata": {}, - "source": [ - "## Confusion Matrices" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "maritime-director", - "metadata": {}, - "outputs": [], - "source": [ - "confusionMatrixMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "qualified-empty", - "metadata": {}, - "outputs": [], - "source": [ - "embedDict = embedDictMaster['text_7props_19k']\n", - "newEmbedDict = newEmbedDictMaster['text_7props_19k_2']\n", - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - "print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - "assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - "assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - "wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - "wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - "wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - "# wordSimMissingSet\n", - "print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n", - "print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - "print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - "\n", - "print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - "print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "id": "distinct-timothy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 210\n", - "U 101\n", - "I 20\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 154, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New2['category'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "antique-infrastructure", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.subplots(figsize=(20,20))\n", - "for num, key1 in enumerate(['text_7props_19k_old_2', 'text_7props_19k_new_2', 'text_2props_19k_old_2', 'text_2props_19k_new_2', \n", - " 'transe_19k_old_1', 'transe_19k_new_1', 'complex_19k_old_1', 'complex_19k_new_1']):\n", - " plt.subplot(4, 2, num+1)\n", - " sns.heatmap(pd.DataFrame(confusionMatrixMaster[key1], LABELS, LABELS), annot=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ahead-letters", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "micro-phrase", - "metadata": {}, - "source": [ - "# Save all embeddings and similarity scores" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "boring-campus", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDictMaster['concat_probase_19k_v1_2'] = newEmbedDictMaster['concat_probase_19k__v1_2']" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "automatic-update", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Length of wordsim dataset: 344\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d97162bbb58542999eb317ede34a3300", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.0067204430541292475, 0.008331487632641807, ...[-0.004515859562266559, -0.011723668837741234,...3.4683703.384407[0.006720440253943506, 0.00833148416118722, 0....[-0.0050116109222357935, -0.013383541509188317...[0.006720440253943506, 0.00833148416118722, 0....[-0.004971298302113362, -0.013254267455943004,...3.4683703.463734
1Arafatterror93D4NaN3U4...[0.0067204430541292475, 0.008331487632641807, ...[-0.004862257036458548, 0.014077170447753274, ...3.0355342.991152[0.006720440253943506, 0.00833148416118722, 0....[-0.005805280378137928, 0.015115419540555773, ...[0.006720440253943506, 0.00833148416118722, 0....[-0.004862255010517295, 0.01407716458226321, 0...3.0355342.991152
2FBIfingerprint1093D4NaN4NaN3...[0.006466897046995817, 0.014694837513784692, -...[0.01523113313292473, 0.005271417432183582, -0...2.9023562.850218[0.0064668943524542844, 0.014694831390933237, ...[0.013922101038066187, 0.0023911841962956006, ...[0.0064668943524542844, 0.014694831390933237, ...[0.01381456413075283, 0.0024352598782685863, -...2.9023562.895993
3FBIinvestigation1103U3U3U3...[0.006466897046995817, 0.014694837513784692, -...[0.013016090555331788, 0.01114268765690899, -0...2.9952062.962306[0.0064668943524542844, 0.014694831390933237, ...[0.013274960537868754, 0.010965634834463656, -...[0.0064668943524542844, 0.014694831390933237, ...[0.013242882478240212, 0.010953106140234146, -...2.9952062.993596
4HarvardYale1372S3S2S2...[0.01322626153814759, 0.005047111609608307, -0...[0.010410829355084429, 0.014776997941327313, -...1.6893151.689315[0.013226256027203037, 0.00504710950664428, -0...[0.010410825017237097, 0.01477699178424233, -0...[0.013226256027203037, 0.00504710950664428, -0...[0.010410825017237097, 0.01477699178424233, -0...1.6893151.689315
\n", - "

5 rows × 104 columns

\n", - "" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.0067204430541292475, 0.008331487632641807, ... \n", - "1 ... [0.0067204430541292475, 0.008331487632641807, ... \n", - "2 ... [0.006466897046995817, 0.014694837513784692, -... \n", - "3 ... [0.006466897046995817, 0.014694837513784692, -... \n", - "4 ... [0.01322626153814759, 0.005047111609608307, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859562266559, -0.011723668837741234,... 3.468370 \n", - "1 [-0.004862257036458548, 0.014077170447753274, ... 3.035534 \n", - "2 [0.01523113313292473, 0.005271417432183582, -0... 2.902356 \n", - "3 [0.013016090555331788, 0.01114268765690899, -0... 2.995206 \n", - "4 [0.010410829355084429, 0.014776997941327313, -... 1.689315 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.384407 \n", - "1 2.991152 \n", - "2 2.850218 \n", - "3 2.962306 \n", - "4 1.689315 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "1 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "2 [0.0064668943524542844, 0.014694831390933237, ... \n", - "3 [0.0064668943524542844, 0.014694831390933237, ... \n", - "4 [0.013226256027203037, 0.00504710950664428, -0... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.0050116109222357935, -0.013383541509188317... \n", - "1 [-0.005805280378137928, 0.015115419540555773, ... \n", - "2 [0.013922101038066187, 0.0023911841962956006, ... \n", - "3 [0.013274960537868754, 0.010965634834463656, -... \n", - "4 [0.010410825017237097, 0.01477699178424233, -0... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "1 [0.006720440253943506, 0.00833148416118722, 0.... \n", - "2 [0.0064668943524542844, 0.014694831390933237, ... \n", - "3 [0.0064668943524542844, 0.014694831390933237, ... \n", - "4 [0.013226256027203037, 0.00504710950664428, -0... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.004971298302113362, -0.013254267455943004,... \n", - "1 [-0.004862255010517295, 0.01407716458226321, 0... \n", - "2 [0.01381456413075283, 0.0024352598782685863, -... \n", - "3 [0.013242882478240212, 0.010953106140234146, -... \n", - "4 [0.010410825017237097, 0.01477699178424233, -0... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.468370 3.463734 \n", - "1 3.035534 2.991152 \n", - "2 2.902356 2.895993 \n", - "3 2.995206 2.993596 \n", - "4 1.689315 1.689315 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 212, - "id": "connected-limit", - "metadata": {}, - "outputs": [], - "source": [ - "cons_ann_3 = pd.read_csv('../data/consolidated_annotation_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 213, - "id": "trying-authorization", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2H_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversed
0toolimplement1NaN3U1NaN2i1NaN1.60.8945.3134.688
1arrangementaccommodation1NaN4NaN2I1NaN1NaN1.81.3045.1254.875
2woodforest3H1NaN1NaN1NaN3l1.81.0957.9382.063
3benchmarkindex2I2I2I4NaN4NaN2.81.0955.5004.500
4practiceinstitution2I3L,I3I3i3i2.80.4473.5636.438
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 tool implement 1 NaN 3 U 1 NaN 2 \n", - "1 arrangement accommodation 1 NaN 4 NaN 2 I 1 \n", - "2 wood forest 3 H 1 NaN 1 NaN 1 \n", - "3 benchmark index 2 I 2 I 2 I 4 \n", - "4 practice institution 2 I 3 L,I 3 I 3 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed \n", - "0 i 1 NaN 1.6 0.894 5.313 4.688 \n", - "1 NaN 1 NaN 1.8 1.304 5.125 4.875 \n", - "2 NaN 3 l 1.8 1.095 7.938 2.063 \n", - "3 NaN 4 NaN 2.8 1.095 5.500 4.500 \n", - "4 i 3 i 2.8 0.447 3.563 6.438 " - ] - }, - "execution_count": 213, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cons_ann_3.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "id": "political-laptop", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "15" - ] - }, - "execution_count": 222, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(cons_ann_3)" - ] - }, - { - "cell_type": "code", - "execution_count": 300, - "id": "improved-relaxation", - "metadata": {}, - "outputs": [], - "source": [ - "ca_cols = cons_ann_3.columns\n", - "for _,row in cons_ann_3.iterrows():\n", - "# if ((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])).sum() == 2:\n", - "# print(row['Word 1'], row['Word 2'])\n", - "# print(wordSim353AnnotDF_New_Merged_DF[((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2']))])\n", - "# print (((wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])).sum())\n", - " for col in ca_cols:\n", - " if col in ['Word 1', 'Word 2']:\n", - " continue\n", - " \n", - " wordSim353AnnotDF_New_Merged_DF.at[wordSim353AnnotDF_New_Merged_DF.index[(wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])], col] = row[col]\n", - "# print(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Word 1'] == row['Word 1']) & (wordSim353AnnotDF_New_Merged_DF['Word 2'] == row['Word 2'])][col])\n", - "# " - ] - }, - { - "cell_type": "code", - "execution_count": 301, - "id": "relevant-dodge", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[~wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2']].duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outside-letters", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "pretty-scholar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv', index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "gorgeous-syndrome", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'ID',\n", - " 'H_Sim',\n", - " 'H_Dim',\n", - " 'F_Sim',\n", - " 'F_Dim',\n", - " 'N_Sim',\n", - " 'N_Dim',\n", - " 'D_Sim',\n", - " 'D_Dim',\n", - " 'P_Sim',\n", - " 'P_Dim',\n", - " 'Avg',\n", - " 'Stdev',\n", - " 'H_orig',\n", - " 'H_reversed',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].to_csv('../data/wordsim353_all_embeddings_with_retrofits_scores_only_new.csv', index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "alpha-department", - "metadata": {}, - "source": [ - "# Determine Differences" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ahead-syndication", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "suspended-beach", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "racial-behalf", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "another-mississippi", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "metallic-smith", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.580594\n", - "std 0.457960\n", - "min 0.000000\n", - "25% 0.222619\n", - "50% 0.495179\n", - "75% 0.852326\n", - "max 5.000000\n", - "Name: transe_19k_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['transe_19k_old_cosSim_Diff'],ascending=False)['transe_19k_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "designed-vacuum", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.645644\n", - "std 0.526932\n", - "min 0.000000\n", - "25% 0.250461\n", - "50% 0.562808\n", - "75% 0.927608\n", - "max 5.000000\n", - "Name: transe_19k_1_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['transe_19k_1_new_cosSim_Diff'],ascending=False)['transe_19k_1_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "facial-second", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.495179:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 0.562808:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "lightweight-average", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'transe_19k_old_cosSim', 'transe_19k_1_new_cosSim', 'transe_19k_old_cosSim_Diff', 'transe_19k_1_new_cosSim_Diff', 'transe_19k_old_cosSim_Diff_Cat', 'transe_19k_1_new_cosSim_Diff_Cat']]" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "american-egypt", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgtranse_19k_old_cosSimtranse_19k_1_new_cosSimtranse_19k_old_cosSim_Difftranse_19k_1_new_cosSim_Difftranse_19k_old_cosSim_Diff_Cattranse_19k_1_new_cosSim_Diff_Cat
0Arafatpeace3.603.0763033.4776650.5236970.12233510
1Arafatterror3.603.1036682.9521810.4963320.64781911
2FBIfingerprint3.602.9113343.1262090.6886660.47379110
3FBIinvestigation3.002.8817632.9437500.1182370.05625000
4HarvardYale2.202.1350422.0800220.0649580.11997800
..............................
339wartroops3.002.8075393.1619370.1924610.16193700
340weaponsecret3.803.3102612.7938320.4897391.00616801
341weatherforecast3.002.4496022.7392800.5503980.26072010
342woodforest1.802.9316103.5417541.1316101.74175411
343wordsimilarity3.752.6484272.7581561.1015730.99184411
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg transe_19k_old_cosSim \\\n", - "0 Arafat peace 3.60 3.076303 \n", - "1 Arafat terror 3.60 3.103668 \n", - "2 FBI fingerprint 3.60 2.911334 \n", - "3 FBI investigation 3.00 2.881763 \n", - "4 Harvard Yale 2.20 2.135042 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.807539 \n", - "340 weapon secret 3.80 3.310261 \n", - "341 weather forecast 3.00 2.449602 \n", - "342 wood forest 1.80 2.931610 \n", - "343 word similarity 3.75 2.648427 \n", - "\n", - " transe_19k_1_new_cosSim transe_19k_old_cosSim_Diff \\\n", - "0 3.477665 0.523697 \n", - "1 2.952181 0.496332 \n", - "2 3.126209 0.688666 \n", - "3 2.943750 0.118237 \n", - "4 2.080022 0.064958 \n", - ".. ... ... \n", - "339 3.161937 0.192461 \n", - "340 2.793832 0.489739 \n", - "341 2.739280 0.550398 \n", - "342 3.541754 1.131610 \n", - "343 2.758156 1.101573 \n", - "\n", - " transe_19k_1_new_cosSim_Diff transe_19k_old_cosSim_Diff_Cat \\\n", - "0 0.122335 1 \n", - "1 0.647819 1 \n", - "2 0.473791 1 \n", - "3 0.056250 0 \n", - "4 0.119978 0 \n", - ".. ... ... \n", - "339 0.161937 0 \n", - "340 1.006168 0 \n", - "341 0.260720 1 \n", - "342 1.741754 1 \n", - "343 0.991844 1 \n", - "\n", - " transe_19k_1_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 1 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 0 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "automotive-trouble", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "123" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "compressed-emergency", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['old_cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "alert-holmes", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['new_cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "psychological-walter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['cat'] = wordSim353AnnotDF_New_Merged_DF['Avg'].apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "arabic-binding", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['old_cat'] != wordSim353AnnotDF_New_Merged_DF['cat']].to_csv('../data/transEmb/badBefore.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "acoustic-holocaust", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['new_cat'] != wordSim353AnnotDF_New_Merged_DF['cat']].to_csv('../data/transEmb/badAfter.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "accompanied-spyware", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/transEmb/entireSet.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "reverse-cincinnati", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "consistent-difference", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "breathing-footage", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "chief-chance", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "shaped-letter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "adolescent-monte", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "swiss-bridal", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "current-mirror", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "placed-identity", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "stopped-daisy", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "deadly-forwarding", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "southeast-canal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.567297\n", - "std 0.435379\n", - "min 0.000000\n", - "25% 0.250130\n", - "50% 0.508725\n", - "75% 0.835197\n", - "max 5.000000\n", - "Name: concat_19k_v1_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_old_cosSim_Diff'],ascending=False)['concat_19k_v1_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "adequate-terminology", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 3.440000e+02\n", - "mean 5.938081e-01\n", - "std 4.503200e-01\n", - "min 4.440892e-16\n", - "25% 2.665817e-01\n", - "50% 5.349785e-01\n", - "75% 8.528840e-01\n", - "max 5.000000e+00\n", - "Name: concat_19k_v1_2_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_2_new_cosSim_Diff'],ascending=False)['concat_19k_v1_2_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "wired-shoot", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.508725:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 5.349785e-01:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "operating-senegal", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'concat_19k_v1_old_cosSim', 'concat_19k_v1_2_new_cosSim', 'concat_19k_v1_old_cosSim_Diff', 'concat_19k_v1_2_new_cosSim_Diff', 'concat_19k_v1_old_cosSim_Diff_Cat', 'concat_19k_v1_2_new_cosSim_Diff_Cat']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quantitative-money", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_19k_v1_old_cosSim_Diffconcat_19k_v1_2_new_cosSim_Diffconcat_19k_v1_old_cosSim_Diff_Catconcat_19k_v1_2_new_cosSim_Diff_Cat
0Arafatpeace3.603.2511983.1932710.3488020.40672900
1Arafatterror3.603.2314093.1572290.3685910.44277100
2FBIfingerprint3.602.9484872.8530480.6515130.74695211
3FBIinvestigation3.002.9303652.8956040.0696350.10439600
4HarvardYale2.201.9910541.9910540.2089460.20894600
..............................
339wartroops3.002.9139312.7872130.0860690.21278700
340weaponsecret3.803.1525133.1190650.6474870.68093511
341weatherforecast3.002.4927652.4623890.5072350.53761101
342woodforest1.802.6126812.6069410.8126810.80694111
343wordsimilarity3.752.6782762.6528291.0717241.09717111
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg concat_19k_v1_old_cosSim \\\n", - "0 Arafat peace 3.60 3.251198 \n", - "1 Arafat terror 3.60 3.231409 \n", - "2 FBI fingerprint 3.60 2.948487 \n", - "3 FBI investigation 3.00 2.930365 \n", - "4 Harvard Yale 2.20 1.991054 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.913931 \n", - "340 weapon secret 3.80 3.152513 \n", - "341 weather forecast 3.00 2.492765 \n", - "342 wood forest 1.80 2.612681 \n", - "343 word similarity 3.75 2.678276 \n", - "\n", - " concat_19k_v1_2_new_cosSim concat_19k_v1_old_cosSim_Diff \\\n", - "0 3.193271 0.348802 \n", - "1 3.157229 0.368591 \n", - "2 2.853048 0.651513 \n", - "3 2.895604 0.069635 \n", - "4 1.991054 0.208946 \n", - ".. ... ... \n", - "339 2.787213 0.086069 \n", - "340 3.119065 0.647487 \n", - "341 2.462389 0.507235 \n", - "342 2.606941 0.812681 \n", - "343 2.652829 1.071724 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff concat_19k_v1_old_cosSim_Diff_Cat \\\n", - "0 0.406729 0 \n", - "1 0.442771 0 \n", - "2 0.746952 1 \n", - "3 0.104396 0 \n", - "4 0.208946 0 \n", - ".. ... ... \n", - "339 0.212787 0 \n", - "340 0.680935 1 \n", - "341 0.537611 0 \n", - "342 0.806941 1 \n", - "343 1.097171 1 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 0 \n", - "2 1 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 1 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "attractive-annex", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "164" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "proof-registrar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "elder-harmony", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "magnetic-marina", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "satisfied-increase", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "surprising-milan", - "metadata": {}, - "source": [ - "# SVM Models" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "worldwide-genius", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting datacompy\n", - " Downloading datacompy-0.7.2-py3-none-any.whl (27 kB)\n", - "Requirement already satisfied: numpy>=1.11.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.20.1)\n", - "Requirement already satisfied: pandas>=0.25.0 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.2.2)\n", - "Requirement already satisfied: pytz>=2017.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2021.1)\n", - "Requirement already satisfied: python-dateutil>=2.7.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2.8.1)\n", - "Requirement already satisfied: six>=1.5 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas>=0.25.0->datacompy) (1.15.0)\n", - "Installing collected packages: datacompy\n", - "Successfully installed datacompy-0.7.2\n" - ] - } - ], - "source": [ - "!pip install datacompy" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "overhead-board", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "developing-option", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "catholic-compensation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004515859576248157, -0.01172366887295375, ...3.2445393.175157[0.006720440291834372, 0.008331484208161396, 0...[-0.005011610937734838, -0.013383541550578623,...[0.006720440291834372, 0.008331484208161396, 0...[-0.00497129831746384, -0.01325426749683971, -...3.2445393.240270
1Arafatterror93D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004862257088069111, 0.014077170590128979, ...3.0850833.013958[0.006720440291834372, 0.008331484208161396, 0...[-0.005805280438126139, 0.015115419696749257, ...[0.006720440291834372, 0.008331484208161396, 0...[-0.004862255062129871, 0.014077164724644747, ...3.0850833.013958
2FBIfingerprint1093D4NaN4NaN3...[0.006466897059812569, 0.014694837542908411, -...[0.01523113309590259, 0.005271417380511587, -0...2.8230932.745230[0.006466894365273728, 0.014694831420063071, -...[0.013922101136130544, 0.0023911842131386003, ...[0.006466894365273728, 0.014694831420063071, -...[0.013814564227839972, 0.0024352598952305004, ...2.8230932.816176
3FBIinvestigation1103U3U3U3...[0.006466897059812569, 0.014694837542908411, -...[0.013016090623183913, 0.01114268771757639, -0...2.9209862.886161[0.006466894365273728, 0.014694831420063071, -...[0.01327496060589727, 0.010965634890657862, -0...[0.006466894365273728, 0.014694831420063071, -...[0.013242882546106787, 0.010953106196386554, -...2.9209862.919120
4HarvardYale1372S3S2S2...[0.01322626159341165, 0.005047111630696947, -0...[0.010410829393995813, 0.014776997996557633, -...1.7076551.707655[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...1.7076551.707655
\n", - "

5 rows × 104 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "1 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "2 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "3 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "4 ... [0.01322626159341165, 0.005047111630696947, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859576248157, -0.01172366887295375, ... 3.244539 \n", - "1 [-0.004862257088069111, 0.014077170590128979, ... 3.085083 \n", - "2 [0.01523113309590259, 0.005271417380511587, -0... 2.823093 \n", - "3 [0.013016090623183913, 0.01114268771757639, -0... 2.920986 \n", - "4 [0.010410829393995813, 0.014776997996557633, -... 1.707655 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.175157 \n", - "1 3.013958 \n", - "2 2.745230 \n", - "3 2.886161 \n", - "4 1.707655 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.005011610937734838, -0.013383541550578623,... \n", - "1 [-0.005805280438126139, 0.015115419696749257, ... \n", - "2 [0.013922101136130544, 0.0023911842131386003, ... \n", - "3 [0.01327496060589727, 0.010965634890657862, -0... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.00497129831746384, -0.01325426749683971, -... \n", - "1 [-0.004862255062129871, 0.014077164724644747, ... \n", - "2 [0.013814564227839972, 0.0024352598952305004, ... \n", - "3 [0.013242882546106787, 0.010953106196386554, -... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.244539 3.240270 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.816176 \n", - "3 2.920986 2.919120 \n", - "4 1.707655 1.707655 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "id": "expanded-uniform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
text_7props_19k_old_cosSimtext_7props_19k_2_new_cosSimtext_2props_19k_old_cosSimtext_2props_19k_2_new_cosSimcomplex_19k_old_cosSimcomplex_19k_2_new_cosSimtranse_19k_old_cosSimtranse_19k_1_new_cosSimabstract_19k_old_cosSimabstract_19k_2_new_cosSim...transe_probase_19k_old_cosSimtranse_probase_19k_1_new_cosSimconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_probase_19k_v1_old_cosSimconcat_probase_19k_v1_2_new_cosSimconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
count344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000...344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000
mean2.5110332.4648762.4822542.4351612.9833022.6848182.9833022.6800022.6528662.593916...2.9833022.5658862.8753812.8264932.8753812.8651012.8680662.8166852.8680662.856603
std1.1488211.1529111.1510601.1554270.6459110.5390920.6459110.6192390.6805250.653512...0.6459110.5967500.5739020.5755850.5739020.5744101.0971211.1063621.0971211.099179
min1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000...1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
25%2.0050971.9632291.9934241.9498692.5885912.4554312.5885912.3118182.1809122.137568...2.5885912.1836862.5779382.5510332.5779382.5838112.3843372.3506452.3843372.377672
50%2.3282762.2736742.2746682.2321563.0390872.7085693.0390872.7222782.6168102.591640...3.0390872.6080412.9505782.9120982.9505782.9339842.7164712.6570782.7164712.704941
75%2.6369072.5761552.5804822.5275543.3592432.9592593.3592433.0905633.2089193.060782...3.3592432.9352263.2087353.1644263.2087353.1962702.9922652.8996262.9922652.977770
max7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000004.3400894.327902...7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.000000
\n", - "

8 rows × 28 columns

\n", - "
" - ], - "text/plain": [ - " text_7props_19k_old_cosSim text_7props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.511033 2.464876 \n", - "std 1.148821 1.152911 \n", - "min 1.000000 1.000000 \n", - "25% 2.005097 1.963229 \n", - "50% 2.328276 2.273674 \n", - "75% 2.636907 2.576155 \n", - "max 7.000000 7.000000 \n", - "\n", - " text_2props_19k_old_cosSim text_2props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.482254 2.435161 \n", - "std 1.151060 1.155427 \n", - "min 1.000000 1.000000 \n", - "25% 1.993424 1.949869 \n", - "50% 2.274668 2.232156 \n", - "75% 2.580482 2.527554 \n", - "max 7.000000 7.000000 \n", - "\n", - " complex_19k_old_cosSim complex_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.684818 \n", - "std 0.645911 0.539092 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.455431 \n", - "50% 3.039087 2.708569 \n", - "75% 3.359243 2.959259 \n", - "max 7.000000 7.000000 \n", - "\n", - " transe_19k_old_cosSim transe_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.680002 \n", - "std 0.645911 0.619239 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.311818 \n", - "50% 3.039087 2.722278 \n", - "75% 3.359243 3.090563 \n", - "max 7.000000 7.000000 \n", - "\n", - " abstract_19k_old_cosSim abstract_19k_2_new_cosSim ... \\\n", - "count 344.000000 344.000000 ... \n", - "mean 2.652866 2.593916 ... \n", - "std 0.680525 0.653512 ... \n", - "min 1.000000 1.000000 ... \n", - "25% 2.180912 2.137568 ... \n", - "50% 2.616810 2.591640 ... \n", - "75% 3.208919 3.060782 ... \n", - "max 4.340089 4.327902 ... \n", - "\n", - " transe_probase_19k_old_cosSim transe_probase_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.565886 \n", - "std 0.645911 0.596750 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.183686 \n", - "50% 3.039087 2.608041 \n", - "75% 3.359243 2.935226 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v1_old_cosSim concat_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.826493 \n", - "std 0.573902 0.575585 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.551033 \n", - "50% 2.950578 2.912098 \n", - "75% 3.208735 3.164426 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v1_old_cosSim concat_probase_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.865101 \n", - "std 0.573902 0.574410 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.583811 \n", - "50% 2.950578 2.933984 \n", - "75% 3.208735 3.196270 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v2_old_cosSim concat_19k_v2_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.816685 \n", - "std 1.097121 1.106362 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.350645 \n", - "50% 2.716471 2.657078 \n", - "75% 2.992265 2.899626 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.856603 \n", - "std 1.097121 1.099179 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.377672 \n", - "50% 2.716471 2.704941 \n", - "75% 2.992265 2.977770 \n", - "max 7.000000 7.000000 \n", - "\n", - "[8 rows x 28 columns]" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "id": "indian-embassy", - "metadata": {}, - "outputs": [], - "source": [ - "import datacompy\n", - "compare = datacompy.Compare(\n", - " wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))],\n", - " wordSim353AnnotDF_New_Merged_DF_old[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF_old.columns.to_list()))],\n", - " join_columns = ['Word 1', 'Word 2'])" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "id": "vocational-nurse", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DataComPy Comparison\n", - "--------------------\n", - "\n", - "DataFrame Summary\n", - "-----------------\n", - "\n", - " DataFrame Columns Rows\n", - "0 df1 34 344\n", - "1 df2 34 344\n", - "\n", - "Column Summary\n", - "--------------\n", - "\n", - "Number of columns in common: 32\n", - "Number of columns in df1 but not in df2: 2\n", - "Number of columns in df2 but not in df1: 2\n", - "\n", - "Row Summary\n", - "-----------\n", - "\n", - "Matched on: word 1, word 2\n", - "Any duplicates on match values: No\n", - "Absolute Tolerance: 0\n", - "Relative Tolerance: 0\n", - "Number of rows in common: 344\n", - "Number of rows in df1 but not in df2: 0\n", - "Number of rows in df2 but not in df1: 0\n", - "\n", - "Number of rows with some compared columns unequal: 343\n", - "Number of rows with all compared columns equal: 1\n", - "\n", - "Column Comparison\n", - "-----------------\n", - "\n", - "Number of columns compared with some values unequal: 27\n", - "Number of columns compared with all values equal: 5\n", - "Total number of values which compare unequal: 5,136\n", - "\n", - "Columns with Unequal Values or Types\n", - "------------------------------------\n", - "\n", - " Column df1 dtype df2 dtype # Unequal Max Diff # Null Diff\n", - "25 abstract_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "17 abstract_19k_old_cossim float64 float64 9 4.440892e-16 0\n", - "8 abstract_firstsent_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "19 abstract_firstsent_19k_old_cossim float64 float64 8 4.440892e-16 0\n", - "6 category object object 4 0.000000e+00 0\n", - "12 complex_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "21 complex_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "11 complex_probase_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "18 complex_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "1 concat_19k_v1_2_new_cossim float64 float64 343 9.656675e-01 0\n", - "22 concat_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "2 concat_19k_v2_2_new_cossim float64 float64 325 4.810998e-01 0\n", - "3 concat_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "10 concat_probase_19k_v1_2_new_cossim float64 float64 341 9.673423e-01 0\n", - "7 concat_probase_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "26 concat_probase_19k_v2_2_new_cossim float64 float64 324 4.828636e-01 0\n", - "9 concat_probase_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "15 text_2props_19k_2_new_cossim float64 float64 7 4.440892e-16 0\n", - "0 text_2props_19k_old_cossim float64 float64 5 4.440892e-16 0\n", - "14 text_7props_19k_2_new_cossim float64 float64 11 4.440892e-16 0\n", - "24 text_7props_19k_old_cossim float64 float64 7 4.440892e-16 0\n", - "5 transe_19k_1_new_cossim float64 float64 5 4.440892e-16 0\n", - "4 transe_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "16 transe_probase_19k_1_new_cossim float64 float64 340 1.192889e-08 0\n", - "20 transe_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "23 transe_probase_1_new_cossim float64 float64 9 4.440892e-16 0\n", - "13 transe_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "\n", - "Sample Rows with Unequal Values\n", - "-------------------------------\n", - "\n", - " word 1 word 2 text_2props_19k_old_cossim (df1) text_2props_19k_old_cossim (df2)\n", - "33 bishop rabbi 2.333195 2.333195\n", - "69 credit card 1.834364 1.834364\n", - "107 drink ear 2.515900 2.515900\n", - "271 registration arrangement 1.826611 1.826611\n", - "169 line insurance 2.670612 2.670612\n", - "\n", - " word 1 word 2 concat_19k_v1_2_new_cossim (df1) concat_19k_v1_2_new_cossim (df2)\n", - "107 drink ear 3.116502 2.813165\n", - "112 energy crisis 3.024137 3.099512\n", - "14 admission ticket 2.647422 2.819317\n", - "63 computer software 2.167120 2.273544\n", - "241 precedent example 2.091422 2.138805\n", - "44 car flight 3.064250 2.948899\n", - "229 planet constellation 2.240850 2.286295\n", - "159 king queen 2.169999 2.241265\n", - "161 lad brother 2.755663 2.733430\n", - "297 stock egg 2.943623 2.952019\n", - "\n", - " word 1 word 2 concat_19k_v2_2_new_cossim (df1) concat_19k_v2_2_new_cossim (df2)\n", - "61 computer laboratory 2.670662 2.635687\n", - "239 precedent cognition 2.643438 2.676361\n", - "286 situation isolation 2.313211 2.399693\n", - "225 physics chemistry 1.755500 1.873616\n", - "262 psychology doctor 2.861167 2.665892\n", - "271 registration arrangement 1.935898 2.144032\n", - "111 drug abuse 2.653034 2.716209\n", - "150 impartiality interest 2.395906 2.496811\n", - "130 forest graveyard 2.963496 2.743907\n", - "80 cup substance 2.738585 2.703536\n", - "\n", - " word 1 word 2 concat_19k_v2_old_cossim (df1) concat_19k_v2_old_cossim (df2)\n", - "247 president medal 2.809529 3.039440\n", - "70 credit information 2.557827 2.567752\n", - "58 competition price 2.699197 2.854295\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "47 century nation 3.025727 3.021246\n", - "280 seven series 2.801360 2.821742\n", - "193 money dollar 2.376377 2.437513\n", - "5 Japanese American 2.564544 2.535274\n", - "340 weapon secret 2.889109 2.897323\n", - "189 money bank 2.261778 2.170577\n", - "\n", - " word 1 word 2 transe_19k_old_cossim (df1) transe_19k_old_cossim (df2)\n", - "36 book paper 3.078243 2.635533\n", - "5 Japanese American 2.496058 2.408249\n", - "26 baby mother 2.292784 2.155920\n", - "248 problem airport 3.826307 3.170909\n", - "55 coast hill 3.722873 2.798622\n", - "112 energy crisis 3.106233 3.230795\n", - "340 weapon secret 3.285620 3.310261\n", - "219 opera industry 3.296724 3.553488\n", - "169 line insurance 3.089979 2.829222\n", - "332 type kind 1.000000 1.000000\n", - "\n", - " word 1 word 2 transe_19k_1_new_cossim (df1) transe_19k_1_new_cossim (df2)\n", - "192 money deposit 2.837495 2.837495\n", - "232 planet people 3.716617 3.716617\n", - "114 energy secretary 2.865451 2.865451\n", - "304 street block 2.904156 2.904156\n", - "271 registration arrangement 1.933719 1.933719\n", - "\n", - " word 1 word 2 category (df1) category (df2)\n", - "296 stock CD U M\n", - "45 cell phone I M\n", - "328 tool implement I M\n", - "237 practice institution M U\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_old_cossim (df1) concat_probase_19k_v1_old_cossim (df2)\n", - "312 television film 3.266487 2.813985\n", - "191 money currency 2.401111 2.298975\n", - "243 precedent information 3.131530 3.019516\n", - "53 closet clothes 2.947983 2.705879\n", - "142 government crisis 3.181431 2.683486\n", - "183 media trading 3.103774 2.822458\n", - "89 delay racism 3.037041 2.943246\n", - "32 bird crane 2.323600 2.007661\n", - "126 food rooster 3.641608 3.323421\n", - "43 car automobile 1.000000 1.000000\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_2_new_cossim (df1) abstract_firstsent_19k_2_new_cossim (df2)\n", - "67 country citizen 2.307399 2.307399\n", - "218 oil stock 2.875288 2.875288\n", - "337 vodka gin 1.848263 1.848263\n", - "152 investor earning 1.998387 1.998387\n", - "90 deployment departure 1.826386 1.826386\n", - "208 movie theater 2.390347 2.390347\n", - "263 psychology fear 2.679016 2.679016\n", - "96 discovery space 2.952799 2.952799\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_old_cossim (df1) concat_probase_19k_v2_old_cossim (df2)\n", - "21 architecture century 3.188363 3.081890\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "60 computer keyboard 2.131908 2.212525\n", - "120 fertility egg 2.202871 2.244311\n", - "311 telephone communication 2.677514 2.463340\n", - "238 precedent antecedent 1.935676 2.019795\n", - "33 bishop rabbi 2.277504 2.458967\n", - "203 morality importance 2.272562 2.446757\n", - "228 planet astronomer 2.470710 2.152302\n", - "144 governor office 2.720705 2.742336\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_2_new_cossim (df1) concat_probase_19k_v1_2_new_cossim (df2)\n", - "166 life death 2.384376 2.467146\n", - "249 problem challenge 2.573163 2.851951\n", - "216 noon string 2.831571 3.404519\n", - "214 network hardware 2.797734 2.468385\n", - "324 tiger mammal 2.608830 2.218881\n", - "269 reason hypertension 3.043544 2.554564\n", - "35 book library 3.335751 2.560611\n", - "169 line insurance 3.121240 2.947265\n", - "319 tiger carnivore 3.332882 3.004569\n", - "161 lad brother 2.885448 2.868957\n", - "\n", - " word 1 word 2 complex_probase_2_new_cossim (df1) complex_probase_2_new_cossim (df2)\n", - "39 bread butter 1.926594 1.926594\n", - "102 dollar buck 2.733086 2.733086\n", - "193 money dollar 2.733086 2.733086\n", - "150 impartiality interest 2.323327 2.323327\n", - "1 Arafat terror 3.103668 3.103668\n", - "266 psychology psychiatry 1.826092 1.826092\n", - "10 Mexico Brazil 1.921104 1.921104\n", - "5 Japanese American 2.408249 2.408249\n", - "\n", - " word 1 word 2 complex_19k_old_cossim (df1) complex_19k_old_cossim (df2)\n", - "115 environment ecology 2.920428 2.903515\n", - "256 psychology Freud 3.234018 2.992413\n", - "169 line insurance 3.089979 2.829222\n", - "33 bishop rabbi 2.300842 2.845229\n", - "220 opera performance 3.163513 3.062105\n", - "267 psychology science 2.231959 2.334221\n", - "265 psychology mind 2.886509 2.426014\n", - "45 cell phone 3.622510 2.693966\n", - "26 baby mother 2.292784 2.155920\n", - "161 lad brother 3.110214 3.092837\n", - "\n", - " word 1 word 2 transe_probase_old_cossim (df1) transe_probase_old_cossim (df2)\n", - "209 murder manslaughter 2.249251 2.257188\n", - "141 glass metal 3.225510 2.093335\n", - "296 stock CD 3.395233 3.514011\n", - "325 tiger organism 3.290722 2.591059\n", - "35 book library 3.701910 2.539030\n", - "2 FBI fingerprint 3.149125 2.911334\n", - "254 profit loss 1.653272 1.573516\n", - "334 video archive 3.219152 2.407191\n", - "166 life death 2.565452 2.692000\n", - "9 Mars scientist 3.504530 3.187455\n", - "\n", - " word 1 word 2 text_7props_19k_2_new_cossim (df1) text_7props_19k_2_new_cossim (df2)\n", - "176 luxury car 2.942098 2.942098\n", - "293 space world 2.109041 2.109041\n", - "309 summer drought 2.687325 2.687325\n", - "67 country citizen 1.942392 1.942392\n", - "169 line insurance 2.691916 2.691916\n", - "302 stock phone 2.963663 2.963663\n", - "5 Japanese American 2.145108 2.145108\n", - "238 precedent antecedent 1.844509 1.844509\n", - "143 governor interview 2.651640 2.651640\n", - "152 investor earning 1.902240 1.902240\n", - "\n", - " word 1 word 2 text_2props_19k_2_new_cossim (df1) text_2props_19k_2_new_cossim (df2)\n", - "329 train car 1.998965 1.998965\n", - "10 Mexico Brazil 1.950233 1.950233\n", - "19 announcement production 1.866451 1.866451\n", - "121 fighting defeating 1.940122 1.940122\n", - "293 space world 1.993016 1.993016\n", - "8 Maradona football 2.351065 2.351065\n", - "114 energy secretary 2.803514 2.803514\n", - "\n", - " word 1 word 2 transe_probase_19k_1_new_cossim (df1) transe_probase_19k_1_new_cossim (df2)\n", - "155 journal association 2.736767 2.736767\n", - "123 focus life 2.337493 2.337493\n", - "159 king queen 1.570639 1.570639\n", - "169 line insurance 2.557647 2.557647\n", - "305 street children 3.186623 3.186623\n", - "336 vodka brandy 1.527815 1.527815\n", - "232 planet people 3.593423 3.593423\n", - "130 forest graveyard 3.142560 3.142560\n", - "69 credit card 2.076337 2.076337\n", - "40 brother monk 2.683273 2.683273\n", - "\n", - " word 1 word 2 abstract_19k_old_cossim (df1) abstract_19k_old_cossim (df2)\n", - "285 situation conclusion 1.808156 1.808156\n", - "303 street avenue 2.281843 2.281843\n", - "94 disability death 2.746255 2.746255\n", - "5 Japanese American 3.292768 3.292768\n", - "183 media trading 3.108796 3.108796\n", - "11 OPEC country 3.042327 3.042327\n", - "162 lad wizard 3.334772 3.334772\n", - "129 football tennis 2.518421 2.518421\n", - "231 planet moon 1.920149 1.920149\n", - "\n", - " word 1 word 2 complex_probase_old_cossim (df1) complex_probase_old_cossim (df2)\n", - "63 computer software 2.565704 2.726328\n", - "21 architecture century 3.418617 3.099197\n", - "179 man woman 2.351588 1.471079\n", - "149 image surface 3.137178 3.256807\n", - "81 cup tableware 2.124012 1.954043\n", - "36 book paper 3.078243 2.635533\n", - "194 money laundering 2.759570 2.800958\n", - "236 possibility girl 3.361988 2.920025\n", - "209 murder manslaughter 2.249251 2.257188\n", - "218 oil stock 2.577913 2.625197\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_old_cossim (df1) abstract_firstsent_19k_old_cossim (df2)\n", - "246 preservation world 3.234863 3.234863\n", - "5 Japanese American 2.728319 2.728319\n", - "285 situation conclusion 1.808156 1.808156\n", - "244 precedent law 1.878214 1.878214\n", - "94 disability death 3.016865 3.016865\n", - "175 lover quarrel 3.157233 3.157233\n", - "109 drink mother 3.128050 3.128050\n", - "177 magician wizard 1.909871 1.909871\n", - "\n", - " word 1 word 2 transe_probase_19k_old_cossim (df1) transe_probase_19k_old_cossim (df2)\n", - "79 cup object 2.627446 2.362561\n", - "234 planet star 2.586230 2.320493\n", - "176 luxury car 3.150901 2.977136\n", - "156 journey car 2.971068 2.457446\n", - "324 tiger mammal 2.909669 2.322927\n", - "120 fertility egg 2.547399 2.671721\n", - "248 problem airport 3.826307 3.170909\n", - "16 aluminum metal 2.712132 1.916614\n", - "36 book paper 3.078243 2.635533\n", - "211 music project 3.141641 3.304875\n", - "\n", - " word 1 word 2 complex_probase_19k_old_cossim (df1) complex_probase_19k_old_cossim (df2)\n", - "277 seafood lobster 2.240601 2.113436\n", - "27 bank money 3.066413 2.792811\n", - "337 vodka gin 1.857971 2.369972\n", - "211 music project 3.141641 3.304875\n", - "271 registration arrangement 2.319711 2.954145\n", - "143 governor interview 4.023383 3.076389\n", - "149 image surface 3.137178 3.256807\n", - "94 disability death 2.565398 2.939547\n", - "166 life death 2.565452 2.692000\n", - "226 physics proton 3.802075 2.800635\n", - "\n", - " word 1 word 2 concat_19k_v1_old_cossim (df1) concat_19k_v1_old_cossim (df2)\n", - "270 record number 2.977163 2.589607\n", - "282 shower flood 3.398140 2.908007\n", - "97 dividend calculation 2.507181 2.708939\n", - "239 precedent cognition 2.724066 2.793355\n", - "125 food preparation 2.932974 2.836360\n", - "342 wood forest 3.144257 2.612681\n", - "304 street block 2.690410 2.201689\n", - "250 production crew 2.552550 2.783363\n", - "6 Jerusalem Israel 2.978292 2.383538\n", - "210 museum theater 3.208882 2.943593\n", - "\n", - " word 1 word 2 transe_probase_1_new_cossim (df1) transe_probase_1_new_cossim (df2)\n", - "108 drink eat 2.334188 2.334188\n", - "25 attempt peace 2.624155 2.624155\n", - "232 planet people 3.392578 3.392578\n", - "204 morality marriage 2.173908 2.173908\n", - "267 psychology science 1.840069 1.840069\n", - "20 announcement warning 1.930855 1.930855\n", - "37 boxing round 3.527058 3.527058\n", - "77 cup food 2.657233 2.657233\n", - "73 cup artifact 2.065621 2.065621\n", - "\n", - " word 1 word 2 text_7props_19k_old_cossim (df1) text_7props_19k_old_cossim (df2)\n", - "311 telephone communication 2.269291 2.269291\n", - "205 movie critic 2.872865 2.872865\n", - "69 credit card 1.834364 1.834364\n", - "334 video archive 1.948662 1.948662\n", - "51 change attitude 1.894075 1.894075\n", - "260 psychology depression 1.948810 1.948810\n", - "63 computer software 1.918968 1.918968\n", - "\n", - " word 1 word 2 abstract_19k_2_new_cossim (df1) abstract_19k_2_new_cossim (df2)\n", - "90 deployment departure 1.826386 1.826386\n", - "14 admission ticket 2.890691 2.890691\n", - "84 day summer 1.820569 1.820569\n", - "217 observation architecture 2.541219 2.541219\n", - "243 precedent information 2.768309 2.768309\n", - "253 professor doctor 2.462181 2.462181\n", - "60 computer keyboard 1.977226 1.977226\n", - "95 disaster area 3.350219 3.350219\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_2_new_cossim (df1) concat_probase_19k_v2_2_new_cossim (df2)\n", - "208 movie theater 2.614114 2.456455\n", - "177 magician wizard 2.146197 2.011585\n", - "86 death row 2.990100 2.809539\n", - "293 space world 2.481352 2.412213\n", - "123 focus life 2.908816 2.990622\n", - "316 territory surface 2.778507 2.489232\n", - "289 smart student 2.754242 2.578396\n", - "333 victim emergency 2.380390 2.445431\n", - "55 coast hill 2.826077 2.516979\n", - "78 cup liquid 2.365327 2.264276\n", - "\n", - "\n" - ] - } - ], - "source": [ - "print(compare.report())" - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "id": "common-vietnam", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idword 1word 2idh_simh_dimf_simf_dimn_sim...concat_19k_v2_word2_newconcat_19k_v2_old_cossimconcat_19k_v2_2_new_cossimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cossimconcat_probase_19k_v2_2_new_cossimavg_old
0Q106106Q11460closetclothes423H3H3...[0.0014151543049584102, 0.003161483781535701, ...2.6970222.652559[0.013902607489678993, 0.013241494756981564, -...[0.0014224480432097992, 0.0031547764732941653,...[0.01371531560905985, 0.013126875633706597, -0...[0.0014206775968733409, 0.0031581452887393872,...2.6970222.6833183.0
1Q107Q16502spaceworld2933L3S3...[-0.0031782974877087693, 0.003973805776938075,...2.4858592.347308[0.00027019944749503126, 0.005353652289998999,...[-0.0032792710227188605, 0.0036472880832864947...[0.00027492382990721006, 0.0053545622809597, -...[-0.0032450374860671267, 0.0036673577053825254...2.4858592.4813523.2
2Q107Q2329spacechemistry2924NaN4NaN4...[0.015268952851071075, -0.0024137893437008715,...2.7987882.782963[0.00027019944749503126, 0.005353652289998999,...[0.015322423107720673, -0.0024500099720118624,...[0.00027492382990721006, 0.0053545622809597, -...[0.015281665873653082, -0.002421165402091456, ...2.7987882.7950474.0
3Q1074Q7364skineye2883H3H3...[0.002992664951436964, 0.013922942027531155, -...2.3558132.314417[-0.0026976204618851985, 0.001541600665881322,...[0.0033640181667058486, 0.014044398230441645, ...[-0.002678224125439186, 0.0015598357892553907,...[0.0033484286344994184, 0.014002864550517797, ...2.3558132.3506033.0
4Q1079023Q500834championshiptournament381NaN1NaN2...[0.00920825730356781, 0.011965374832474578, 0....1.8686991.865663[-0.0008601077391385219, 0.005201185839222482,...[0.00923153244996602, 0.011960544533439752, 0....[-0.0008458279784483333, 0.005209858282773185,...[0.009207264410626997, 0.011951895965764294, 0...1.8686991.8667851.2
\n", - "

5 rows × 105 columns

\n", - "
" - ], - "text/plain": [ - " word1_kg_id word2_kg_id word 1 word 2 id h_sim h_dim f_sim \\\n", - "0 Q106106 Q11460 closet clothes 42 3 H 3 \n", - "1 Q107 Q16502 space world 293 3 L 3 \n", - "2 Q107 Q2329 space chemistry 292 4 NaN 4 \n", - "3 Q1074 Q7364 skin eye 288 3 H 3 \n", - "4 Q1079023 Q500834 championship tournament 38 1 NaN 1 \n", - "\n", - " f_dim n_sim ... concat_19k_v2_word2_new \\\n", - "0 H 3 ... [0.0014151543049584102, 0.003161483781535701, ... \n", - "1 S 3 ... [-0.0031782974877087693, 0.003973805776938075,... \n", - "2 NaN 4 ... [0.015268952851071075, -0.0024137893437008715,... \n", - "3 H 3 ... [0.002992664951436964, 0.013922942027531155, -... \n", - "4 NaN 2 ... [0.00920825730356781, 0.011965374832474578, 0.... \n", - "\n", - " concat_19k_v2_old_cossim concat_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.652559 \n", - "1 2.485859 2.347308 \n", - "2 2.798788 2.782963 \n", - "3 2.355813 2.314417 \n", - "4 1.868699 1.865663 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.013902607489678993, 0.013241494756981564, -... \n", - "1 [0.00027019944749503126, 0.005353652289998999,... \n", - "2 [0.00027019944749503126, 0.005353652289998999,... \n", - "3 [-0.0026976204618851985, 0.001541600665881322,... \n", - "4 [-0.0008601077391385219, 0.005201185839222482,... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [0.0014224480432097992, 0.0031547764732941653,... \n", - "1 [-0.0032792710227188605, 0.0036472880832864947... \n", - "2 [0.015322423107720673, -0.0024500099720118624,... \n", - "3 [0.0033640181667058486, 0.014044398230441645, ... \n", - "4 [0.00923153244996602, 0.011960544533439752, 0.... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.01371531560905985, 0.013126875633706597, -0... \n", - "1 [0.00027492382990721006, 0.0053545622809597, -... \n", - "2 [0.00027492382990721006, 0.0053545622809597, -... \n", - "3 [-0.002678224125439186, 0.0015598357892553907,... \n", - "4 [-0.0008458279784483333, 0.005209858282773185,... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [0.0014206775968733409, 0.0031581452887393872,... \n", - "1 [-0.0032450374860671267, 0.0036673577053825254... \n", - "2 [0.015281665873653082, -0.002421165402091456, ... \n", - "3 [0.0033484286344994184, 0.014002864550517797, ... \n", - "4 [0.009207264410626997, 0.011951895965764294, 0... \n", - "\n", - " concat_probase_19k_v2_old_cossim concat_probase_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.683318 \n", - "1 2.485859 2.481352 \n", - "2 2.798788 2.795047 \n", - "3 2.355813 2.350603 \n", - "4 1.868699 1.866785 \n", - "\n", - " avg_old \n", - "0 3.0 \n", - "1 3.2 \n", - "2 4.0 \n", - "3 3.0 \n", - "4 1.2 \n", - "\n", - "[5 rows x 105 columns]" - ] - }, - "execution_count": 157, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "rising-platform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.20519776]])" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cosine_similarity(np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word1_new'][1:-1].split(\",\")]).reshape(1,-1), np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word2_new'][1:-1].split(\",\")]).reshape(1,-1))" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "governing-offer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Word 1', 'Word 2', 'ID', 'H_Sim', 'H_Dim', 'F_Sim', 'F_Dim', 'N_Sim',\n", - " 'N_Dim', 'D_Sim',\n", - " ...\n", - " 'concat_19k_v2_word1_new', 'concat_19k_v2_word2_new',\n", - " 'concat_19k_v2_old_cosSim', 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_word1_old', 'concat_probase_19k_v2_word2_old',\n", - " 'concat_probase_19k_v2_word1_new', 'concat_probase_19k_v2_word2_new',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim'],\n", - " dtype='object', length=104)" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "rough-february", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_7props_19k_2_new_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'text_2props_19k_2_new_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'complex_19k_2_new_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'transe_19k_1_new_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_19k_2_new_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_2_new_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'complex_probase_2_new_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'transe_probase_1_new_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'complex_probase_19k_2_new_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_1_new_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_19k_v1_2_new_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_2_new_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim']" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "hired-center", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "\n", - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "extraordinary-value", - "metadata": {}, - "outputs": [], - "source": [ - "emb_pairs = [('text_7props_19k', 'text_7props_19k_2'),\n", - " ('text_2props_19k', 'text_2props_19k_2'),\n", - " ('complex_19k', 'complex_19k_2'),\n", - " ('transe_19k', 'transe_19k_1'),\n", - " ('abstract_19k', 'abstract_19k_2'),\n", - " ('abstract_firstSent_19k', 'abstract_firstSent_19k_2'),\n", - " ('complex_probase', 'complex_probase_2'),\n", - " ('transe_probase', 'transe_probase_1'),\n", - " ('complex_probase_19k', 'complex_probase_19k_2'),\n", - " ('transe_probase_19k', 'transe_probase_19k_1'),\n", - " ('concat_19k_v1', 'concat_19k_v1_2'),\n", - " ('concat_probase_19k_v1', 'concat_probase_19k_v1_2'),\n", - " ('concat_19k_v2', 'concat_19k_v2_2'),\n", - " ('concat_probase_19k_v2', 'concat_probase_19k_v2_2')]\n", - "colMappers = {p[0]+'_old_cosSim': p[1]+'_new_cosSim' for p in emb_pairs}" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "political-battle", - "metadata": {}, - "outputs": [], - "source": [ - "oldColList = list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "flexible-booking", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 123, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "radio-outline", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "recent-portal", - "metadata": {}, - "outputs": [], - "source": [ - "# oldColList, [colMappers[col] for col in oldColList]\n", - "t1234 = []\n", - "t4567 = []\n", - "for col in oldColList:\n", - " t1234.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(labelSamples), wordSim353AnnotDF_New_Merged_DF[col].apply(labelSamples)))\n", - " t4567.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(labelSamples), wordSim353AnnotDF_New_Merged_DF[colMappers[col]].apply(labelSamples)))\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "id": "opening-inside", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = list(zip(indNames,t1234, t4567))" - ] - }, - { - "cell_type": "code", - "execution_count": 187, - "id": "settled-overhead", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = pd.DataFrame(t1234, columns=['Type', 'Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category'])" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "id": "young-heath", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TypeAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated category
10Complex-Transe-AbsFirstSent - 19k0.6802330.686047
11Complex-Transe-AbsFirstSent - Probase-19k0.6802330.680233
8Complex - Probase-19k0.5988370.662791
2Complex - 19k0.5988370.659884
6Complex - Probase0.5988370.656977
3Transe - 19k0.5988370.654070
5Abstract First Sentence - 19k0.6511630.654070
7Transe - Probase0.5988370.645349
9Transe - Probase-19k0.5988370.642442
4Abstract - 19k0.6279070.627907
136 embeddings - Probase-19k0.6250000.627907
126 embeddings - 19k0.6250000.625000
0Text 7 props - 19k0.5726740.569767
1Text 2 props - 19k0.5668600.555233
\n", - "
" - ], - "text/plain": [ - " Type \\\n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "8 Complex - Probase-19k \n", - "2 Complex - 19k \n", - "6 Complex - Probase \n", - "3 Transe - 19k \n", - "5 Abstract First Sentence - 19k \n", - "7 Transe - Probase \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "10 0.680233 \n", - "11 0.680233 \n", - "8 0.598837 \n", - "2 0.598837 \n", - "6 0.598837 \n", - "3 0.598837 \n", - "5 0.651163 \n", - "7 0.598837 \n", - "9 0.598837 \n", - "4 0.627907 \n", - "13 0.625000 \n", - "12 0.625000 \n", - "0 0.572674 \n", - "1 0.566860 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \n", - "10 0.686047 \n", - "11 0.680233 \n", - "8 0.662791 \n", - "2 0.659884 \n", - "6 0.656977 \n", - "3 0.654070 \n", - "5 0.654070 \n", - "7 0.645349 \n", - "9 0.642442 \n", - "4 0.627907 \n", - "13 0.627907 \n", - "12 0.625000 \n", - "0 0.569767 \n", - "1 0.555233 " - ] - }, - "execution_count": 188, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t1234.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "id": "beneficial-continuity", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " tempVals.append(acc/N_SPLITS)\n", - "\n", - " for col in colList:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " tempVals.append(acc/N_SPLITS)\n", - " return tempVals\n", - "\n", - "def compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, newColList, indNames):\n", - " tempVals1 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, oldColList)\n", - " tempVals2 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, newColList)\n", - " summ = (pd.DataFrame(list(zip(tempVals1, tempVals2)), index = ['Combined'] + indNames, columns = ['Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category']) * 100)\n", - " summ['Increase'] = summ['Accuracy (in %) of new embeddings compared to annotated category'] - summ['Accuracy (in %) of old embeddings compared to annotated category']\n", - " return summ.sort_values(by=['Increase'], ascending=False)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "intensive-platform", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "id": "significant-season", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracyRF(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = RandomForestClassifier(max_depth=max(2 * len(colList) // 3,3), random_state=100)\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "id": "fitting-jurisdiction", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Text 2 props - 19k66.00000067.1596641.159664
Complex - 19k66.86554667.1596640.294118
Combined68.89916069.1680670.268908
Transe - 19k66.86554666.571429-0.294118
Abstract - 19k66.54621865.983193-0.563025
Text 7 props - 19k67.74789967.159664-0.588235
Abstract First Sentence - 19k73.21848771.504202-1.714286
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Text 2 props - 19k 66.000000 \n", - "Complex - 19k 66.865546 \n", - "Combined 68.899160 \n", - "Transe - 19k 66.865546 \n", - "Abstract - 19k 66.546218 \n", - "Text 7 props - 19k 67.747899 \n", - "Abstract First Sentence - 19k 73.218487 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Text 2 props - 19k 67.159664 \n", - "Complex - 19k 67.159664 \n", - "Combined 69.168067 \n", - "Transe - 19k 66.571429 \n", - "Abstract - 19k 65.983193 \n", - "Text 7 props - 19k 67.159664 \n", - "Abstract First Sentence - 19k 71.504202 \n", - "\n", - " Increase \n", - "Text 2 props - 19k 1.159664 \n", - "Complex - 19k 0.294118 \n", - "Combined 0.268908 \n", - "Transe - 19k -0.294118 \n", - "Abstract - 19k -0.563025 \n", - "Text 7 props - 19k -0.588235 \n", - "Abstract First Sentence - 19k -1.714286 " - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - "'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', \n", - " 'Transe - 19k', 'Abstract - 19k', 'Abstract First Sentence - 19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "loose-cuisine", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Complex + Transe + Abstract FirstSent 19k66.17647166.4621850.285714
Combined68.75630369.0336130.277311
Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent69.63025269.327731-0.302521
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.176471 \n", - "Combined 68.756303 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.630252 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.462185 \n", - "Combined 69.033613 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.327731 \n", - "\n", - " Increase \n", - "Complex + Transe + Abstract FirstSent 19k 0.285714 \n", - "Combined 0.277311 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... -0.302521 " - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['concat_19k_v1_old_cosSim',\n", - "'concat_19k_v2_old_cosSim']\n", - "indNames = ['Complex + Transe + Abstract FirstSent 19k', 'Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "second-lightning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 271, - "id": "institutional-gamma", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "KeyboardInterrupt\n", - "\n" - ] - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "seven-edinburgh", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "individual-store", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "processed-reynolds", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "oldColPairs = list(zip(oldColList, indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "forced-dining", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Text 7 props - 19k\n", - "Text 2 props - 19k\n", - "Complex - 19k\n", - "Transe - 19k\n", - "Abstract - 19k\n", - "Abstract First Sentence - 19k\n", - "Complex - Probase\n", - "Transe - Probase\n", - "Complex - Probase-19k\n", - "Transe - Probase-19k\n", - "Complex-Transe-AbsFirstSent - 19k\n", - "Complex-Transe-AbsFirstSent - Probase-19k\n", - "6 embeddings - 19k\n", - "6 embeddings - Probase-19k\n" - ] - } - ], - "source": [ - "print(\"\\n\".join(indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "permanent-comfort", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2002" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comb(len(oldColPairs), 9)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "quantitative-japanese", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "16384" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "2**(len(oldColPairs))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "flexible-preparation", - "metadata": {}, - "outputs": [], - "source": [ - "# accs = []\n", - "# for r in tqdm(range(1,len(oldColPairs)+1)):\n", - "# for comb in tqdm(combinations(oldColPairs, r)):\n", - "# print(len(comb))\n", - "# # oldAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [col[0] for col in comb])\n", - "# # newAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [colMappers[col[0]] for col in comb])\n", - "# print(\" & \".join([col[1] for col in comb]).count(\"&\"))\n", - "# # accs.append((indName, oldAcc, newAcc))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 316, - "id": "fatal-publicity", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "77739ea8b6bf4cfb933f406e6e9699a5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.42857165.126050-0.3025211
1Text 2 props - 19k64.55462263.680672-0.8739501
2Complex - 19k64.57983265.4453780.8655461
3Transe - 19k64.57983266.8907562.3109241
4Abstract - 19k67.73949668.0504200.3109241
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.428571 \n", - "1 64.554622 \n", - "2 64.579832 \n", - "3 64.579832 \n", - "4 67.739496 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 65.126050 -0.302521 \n", - "1 63.680672 -0.873950 \n", - "2 65.445378 0.865546 \n", - "3 66.890756 2.310924 \n", - "4 68.050420 0.310924 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 325, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 326, - "id": "congressional-genre", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 327, - "id": "single-duration", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 328, - "id": "sharp-tunisia", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
30Text 2 props - 19k & Abstract First Sentence - 19k71.84033670.966387-0.8739502
204Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k71.84033670.378151-1.4621853
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
60Abstract - 19k & Abstract First Sentence - 19k71.54621871.243697-0.3025212
12350Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.504202-1.4705888
12329Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.075630-0.8991608
12154Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.084034-0.8907568
11944Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.781513-1.1932778
12349Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.210084-1.7647068
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "30 Text 2 props - 19k & Abstract First Sentence - 19k \n", - "204 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "12350 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12329 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12154 Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "11944 Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12349 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "30 71.840336 \n", - "204 71.840336 \n", - "18 71.840336 \n", - "60 71.546218 \n", - "12350 70.974790 \n", - "12329 70.974790 \n", - "12154 70.974790 \n", - "11944 70.974790 \n", - "12349 70.974790 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "30 70.966387 \n", - "204 70.378151 \n", - "18 71.848739 \n", - "60 71.243697 \n", - "12350 69.504202 \n", - "12329 70.075630 \n", - "12154 70.084034 \n", - "11944 69.781513 \n", - "12349 69.210084 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "30 -0.873950 2 \n", - "204 -1.462185 3 \n", - "18 0.008403 2 \n", - "60 -0.302521 2 \n", - "12350 -1.470588 8 \n", - "12329 -0.899160 8 \n", - "12154 -0.890756 8 \n", - "11944 -1.193277 8 \n", - "12349 -1.764706 8 " - ] - }, - "execution_count": 328, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 329, - "id": "federal-timing", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
5318Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.39495871.5462181.1512616
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
108Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k69.21008471.2521012.0420173
694Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k70.08403471.2521011.1680674
8035Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.09243771.2521011.1596647
7049Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.38655571.2521010.8655467
1916Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k69.79831971.2521011.4537825
11327Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.10084071.2521011.1512618
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "5318 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "108 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k \n", - "694 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "8035 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7049 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "1916 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "11327 Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "18 71.840336 \n", - "5318 70.394958 \n", - "5 72.705882 \n", - "51 68.630252 \n", - "108 69.210084 \n", - "694 70.084034 \n", - "8035 70.092437 \n", - "7049 70.386555 \n", - "1916 69.798319 \n", - "11327 70.100840 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "18 71.848739 \n", - "5318 71.546218 \n", - "5 71.537815 \n", - "51 71.521008 \n", - "108 71.252101 \n", - "694 71.252101 \n", - "8035 71.252101 \n", - "7049 71.252101 \n", - "1916 71.252101 \n", - "11327 71.252101 \n", - "\n", - " Increase count \n", - "18 0.008403 2 \n", - "5318 1.151261 6 \n", - "5 -1.168067 1 \n", - "51 2.890756 2 \n", - "108 2.042017 3 \n", - "694 1.168067 4 \n", - "8035 1.159664 7 \n", - "7049 0.865546 7 \n", - "1916 1.453782 5 \n", - "11327 1.151261 8 " - ] - }, - "execution_count": 329, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 330, - "id": "known-basement", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
1041Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k66.28571469.1932772.9075634
2828Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k65.71428668.6134452.8991605
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
9440Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k66.56302569.1848742.6218497
2701Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k65.71428668.3277312.6134455
1035Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k66.28571468.8991602.6134454
1030Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k66.28571468.8991602.6134454
2689Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k65.71428668.3193282.6050425
2834Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k65.71428668.3193282.6050425
1026Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k68.64705971.2268912.5798324
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "1041 Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "2828 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "9440 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "2701 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "1035 Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k \n", - "1030 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k \n", - "2689 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k \n", - "2834 Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k \n", - "1026 Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "1041 66.285714 \n", - "2828 65.714286 \n", - "51 68.630252 \n", - "9440 66.563025 \n", - "2701 65.714286 \n", - "1035 66.285714 \n", - "1030 66.285714 \n", - "2689 65.714286 \n", - "2834 65.714286 \n", - "1026 68.647059 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "1041 69.193277 \n", - "2828 68.613445 \n", - "51 71.521008 \n", - "9440 69.184874 \n", - "2701 68.327731 \n", - "1035 68.899160 \n", - "1030 68.899160 \n", - "2689 68.319328 \n", - "2834 68.319328 \n", - "1026 71.226891 \n", - "\n", - " Increase count \n", - "1041 2.907563 4 \n", - "2828 2.899160 5 \n", - "51 2.890756 2 \n", - "9440 2.621849 7 \n", - "2701 2.613445 5 \n", - "1035 2.613445 4 \n", - "1030 2.613445 4 \n", - "2689 2.605042 5 \n", - "2834 2.605042 5 \n", - "1026 2.579832 4 " - ] - }, - "execution_count": 330, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "id": "private-conditions", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
126 embeddings - 19k70.09243771.2521011.1596641
136 embeddings - Probase-19k70.09243770.6722690.5798321
4Abstract - 19k67.73949668.0504200.3109241
11Complex-Transe-AbsFirstSent - Probase-19k67.47058867.176471-0.2941181
10Complex-Transe-AbsFirstSent - 19k67.47058866.899160-0.5714291
3Transe - 19k64.57983266.8907562.3109241
9Transe - Probase-19k64.57983266.8907562.3109241
7Transe - Probase64.57983266.5966392.0168071
8Complex - Probase-19k64.57983265.4453780.8655461
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "12 6 embeddings - 19k \n", - "13 6 embeddings - Probase-19k \n", - "4 Abstract - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "7 Transe - Probase \n", - "8 Complex - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "12 70.092437 \n", - "13 70.092437 \n", - "4 67.739496 \n", - "11 67.470588 \n", - "10 67.470588 \n", - "3 64.579832 \n", - "9 64.579832 \n", - "7 64.579832 \n", - "8 64.579832 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "12 71.252101 \n", - "13 70.672269 \n", - "4 68.050420 \n", - "11 67.176471 \n", - "10 66.899160 \n", - "3 66.890756 \n", - "9 66.890756 \n", - "7 66.596639 \n", - "8 65.445378 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "12 1.159664 1 \n", - "13 0.579832 1 \n", - "4 0.310924 1 \n", - "11 -0.294118 1 \n", - "10 -0.571429 1 \n", - "3 2.310924 1 \n", - "9 2.310924 1 \n", - "7 2.016807 1 \n", - "8 0.865546 1 " - ] - }, - "execution_count": 331, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs[allCombs['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "markdown", - "id": "heard-think", - "metadata": {}, - "source": [ - "## RF" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "id": "trying-liabilities", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "123c20d4e60b4e3e8b09c0e0e46efc1e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.12605063.672269-1.4537821
1Text 2 props - 19k61.89916063.3445381.4453781
2Complex - 19k66.61344564.277311-2.3361341
3Transe - 19k66.61344566.310924-0.3025211
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.126050 \n", - "1 61.899160 \n", - "2 66.613445 \n", - "3 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 63.672269 -1.453782 \n", - "1 63.344538 1.445378 \n", - "2 64.277311 -2.336134 \n", - "3 66.310924 -0.302521 \n", - "4 66.008403 -2.890756 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "id": "increased-indonesian", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs1)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "id": "english-brother", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "id": "fantastic-narrow", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
60Abstract - 19k & Abstract First Sentence - 19k72.11764768.327731-3.7899162
138Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k72.10084070.361345-1.7394963
151Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.83193370.378151-1.4537823
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
2114Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k71.81512669.789916-2.0252105
2001Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k71.81512669.798319-2.0168075
2000Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k71.81512670.378151-1.4369755
1999Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k71.81512669.495798-2.3193285
1998Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k71.81512669.487395-2.3277315
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "138 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "151 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "2114 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "2001 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "2000 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "1999 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k \n", - "1998 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 73.285714 \n", - "60 72.117647 \n", - "138 72.100840 \n", - "151 71.831933 \n", - "152 71.831933 \n", - "2114 71.815126 \n", - "2001 71.815126 \n", - "2000 71.815126 \n", - "1999 71.815126 \n", - "1998 71.815126 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 70.075630 \n", - "60 68.327731 \n", - "138 70.361345 \n", - "151 70.378151 \n", - "152 71.252101 \n", - "2114 69.789916 \n", - "2001 69.798319 \n", - "2000 70.378151 \n", - "1999 69.495798 \n", - "1998 69.487395 \n", - "\n", - " Increase count \n", - "5 -3.210084 1 \n", - "60 -3.789916 2 \n", - "138 -1.739496 3 \n", - "151 -1.453782 3 \n", - "152 -0.579832 3 \n", - "2114 -2.025210 5 \n", - "2001 -2.016807 5 \n", - "2000 -1.436975 5 \n", - "1999 -2.319328 5 \n", - "1998 -2.327731 5 " - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 259, - "id": "brown-punishment", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
681Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k70.66386671.2605040.5966394
218Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.22689171.2521010.0252103
1575Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.23529471.2521010.0168075
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
3884Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k68.31092471.2352942.9243706
129Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k69.76470671.2352941.4705883
217Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.22689170.974790-0.2521013
604Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.52941270.966387-0.5630254
7207Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k68.60504270.9663872.3613457
690Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k70.66386670.9663870.3025214
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "681 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k \n", - "218 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "1575 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "3884 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "129 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k \n", - "217 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "604 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "7207 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "690 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "681 70.663866 \n", - "218 71.226891 \n", - "1575 71.235294 \n", - "152 71.831933 \n", - "3884 68.310924 \n", - "129 69.764706 \n", - "217 71.226891 \n", - "604 71.529412 \n", - "7207 68.605042 \n", - "690 70.663866 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "681 71.260504 \n", - "218 71.252101 \n", - "1575 71.252101 \n", - "152 71.252101 \n", - "3884 71.235294 \n", - "129 71.235294 \n", - "217 70.974790 \n", - "604 70.966387 \n", - "7207 70.966387 \n", - "690 70.966387 \n", - "\n", - " Increase count \n", - "681 0.596639 4 \n", - "218 0.025210 3 \n", - "1575 0.016807 5 \n", - "152 -0.579832 3 \n", - "3884 2.924370 6 \n", - "129 1.470588 3 \n", - "217 -0.252101 3 \n", - "604 -0.563025 4 \n", - "7207 2.361345 7 \n", - "690 0.302521 4 " - ] - }, - "execution_count": 259, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 260, - "id": "considerable-syndication", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
13048Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210170.3529416.1008409
13084Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210169.2100844.9579839
14022Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.52941269.1764714.6470599
13861Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.24369768.8907564.6470599
7551Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k63.09243767.7226894.6302527
13058Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210168.6050424.3529419
6500Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k63.68907668.0336134.3445387
7537Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k63.09243767.4369754.3445387
7570Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k63.09243767.4285714.3361347
6499Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k63.68907668.0252104.3361347
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "13048 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "13084 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "14022 Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "13861 Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7551 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "13058 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "6500 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7537 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7570 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k \n", - "6499 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "13048 64.252101 \n", - "13084 64.252101 \n", - "14022 64.529412 \n", - "13861 64.243697 \n", - "7551 63.092437 \n", - "13058 64.252101 \n", - "6500 63.689076 \n", - "7537 63.092437 \n", - "7570 63.092437 \n", - "6499 63.689076 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "13048 70.352941 \n", - "13084 69.210084 \n", - "14022 69.176471 \n", - "13861 68.890756 \n", - "7551 67.722689 \n", - "13058 68.605042 \n", - "6500 68.033613 \n", - "7537 67.436975 \n", - "7570 67.428571 \n", - "6499 68.025210 \n", - "\n", - " Increase count \n", - "13048 6.100840 9 \n", - "13084 4.957983 9 \n", - "14022 4.647059 9 \n", - "13861 4.647059 9 \n", - "7551 4.630252 7 \n", - "13058 4.352941 9 \n", - "6500 4.344538 7 \n", - "7537 4.344538 7 \n", - "7570 4.336134 7 \n", - "6499 4.336134 7 " - ] - }, - "execution_count": 260, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 261, - "id": "binary-committee", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
11Complex-Transe-AbsFirstSent - Probase-19k70.04201770.6302520.5882351
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
10Complex-Transe-AbsFirstSent - 19k70.04201768.302521-1.7394961
136 embeddings - Probase-19k68.90756368.042017-0.8655461
126 embeddings - 19k68.90756366.857143-2.0504201
6Complex - Probase66.61344566.596639-0.0168071
7Transe - Probase66.61344566.596639-0.0168071
3Transe - 19k66.61344566.310924-0.3025211
9Transe - Probase-19k66.61344566.008403-0.6050421
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "6 Complex - Probase \n", - "7 Transe - Probase \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "11 70.042017 \n", - "5 73.285714 \n", - "10 70.042017 \n", - "13 68.907563 \n", - "12 68.907563 \n", - "6 66.613445 \n", - "7 66.613445 \n", - "3 66.613445 \n", - "9 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "11 70.630252 \n", - "5 70.075630 \n", - "10 68.302521 \n", - "13 68.042017 \n", - "12 66.857143 \n", - "6 66.596639 \n", - "7 66.596639 \n", - "3 66.310924 \n", - "9 66.008403 \n", - "4 66.008403 \n", - "\n", - " Increase count \n", - "11 0.588235 1 \n", - "5 -3.210084 1 \n", - "10 -1.739496 1 \n", - "13 -0.865546 1 \n", - "12 -2.050420 1 \n", - "6 -0.016807 1 \n", - "7 -0.016807 1 \n", - "3 -0.302521 1 \n", - "9 -0.605042 1 \n", - "4 -2.890756 1 " - ] - }, - "execution_count": 261, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1[allCombs1['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "approximate-event", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "successful-spider", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "moral-thought", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "western-easter", - "metadata": {}, - "source": [ - "# Generate Embeddings Files" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "nervous-physiology", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = pd.concat([wordSim353AnnotDF_New2[['word1_kg_id', 'Word 1']], wordSim353AnnotDF_New2[['word2_kg_id', 'Word 2']].rename(columns={'Word 2': 'Word 1', 'word2_kg_id': 'word1_kg_id'})])" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "neither-hammer", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = wordList[~wordList.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "welsh-indiana", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in embedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "processed-wonder", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in newEmbedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings_new_attempt1.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "psychological-template", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['Word 1'].to_csv('../data/wordsim353_embeddings_words.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prime-munich", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assigned-appliance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "severe-textbook", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prompt-orlando", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "otherwise-qatar", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "inclusive-brick", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "micro-kernel", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "optical-atlas", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assured-means", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-fever", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opened-baker", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "supposed-charm", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "215px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Retrofitting using 19k + 19k dataset.ipynb b/Retrofitting using 19k + 19k dataset.ipynb deleted file mode 100644 index 9dd967d..0000000 --- a/Retrofitting using 19k + 19k dataset.ipynb +++ /dev/null @@ -1,1689 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "dynamic-generator", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn.metrics.pairwise import euclidean_distances\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "objective-saturday", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmbAndCosSim.csv\")\n", - "p279Seeded_SiblingsDF3_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmbAndCosSim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "joint-magnet", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1idnode1_labellabelnode2_labelsentnode1_embnode2_embbert2SentSim...BERT_abstract_emb_rightBERT_abstract_firstSent_emb_righttextEmb_7props_lefttextEmb_7props_righttextEmb_2props_lefttextEmb_2props_righttextEmb_7props_cosSimtextEmb_2props_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSim
0Q100171002Q1503443Q1503443-P279-Q100171002-8282ae74-0secrecyP279concealmentsecrecy is concealment[ 4.83600467e-01 1.25958338e-01 1.84784138e+...[ 3.61319035e-01 1.03393383e-01 1.50166345e+...0.901134...NaNNaN[0.87660795, 0.4991357, -0.39552155, 0.7046891...[0.36156428, -0.015657336, -0.14483449, -0.253...[0.79082793, 0.53679967, -0.3825465, 0.6778466...[0.36156428, -0.015657336, -0.14483449, -0.253...0.8326020.823419-1.000000-1.000000
1Q1002697Q49850Q49850-P279-Q1002697-0c52cf68-0journalP279periodicaljournal is periodical[-5.87019742e-01 -3.76376987e-01 2.21003819e+...[-2.23196611e-01 -4.97725368e-01 2.20271492e+...0.863449...[-0.28667202591896057, -0.4099476933479309, 0....[-0.25435054302215576, -0.92085862159729, 1.68...[1.256428, 0.3254261, -0.26960722, 0.101883665...[0.92698413, 0.32396156, -0.7647308, 0.6973268...[1.256428, 0.3254261, -0.26960722, 0.101883665...[1.0344226, 0.39984593, -0.76180136, 0.8256311...0.7426380.734428-1.000000-1.000000
2Q101998Q4421Q4421-P279-Q101998-d0983886-0forestP279biomeforest is biome[-4.80742343e-02 -4.51617390e-01 1.48896754e+...[ 5.09670794e-01 -4.42380428e-01 1.53245163e+...0.507148...[0.12320789694786072, 0.2723684310913086, 0.05...[0.5991100072860718, 0.15195603668689728, 0.59...[0.8141036, 0.14491142, -0.59703183, 0.335001,...[-0.16750671, -0.17960861, -0.58211946, -0.687...[0.91628444, 0.104261845, -0.49683735, 0.21296...[-0.13534825, -0.23398273, -0.5165668, -0.7297...0.6470310.7076110.5080600.455747
3Q102165Q2294Q2294-P279-Q102165-0893a180-0protonP279nucleonproton is nucleon[-3.39149237e-01 2.01575115e-01 1.08608294e+...[-6.87960759e-02 -1.65659860e-01 9.53789592e-...0.798707...[0.17410606145858765, 0.6839145421981812, -0.8...[-0.04499293863773346, 0.6921464204788208, -0....[0.469377, 0.7162001, -0.36740896, 0.76742333,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...[0.4080446, 0.7498908, -0.2665757, 0.74437106,...[-0.11307852, 0.65730673, -0.13959256, 1.46633...0.8365310.8475910.8559590.770030
4Q102205Q11435Q11435-P279-Q102205-7b448d05-0liquidP279fluidliquid is fluid[-5.40423356e-02 -1.01775277e+00 2.21057415e+...[ 1.30038410e-01 -8.53226840e-01 2.37821031e+...0.934246...[0.4393930733203888, 0.7159943580627441, 0.647...[0.5091343522071838, -0.05845202878117561, 1.0...[-0.19995248, 0.65605164, -0.14234662, 0.43931...[0.4293771, 1.1976917, 0.04422909, 0.5975481, ...[-0.45549682, 0.73478854, -0.1980287, 0.436793...[0.33631665, 1.1661042, 0.13744242, 0.6776439,...0.7655890.7803420.7526930.515319
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 id node1_label \\\n", - "0 Q100171002 Q1503443 Q1503443-P279-Q100171002-8282ae74-0 secrecy \n", - "1 Q1002697 Q49850 Q49850-P279-Q1002697-0c52cf68-0 journal \n", - "2 Q101998 Q4421 Q4421-P279-Q101998-d0983886-0 forest \n", - "3 Q102165 Q2294 Q2294-P279-Q102165-0893a180-0 proton \n", - "4 Q102205 Q11435 Q11435-P279-Q102205-7b448d05-0 liquid \n", - "\n", - " label node2_label sent \\\n", - "0 P279 concealment secrecy is concealment \n", - "1 P279 periodical journal is periodical \n", - "2 P279 biome forest is biome \n", - "3 P279 nucleon proton is nucleon \n", - "4 P279 fluid liquid is fluid \n", - "\n", - " node1_emb \\\n", - "0 [ 4.83600467e-01 1.25958338e-01 1.84784138e+... \n", - "1 [-5.87019742e-01 -3.76376987e-01 2.21003819e+... \n", - "2 [-4.80742343e-02 -4.51617390e-01 1.48896754e+... \n", - "3 [-3.39149237e-01 2.01575115e-01 1.08608294e+... \n", - "4 [-5.40423356e-02 -1.01775277e+00 2.21057415e+... \n", - "\n", - " node2_emb bert2SentSim ... \\\n", - "0 [ 3.61319035e-01 1.03393383e-01 1.50166345e+... 0.901134 ... \n", - "1 [-2.23196611e-01 -4.97725368e-01 2.20271492e+... 0.863449 ... \n", - "2 [ 5.09670794e-01 -4.42380428e-01 1.53245163e+... 0.507148 ... \n", - "3 [-6.87960759e-02 -1.65659860e-01 9.53789592e-... 0.798707 ... \n", - "4 [ 1.30038410e-01 -8.53226840e-01 2.37821031e+... 0.934246 ... \n", - "\n", - " BERT_abstract_emb_right \\\n", - "0 NaN \n", - "1 [-0.28667202591896057, -0.4099476933479309, 0.... \n", - "2 [0.12320789694786072, 0.2723684310913086, 0.05... \n", - "3 [0.17410606145858765, 0.6839145421981812, -0.8... \n", - "4 [0.4393930733203888, 0.7159943580627441, 0.647... \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 [-0.25435054302215576, -0.92085862159729, 1.68... \n", - "2 [0.5991100072860718, 0.15195603668689728, 0.59... \n", - "3 [-0.04499293863773346, 0.6921464204788208, -0.... \n", - "4 [0.5091343522071838, -0.05845202878117561, 1.0... \n", - "\n", - " textEmb_7props_left \\\n", - "0 [0.87660795, 0.4991357, -0.39552155, 0.7046891... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.8141036, 0.14491142, -0.59703183, 0.335001,... \n", - "3 [0.469377, 0.7162001, -0.36740896, 0.76742333,... \n", - "4 [-0.19995248, 0.65605164, -0.14234662, 0.43931... \n", - "\n", - " textEmb_7props_right \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... \n", - "1 [0.92698413, 0.32396156, -0.7647308, 0.6973268... \n", - "2 [-0.16750671, -0.17960861, -0.58211946, -0.687... \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... \n", - "4 [0.4293771, 1.1976917, 0.04422909, 0.5975481, ... \n", - "\n", - " textEmb_2props_left \\\n", - "0 [0.79082793, 0.53679967, -0.3825465, 0.6778466... \n", - "1 [1.256428, 0.3254261, -0.26960722, 0.101883665... \n", - "2 [0.91628444, 0.104261845, -0.49683735, 0.21296... \n", - "3 [0.4080446, 0.7498908, -0.2665757, 0.74437106,... \n", - "4 [-0.45549682, 0.73478854, -0.1980287, 0.436793... \n", - "\n", - " textEmb_2props_right textEmb_7props_cosSim \\\n", - "0 [0.36156428, -0.015657336, -0.14483449, -0.253... 0.832602 \n", - "1 [1.0344226, 0.39984593, -0.76180136, 0.8256311... 0.742638 \n", - "2 [-0.13534825, -0.23398273, -0.5165668, -0.7297... 0.647031 \n", - "3 [-0.11307852, 0.65730673, -0.13959256, 1.46633... 0.836531 \n", - "4 [0.33631665, 1.1661042, 0.13744242, 0.6776439,... 0.765589 \n", - "\n", - " textEmb_2props_cosSim BERT_abstract_cosSim BERT_abstract_firstSent_cosSim \n", - "0 0.823419 -1.000000 -1.000000 \n", - "1 0.734428 -1.000000 -1.000000 \n", - "2 0.707611 0.508060 0.455747 \n", - "3 0.847591 0.855959 0.770030 \n", - "4 0.780342 0.752693 0.515319 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "incorporated-ambassador", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['node2', 'node1', 'id', 'node1_label', 'label', 'node2_label', 'sent',\n", - " 'node1_emb', 'node2_emb', 'bert2SentSim', 'abstract',\n", - " 'abstract_firstSent', 'BERT_abstract_emb',\n", - " 'BERT_abstract_firstSent_emb', 'abstract_right',\n", - " 'abstract_firstSent_right', 'BERT_abstract_emb_right',\n", - " 'BERT_abstract_firstSent_emb_right', 'textEmb_7props_left',\n", - " 'textEmb_7props_right', 'textEmb_2props_left', 'textEmb_2props_right',\n", - " 'textEmb_7props_cosSim', 'textEmb_2props_cosSim',\n", - " 'BERT_abstract_cosSim', 'BERT_abstract_firstSent_cosSim'],\n", - " dtype='object')" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "original-grass", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 19454.000000\n", - "mean 0.602876\n", - "std 0.146181\n", - "min 0.064503\n", - "25% 0.493110\n", - "50% 0.597949\n", - "75% 0.711631\n", - "max 1.000000\n", - "Name: bert2SentSim, dtype: float64" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p279WordSimSeededDF_wabs_text.bert2SentSim.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "removed-occupation", - "metadata": {}, - "source": [ - "# Retrofitting Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "english-english", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchEmbeddings(df):\n", - " embedDict = {}\n", - " for _, row in df.iterrows():\n", - " embedDict[row.node1_label] = row.textEmb_7props_left\n", - " embedDict[row.node2_label] = row.textEmb_7props_right\n", - " for key, val in embedDict.items():\n", - " temp = np.array([float(val1) for val1 in val[1:-1].split(',')])\n", - " temp2 = temp**2\n", - " embedDict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - "# embedDict[key] = temp\n", - " return embedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "orange-person", - "metadata": {}, - "outputs": [], - "source": [ - "def fetchNeighbours(df):\n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1_label not in neighboursDict:\n", - " neighboursDict[row.node1_label] = []\n", - " neighboursDict[row.node1_label].append((row.node2_label, row.bert2SentSim))\n", - " \n", - " if row.node2_label not in neighboursDict:\n", - " neighboursDict[row.node2_label] = []\n", - " neighboursDict[row.node2_label].append((row.node1_label, row.bert2SentSim))\n", - " return neighboursDict" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "joined-kazakhstan", - "metadata": {}, - "outputs": [], - "source": [ - "def retrofit(embedDict, neighDict):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " neighbs = neighDict[word]\n", - "# print([embedDict[neighb[0]] for neighb in neighbs])\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])) / ((len(neighbs)) + sum([neighb[1] for neighb in neighbs]))\n", - "# newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])) / ((len(neighbs))**2 + sum([neighb[1] for neighb in neighbs]))\n", - "# newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])) / ((len(neighbs))**0.5 + sum([neighb[1] for neighb in neighbs]))\n", - " return newEmbedDict" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "collected-performance", - "metadata": {}, - "outputs": [], - "source": [ - "def determineDistances(embedDict, newEmbedDict):\n", - " dist = []\n", - " for word in embedDict.keys():\n", - " dist.append(euclidean_distances([embedDict[word]], [newEmbedDict[word]])[0][0])\n", - " return dist" - ] - }, - { - "cell_type": "markdown", - "id": "later-dimension", - "metadata": {}, - "source": [ - "# Attempts" - ] - }, - { - "cell_type": "markdown", - "id": "serious-milan", - "metadata": {}, - "source": [ - "## Sample attempt" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "substantial-aggregate", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text_sample = p279WordSimSeededDF_wabs_text[:1000]" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "id": "analyzed-passion", - "metadata": {}, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "id": "japanese-defense", - "metadata": {}, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "dying-nigeria", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "reduced-avenue", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1034" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "advised-hollywood", - "metadata": {}, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "authentic-greene", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 1034.000000\n", - "mean 0.281990\n", - "std 0.054759\n", - "min 0.069792\n", - "25% 0.244698\n", - "50% 0.278019\n", - "75% 0.319656\n", - "max 0.450444\n", - "dtype: float64" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "variable-transportation", - "metadata": {}, - "source": [ - "## ChildPar dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "id": "helpful-wellington", - "metadata": {}, - "outputs": [], - "source": [ - "# temp1 = p279WordSimSeededDF_wabs_text.apply(lambda p: (p.node1, p.node1_label), axis=1).to_list() + p279WordSimSeededDF_wabs_text.apply(lambda p: (p.node2, p.node2_label), axis=1).to_list()" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "id": "sorted-capability", - "metadata": {}, - "outputs": [], - "source": [ - "# temp1 = p279WordSimSeededDF_wabs_text.apply(lambda p: (p.node1, p.node1_label), axis=1).to_list() + p279WordSimSeededDF_wabs_text.apply(lambda p: (p.node2, p.node2_label), axis=1).to_list()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "senior-psychology", - "metadata": {}, - "outputs": [], - "source": [ - "# temp1Dict = {}\n", - "# for node, val in temp1:\n", - "# print(node, val)\n", - "# if node not in temp1Dict:\n", - "# temp1Dict[node] = val\n", - "# else:\n", - "# if temp1Dict[node] != val:\n", - "# print(node,val)" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "frequent-sight", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "18762" - ] - }, - "execution_count": 111, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# len(temp1Dict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "central-spyware", - "metadata": {}, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "white-genesis", - "metadata": {}, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(p279WordSimSeededDF_wabs_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "id": "registered-original", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "id": "experienced-conspiracy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "18860" - ] - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "id": "every-interface", - "metadata": {}, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 131, - "id": "specified-berry", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 18860.000000\n", - "mean 0.283712\n", - "std 0.056573\n", - "min 0.050719\n", - "25% 0.246137\n", - "50% 0.281897\n", - "75% 0.319687\n", - "max 0.564922\n", - "dtype: float64" - ] - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "divine-chair", - "metadata": {}, - "source": [ - "## Concatenated ChildPar + Siblings Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "fourth-exhibit", - "metadata": {}, - "outputs": [], - "source": [ - "embedDict = fetchEmbeddings(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "hungry-cream", - "metadata": {}, - "outputs": [], - "source": [ - "neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "leading-invasion", - "metadata": {}, - "outputs": [], - "source": [ - "newEmbedDict = retrofit(embedDict, neighDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 143, - "id": "protecting-devon", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "18860" - ] - }, - "execution_count": 143, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(embedDict.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "prescribed-right", - "metadata": {}, - "outputs": [], - "source": [ - "dists = determineDistances(embedDict, newEmbedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 145, - "id": "important-university", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 18860.000000\n", - "mean 0.272088\n", - "std 0.057231\n", - "min 0.050719\n", - "25% 0.231393\n", - "50% 0.267868\n", - "75% 0.308657\n", - "max 0.564922\n", - "dtype: float64" - ] - }, - "execution_count": 145, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(dists).describe()" - ] - }, - { - "cell_type": "markdown", - "id": "single-scope", - "metadata": {}, - "source": [ - "# Correlation" - ] - }, - { - "cell_type": "code", - "execution_count": 146, - "id": "opposite-amino", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353LatestAnnot.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "id": "looking-wonder", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDWord 1Word 2H_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversed
01admissionticket3U3U3U3u3.0U3.00.0000005.53604.4640
12alcoholchemistry3D3D3D4NaN3.0H3.20.4472144.12505.8750
23aluminummetal2I3S2I3i2.0I2.40.5477236.62503.3750
34announcementeffort4NaN4NaN4NaN4NaN4.0NaN4.00.0000002.06257.9375
45announcementnews2I2I3I2i2.0I2.20.4472147.18752.8125
\n", - "
" - ], - "text/plain": [ - " ID Word 1 Word 2 H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 1 admission ticket 3 U 3 U 3 U 3 \n", - "1 2 alcohol chemistry 3 D 3 D 3 D 4 \n", - "2 3 aluminum metal 2 I 3 S 2 I 3 \n", - "3 4 announcement effort 4 NaN 4 NaN 4 NaN 4 \n", - "4 5 announcement news 2 I 2 I 3 I 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed \n", - "0 u 3.0 U 3.0 0.000000 5.5360 4.4640 \n", - "1 NaN 3.0 H 3.2 0.447214 4.1250 5.8750 \n", - "2 i 2.0 I 2.4 0.547723 6.6250 3.3750 \n", - "3 NaN 4.0 NaN 4.0 0.000000 2.0625 7.9375 \n", - "4 i 2.0 I 2.2 0.447214 7.1875 2.8125 " - ] - }, - "execution_count": 147, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "id": "choice-hurricane", - "metadata": {}, - "outputs": [], - "source": [ - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "secret-photography", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 150, - "id": "patent-blade", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['Word 1'] in embedDict and p['Word 2'] in embedDict, axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "referenced-gossip", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['Word 1']]).reshape(1,-1), np.array(embedDict[p['Word 2']]).reshape(1,-1))[0][0], axis=1)\n" - ] - } - ], - "source": [ - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['Word 1']]).reshape(1,-1), np.array(embedDict[p['Word 2']]).reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 152, - "id": "traditional-bailey", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['Word 1']]).reshape(1,-1), np.array(newEmbedDict[p['Word 2']]).reshape(1,-1))[0][0], axis=1)\n" - ] - } - ], - "source": [ - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['Word 1']]).reshape(1,-1), np.array(newEmbedDict[p['Word 2']]).reshape(1,-1))[0][0], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 153, - "id": "hollow-increase", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDWord 1Word 2H_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedcategorytextOldtextNew
23aluminummetal2I3S2I3i2.0I2.40.5477236.62503.3750M0.6407050.768632
45announcementnews2I2I3I2i2.0I2.20.4472147.18752.8125M0.8556660.867691
56announcementproduction4NaN4NaN4NaN4NaN4.0NaN4.00.0000001.68758.3125U0.6225750.690300
67announcementwarning2I3I3I3i2.0I2.60.5477234.62505.3750M0.6668380.741316
910architecturecentury4NaN3H4NaN4NaN4.0NaN3.80.4472141.92908.0710U0.2647640.458752
\n", - "
" - ], - "text/plain": [ - " ID Word 1 Word 2 H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "2 3 aluminum metal 2 I 3 S 2 I 3 \n", - "4 5 announcement news 2 I 2 I 3 I 2 \n", - "5 6 announcement production 4 NaN 4 NaN 4 NaN 4 \n", - "6 7 announcement warning 2 I 3 I 3 I 3 \n", - "9 10 architecture century 4 NaN 3 H 4 NaN 4 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed category textOld \\\n", - "2 i 2.0 I 2.4 0.547723 6.6250 3.3750 M 0.640705 \n", - "4 i 2.0 I 2.2 0.447214 7.1875 2.8125 M 0.855666 \n", - "5 NaN 4.0 NaN 4.0 0.000000 1.6875 8.3125 U 0.622575 \n", - "6 i 2.0 I 2.6 0.547723 4.6250 5.3750 M 0.666838 \n", - "9 NaN 4.0 NaN 3.8 0.447214 1.9290 8.0710 U 0.264764 \n", - "\n", - " textNew \n", - "2 0.768632 \n", - "4 0.867691 \n", - "5 0.690300 \n", - "6 0.741316 \n", - "9 0.458752 " - ] - }, - "execution_count": 153, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "id": "charming-double", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - } - ], - "source": [ - "wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - "wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)" - ] - }, - { - "cell_type": "code", - "execution_count": 155, - "id": "orange-justice", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "204" - ] - }, - "execution_count": 155, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New2)" - ] - }, - { - "cell_type": "code", - "execution_count": 156, - "id": "strong-steal", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "id": "satisfied-crisis", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.40669723469267965, pvalue=2.159786077235558e-16)" - ] - }, - "execution_count": 157, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 158, - "id": "encouraging-theorem", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.40392814495955587, pvalue=3.436121838707459e-16)" - ] - }, - "execution_count": 158, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 159, - "id": "alert-priest", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.4470576546988487, pvalue=2.8893276225801627e-21)" - ] - }, - "execution_count": 159, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])" - ] - }, - { - "cell_type": "code", - "execution_count": 160, - "id": "genetic-visiting", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.4545191133336838, pvalue=6.291422918165968e-22)" - ] - }, - "execution_count": 160, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])" - ] - }, - { - "cell_type": "code", - "execution_count": 161, - "id": "effective-bronze", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import accuracy_score" - ] - }, - { - "cell_type": "code", - "execution_count": 162, - "id": "perfect-priority", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.5637254901960784" - ] - }, - "execution_count": 162, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])" - ] - }, - { - "cell_type": "code", - "execution_count": 163, - "id": "missing-track", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.4803921568627451" - ] - }, - "execution_count": 163, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])" - ] - }, - { - "cell_type": "markdown", - "id": "western-easter", - "metadata": {}, - "source": [ - "# Generate Embeddings Files" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "id": "nervous-physiology", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = pd.concat([wordSim353AnnotDF_New2['Word 1'], wordSim353AnnotDF_New2['Word 2']])" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "neither-hammer", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = wordList[~wordList.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "welsh-indiana", - "metadata": {}, - "outputs": [], - "source": [ - "wordList.apply(lambda p: \"\\t\".join([str(p1) for p1 in embedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 164, - "id": "processed-wonder", - "metadata": {}, - "outputs": [], - "source": [ - "wordList.apply(lambda p: \"\\t\".join([str(p1) for p1 in newEmbedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings_new_attempt1.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "id": "psychological-template", - "metadata": {}, - "outputs": [], - "source": [ - "wordList.to_csv('../data/wordsim353_embeddings_words.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prime-munich", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assigned-appliance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "severe-textbook", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prompt-orlando", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "otherwise-qatar", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "inclusive-brick", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "micro-kernel", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "optical-atlas", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assured-means", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-fever", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opened-baker", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "supposed-charm", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Retrofitting using Master datasets-Copy1.ipynb b/Retrofitting using Master datasets-Copy1.ipynb deleted file mode 100644 index 3567de4..0000000 --- a/Retrofitting using Master datasets-Copy1.ipynb +++ /dev/null @@ -1,8003 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "dynamic-generator", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import scipy.stats as stats\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from tqdm.notebook import tqdm\n", - "from itertools import combinations\n", - "from math import comb\n", - "from time import time\n", - "from datetime import date\n", - "import warnings\n", - "from joblib import Parallel, delayed\n", - "\n", - "from sklearn.model_selection import StratifiedKFold, KFold\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC, SVR\n", - "from sklearn.metrics import accuracy_score, mean_squared_error, classification_report, plot_confusion_matrix\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "\n", - "warnings.filterwarnings('ignore')\n", - "# pd.set_option('mode.chained_assignment', None)" - ] - }, - { - "cell_type": "markdown", - "id": "clinical-orleans", - "metadata": {}, - "source": [ - "# Retrofitting Pre-Req Class Definitions" - ] - }, - { - "cell_type": "markdown", - "id": "continued-meeting", - "metadata": {}, - "source": [ - "## Utils" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "ultimate-worship", - "metadata": {}, - "outputs": [], - "source": [ - "class Utils:\n", - " \"\"\"\n", - " This contains all the utility functions needed by any part of retrofitting\n", - " \"\"\"\n", - " _today = date.today()\n", - " today_date = _today.strftime(\"%b_%d_%Y\")\n", - " LABELS = ['I','U','M']\n", - " \n", - " @classmethod\n", - " def normalize(cls, embed_dict):\n", - " for key, val in embed_dict.items():\n", - " temp = np.array([float(val1) for val1 in val])\n", - " temp2 = temp**2\n", - " embed_dict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - " return embed_dict\n", - " \n", - " @classmethod\n", - " def fetch_embeddings(cls, df):\n", - " embed_dict = {}\n", - " for _, row in df.iterrows():\n", - " embed_dict[row.node] = row.value\n", - " return normalize(embed_dict)\n", - " \n", - " @classmethod\n", - " def fill_coverage(cls, embed_dict):\n", - " # TODO: Coverage for all datasets\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " wordSim353AnnotDF_set = set(wordSim353AnnotDF_New['word1_kg_id'].to_list() + wordSim353AnnotDF_New['word2_kg_id'].to_list())\n", - " embed_size = len(embed_dict[next(iter(embed_dict))])\n", - " count = 0\n", - " for word in wordSim353AnnotDF_set:\n", - " if word not in embed_dict:\n", - " embed_dict[word] = np.zeros((embed_size))\n", - " count += 1\n", - " print(f\"Added {count} corrections\")\n", - " return embed_dict\n", - " \n", - " @classmethod\n", - " def check_coverage(cls, embed_dict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " wordSim353AnnotDF_set = set(wordSim353AnnotDF_New['word1_kg_id'].to_list() + wordSim353AnnotDF_New['word2_kg_id'].to_list())\n", - " embed_size = len(embed_dict[next(iter(embed_dict))])\n", - " count = 0\n", - " for word in wordSim353AnnotDF_set:\n", - " if word not in embed_dict:\n", - " count += 1\n", - " return (len(wordSim353AnnotDF_New) - count)\n", - " \n", - " @classmethod\n", - " def determine_distances(cls, embed_dict, new_embed_dict):\n", - " dist = []\n", - " for word in embed_dict.keys():\n", - " dist.append(euclidean_distances([embed_dict[word]], [new_embed_dict[word]])[0][0])\n", - " return dist\n", - " \n", - " @classmethod\n", - " def serialize_embedding_dict(cls, embed_dict):\n", - " for key2 in embed_dict.keys():\n", - " embed_dict[key2] = embed_dict[key2].tolist() if type(embed_dict[key2]) != list else embed_dict[key2]\n", - " return embed_dict\n", - " \n", - " @classmethod\n", - " def deserialize_embedding_dict(cls, embed_dict):\n", - " for key2 in embed_dict.keys():\n", - " embed_dict[key2] = np.array(embed_dict[key2])\n", - " return embed_dict\n", - " \n", - " @classmethod\n", - " def label_samples(cls, score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - " \n", - " @classmethod\n", - " def determine_cos_sim(cls, emb1, emb2):\n", - " return cosine_similarity(\n", - " np.array(emb1).reshape(1,-1), \n", - " np.array(emb2).reshape(1,-1)\n", - " )[0][0]\n", - " " - ] - }, - { - "cell_type": "markdown", - "id": "stuffed-rebate", - "metadata": {}, - "source": [ - "## InputEmbeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "hollywood-stomach", - "metadata": {}, - "outputs": [], - "source": [ - "class InputEmbeddings:\n", - " \"\"\"\n", - " Instance variables:\n", - " - embed_dict_master - holds all qnode to embedding mappings as a dictionary\n", - " - embedding_names - list of all keys of the above dictionary\n", - " \"\"\"\n", - " def __init__(self, has_embeddings_include: bool = False):\n", - " self.embed_dict_master = {}\n", - " self.embedding_names = ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent']\n", - " if has_embeddings_include: # TODO\n", - " self.embedding_names += ['h', 'a', 's']\n", - " self.embedding_lengths = {}\n", - " \n", - " for emb_key in tqdm(self.embedding_names, desc='Input Embeddings'):\n", - " self.embed_dict_master[emb_key] = self.fetch_embedding(emb_key)\n", - " \n", - " self.fetch_embedding_stats()\n", - " print(\"Fetched all input embeddings\")\n", - "\n", - " def fetch_embedding(self, emb_key):\n", - " return Utils.fill_coverage(\n", - " Utils.deserialize_embedding_dict(\n", - " json.load(open('../data/Master_P279_dataset/embeddings/'+emb_key+'_orig_embedding_dict_updated.json'))\n", - " )\n", - " )\n", - "\n", - " def fetch_embedding_stats(self):\n", - " for emb_name in embed_dict_master.keys():\n", - " embedding_lengths[emb_name] = len(next(iter(embedDictMaster[emb_name].values())))\n", - " print(f\"Embedding: {emb_name}, Length: {embedding_lengths[emb_name]}\")" - ] - }, - { - "cell_type": "markdown", - "id": "civil-exhaust", - "metadata": {}, - "source": [ - "## NeighborDatasets" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "saving-banking", - "metadata": {}, - "outputs": [], - "source": [ - "class NeighborDatasets:\n", - " \"\"\"\n", - " Instance variables:\n", - " - neighbors_dict_master - holds all qnode to neighbor qnode mappings as a dictionary\n", - " - basis_list - list of all keys of the above dictionary\n", - " \"\"\"\n", - " \n", - " def __init__(self, class_datasets_fetch: bool = False, probase_datasets_fetch: bool = False):\n", - " self.neighbors_dict_master = {}\n", - " \n", - " pbar = tqdm(desc='Neighbor Datasets', total = \n", - " 3 \n", - " + (3 if class_datasets_fetch else 0) \n", - " + (2 if probase_datasets_fetch else 0) \n", - " )\n", - " \n", - " bert_P279_child_par_df = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered.csv')\n", - " bert_P279_siblings_df = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_min_cols_with_desc_dups_removed.csv')\n", - " \n", - " self.neighbors_dict_master['bert_child_par'] = self.fetch_neighbours(bert_P279_child_par_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['bert_siblings'] = self.fetch_neighbours(bert_P279_siblings_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['bert_all'] = self.fetch_neighbours(pd.concat([\n", - " bert_P279_child_par_df, bert_P279_siblings_df\n", - " ]))\n", - " pbar.update(1)\n", - " \n", - " if class_datasets_fetch:\n", - " class_P279_child_par_df = pd.read_csv('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_w_classSim.csv')\n", - " class_P279_child_par_df['similarity_value'] = class_P279_child_par_df['classSim']\n", - " \n", - " class_P279_siblings_df = pd.read_csv('../data/Master_P279_dataset/P279Siblings_transP279_filtered_w_classSim.csv')\n", - " class_P279_siblings_df['similarity_value'] = class_P279_siblings_df['classSim']\n", - " \n", - " self.neighbors_dict_master['class_child_par'] = self.fetch_neighbours(class_P279_child_par_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['class_siblings'] = self.fetch_neighbours(class_P279_siblings_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['class_all'] = self.fetch_neighbours(pd.concat([\n", - " class_P279_child_par_df, class_P279_siblings_df\n", - " ]))\n", - " pbar.update(1)\n", - "\n", - " if probase_datasets_fetch:\n", - " probase_df = self.fetch_probase('../data/probase/probase_WQnodes_subset_and_sim.csv')\n", - " \n", - " self.neighbors_dict_master['probase'] = self.fetch_neighbours(probase_df)\n", - " pbar.update(1)\n", - " self.neighbors_dict_master['probase+bert_all'] = self.fetch_neighbours(pd.concat([\n", - " bert_P279_child_par_df, bert_P279_siblings_df, probase_df\n", - " ]))\n", - " pbar.update(1)\n", - " \n", - " self.basis_list = list(neighbors_dict_master.keys())\n", - " \n", - " pbar.close()\n", - "\n", - " print(f\"Fetched neighbour datasets: {self.basis_list}\")\n", - " \n", - " def process_probase(self, probase_file_path):\n", - " probase_df = pd.read_csv(probase_file_path)\n", - " probase_df = probase_df.rename(columns={'n1_final_qnode': 'node1', 'n2_final_qnode': 'node2', 'sim': 'similarity_value'})\n", - " probase_df['similarity_value'] = 0.5 + 0.5 * probase_df['similarity_value']\n", - " \n", - " return probase_df\n", - " \n", - " def fetch_neighbours(self, df):\n", - " neighbours_dict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighbours_dict:\n", - " neighbours_dict[row.node1] = []\n", - " neighbours_dict[row.node1].append((row.node2, row.bert2SentSim))\n", - "\n", - " if row.node2 not in neighbours_dict:\n", - " neighbours_dict[row.node2] = []\n", - " neighbours_dict[row.node2].append((row.node1, row.bert2SentSim))\n", - "# print(max([len(neigh) for neigh in neighbours_dict.values()]))\n", - " \n", - " return neighbours_dict" - ] - }, - { - "cell_type": "markdown", - "id": "tired-pitch", - "metadata": {}, - "source": [ - "## EvaluationDatasets" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "rough-cliff", - "metadata": {}, - "outputs": [], - "source": [ - "class EvaluationDatasets:\n", - " def __init__(self):\n", - " self.wordsim_df = pd.read_csv('../data/wordsim353_with_r3.csv')\n", - " self.fetch_distribution_stats(\"Wordsim-353\", self.wordsim_df)\n", - " \n", - " self.wiki_cs_df = pd.read_csv('../data/wikidata-cs_categorized.csv')\n", - " self.fetch_distribution_stats(\"Wikidata CS\", self.wiki_cs_df)\n", - " \n", - " self.concept_net_df = pd.read_csv('../data/kgtk_conceptnet_evaluation.csv')\n", - " self.fetch_distribution_stats(\"Concept Net\", self.concept_net_df)\n", - " \n", - " def fetch_distribution_stats(self, name, dataset):\n", - " print(f\"Dataset: {name}\")\n", - " print(dataset.category.value_counts())" - ] - }, - { - "cell_type": "markdown", - "id": "cleared-color", - "metadata": {}, - "source": [ - "## ResultMetrics" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "returning-belarus", - "metadata": {}, - "outputs": [], - "source": [ - "class ResultMetrics:\n", - " \n", - " @classmethod\n", - " def compute_classification_results(\n", - " embed_dict, \n", - " eval_dataset,\n", - " get_output_values: bool,\n", - " old_accuracy = None\n", - " ):\n", - " \"\"\"\n", - " Inputs:\n", - " - embed_dict - dictionary of qnodes with node embeddings as its values\n", - " - eval_dataset - evaluation dataset as pandas dataframe that must have the \n", - " following columns for this function to work correctly:\n", - " * word1_kg_id - Qnode of node1 in the evaluation pair\n", - " * word2_kg_id - Qnode of node2 in the evaluation pair\n", - " * category - Category of the evaluation pair. One of the labels: I/U/M\n", - " Outputs:\n", - " - response_dict - Returns a dictionary with the following keys:\n", - " * covered_pairs - Indicates the number of pairs of the evaluation dataset that the \n", - " embedding dictionary can cover\n", - " \n", - " \"\"\"\n", - " response_dict = {}\n", - " \n", - " eval_dataset = eval_dataset.copy()\n", - "\n", - " missing_words_set = set(\n", - " eval_dataset[eval_dataset.word1_kg_id.apply(lambda p: p not in embed_dict)].word1_kg_id.to_list() \n", - " + eval_dataset[eval_dataset.word2_kg_id.apply(lambda p: p not in embed_dict)].word2_kg_id.to_list()\n", - " )\n", - " \n", - " response_dict['covered_pairs'] = len(eval_dataset)\n", - "\n", - " eval_dataset['embedding_cos_sim'] = eval_dataset.apply(lambda p: determine_cos_sim(embed_dict[p['word1_kg_id']], embed_dict[p['word2_kg_id']]) \n", - " if p['word1_kg_id'] in embed_dict and p['word2_kg_id'] in embed_dict \n", - " else None, axis=1)\n", - " \n", - " eval_dataset['embedding_cos_sim'].fillna(eval_dataset['embedding_cos_sim'].mean(skipna=True), inplace=True)\n", - " \n", - " # Scale abs value of cosine similarities to 1,4 strictly\n", - " eval_dataset['embedding_cos_sim'] = eval_dataset['embedding_cos_sim'].apply(lambda p: 4 - 3 * abs(p))\n", - "\n", - "# response_dict['KT_old_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['Avg'])\n", - "# response_dict['KT_new_vs_Avg'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['Avg'])\n", - "# response_dict['KT_old_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textOld'], wordSim353AnnotDF_New['H_reversed'])\n", - "# response_dict['KT_new_vs_Human'] = stats.kendalltau(wordSim353AnnotDF_New['textNew'], wordSim353AnnotDF_New['H_reversed'])\n", - " response_dict['accuracy'] = 100 * accuracy_score(\n", - " eval_dataset['category'],\n", - " eval_dataset['embedding_cos_sim'].apply(label_samples)\n", - " )\n", - " \n", - " response_dict['classification_report'] = classification_report(\n", - " eval_dataset['category'], \n", - " eval_dataset['embedding_cos_sim'].apply(label_samples), \n", - " output_dict=True\n", - " )\n", - "\n", - " response_dict['conf_matrix'] = confusion_matrix(\n", - " eval_dataset['category'], \n", - " eval_dataset['embedding_cos_sim'].apply(label_samples), \n", - " labels=LABELS\n", - " )\n", - " \n", - " if old_accuracy is not None:\n", - " response_dict['increase_acc'] = response_dict['accuracy'] - old_accuracy\n", - " else:\n", - " response_dict['increase_acc'] = None\n", - " \n", - " if get_output_values:\n", - " response_dict['preds'] = eval_dataset['embedding_cos_sim'].apply(label_samples)\n", - "\n", - " return response_dict, \\\n", - " (response_dict['covered_pairs'], \\\n", - " response_dict['accuracy'], \\\n", - " response_dict['increase_acc'], \\\n", - " \n", - " response_dict['classification_report']['I']['precision'], \\\n", - " response_dict['classification_report']['I']['recall'], \\\n", - " response_dict['classification_report']['I']['f1-score'], \\\n", - " \n", - " response_dict['classification_report']['M']['precision'], \\\n", - " response_dict['classification_report']['M']['recall'], \\\n", - " response_dict['classification_report']['M']['f1-score'], \\\n", - " \n", - " response_dict['classification_report']['U']['precision'], \\\n", - " response_dict['classification_report']['U']['recall'], \\\n", - " response_dict['classification_report']['U']['f1-score'])\n", - " " - ] - }, - { - "cell_type": "markdown", - "id": "flying-raleigh", - "metadata": {}, - "source": [ - "## RetrofittingProcedures" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "interior-incidence", - "metadata": {}, - "outputs": [], - "source": [ - "class RetrofittingProcedures:\n", - " \n", - " np_label_samples = np.vectorize(Utils.label_samples)\n", - " \n", - " @classmethod\n", - " def retrofit(embed_dict, neighbors_dict, weight_case, weight_assignment=False):\n", - " new_embed_dict = {}\n", - " for word in embed_dict.keys():\n", - " if word in neighbors_dict:\n", - " neighbs = neighbors_dict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embed_dict, neighbs))\n", - " if len(neighbs) == 0:\n", - " new_embed_dict[word] = embed_dict[word]\n", - " continue\n", - " if weight_assignment:\n", - " sum_of_sims = sum([neighb[1] for neighb in neighbs])\n", - " sum_of_embs = sum([embed_dict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " else:\n", - " sum_of_sims = sum([1 for neighb in neighbs])\n", - " sum_of_embs = sum([embed_dict[neighb[0]] for neighb in neighbs])\n", - "\n", - " if weight_case == 1:\n", - " new_embed_dict[word] = (embed_dict[word] * (len(neighbs)) + sum_of_embs) / ((len(neighbs)) + sum_of_sims)\n", - " elif weight_case == 2:\n", - " new_embed_dict[word] = (embed_dict[word] * (len(neighbs))**2 + sum_of_embs) / ((len(neighbs))**2 + sum_of_sims)\n", - " elif weight_case == 0.5:\n", - " new_embed_dict[word] = (embed_dict[word] * (len(neighbs))**0.5 + sum_of_embs) / ((len(neighbs))**0.5 + sum_of_sims)\n", - " else:\n", - " raise\n", - " else:\n", - " new_embed_dict[word] = embed_dict[word]\n", - " return new_embed_dict\n", - " \n", - " @classmethod\n", - " def execute_all_unsupervised_scenarios(\n", - " emb_list, basis_list, \n", - " embed_dict_master, neigh_dict_master,\n", - " eval_dataset,\n", - " scenario_name: str,\n", - " num_of_iterations: int = 3, \n", - " weightedness_list: list = [True],\n", - " weight_cases_list: list = [1,2],\n", - " get_output_values: bool = False\n", - " ):\n", - " \n", - " new_embed_dict_master = {}\n", - " responses_dict_master = {}\n", - " results = []\n", - " \n", - " for basis in tqdm(basis_list, desc='Basis', leave=False):\n", - " for emb in tqdm(emb_list, desc='Embedding', leave=False):\n", - " for weightedness in weightedness_list:\n", - " for weight_case in tqdm(weight_cases_list, desc='Weight Case', leave=False):\n", - " # Base Reference Initializations and Calculations\n", - " embed_dict = embed_dict_master[emb]\n", - " responses_dict, result_values = compute_classification_results(\n", - " embed_dict, eval_dataset, get_output_values=get_output_values, old_accuracy=None)\n", - " results.append(emb, basis, weight_case, weightedness, 0, 'base', *result_values)\n", - " old_accuracy = responses_dict['accuracy']\n", - " \n", - " for iter_num in tqdm(range(1,num_of_iterations+1), desc='Iteration', leave=False):\n", - " start_time = time()\n", - " \n", - " case_name = emb + '_' + basis + '_' + str(weight_case) + ('_weighted' if weightedness else '_unweighted')\n", - " \n", - " new_embed_dict = retrofit(embed_dict[weight_case], neigh_dict_master[basis], weight_case, weightedness)\n", - " \n", - " responses_dict, result_values = compute_classification_results(\n", - " new_embed_dict, eval_dataset, get_output_values=get_output_values, old_accuracy=old_accuracy)\n", - " \n", - " results.append([emb, basis, weight_case, weightedness, iter_num, case_name, \\\n", - " *result_values, \\\n", - " time() - start_time\n", - " ])\n", - " \n", - " new_embed_dict_master[case_name] = embed_dict = new_embed_dict\n", - " responses_dict_master[case_name] = responses_dict\n", - "\n", - " # if iter_num == num_of_iterations and highestOne:\n", - " # case_name = gR[0] + '_' + gR[1] + '_' + str(gR[2]) + '_weighted'\n", - " # new_embed_dict_master[case_name] = serializeEmbeddingDict(new_embed_dict_master[case_name])\n", - " # highestOne = False\n", - " # json.dump(new_embed_dict_master[case_name],open('../data/Master_P279_dataset/embeddings/new_embedding_dict_'+case_name+'.json','w'))\n", - " # new_embed_dict_master[case_name] = deserializeEmbeddingDict(new_embed_dict_master[case_name])\n", - " resultsDF = pd.DataFrame(results, columns=['Embedding', 'Basis', 'Weight Case', 'Weightedness', \n", - " 'Iteration Num', 'Case Name', \\\n", - " 'No. of Pairs Covered', 'Accuracy', 'Increase in Accuracy', \\\n", - " 'I Precision', 'I Recall', 'I F1-Score', \\\n", - " 'M Precision', 'M Recall', 'M F1-Score', \\\n", - " 'U Precision', 'U Recall', 'U F1-Score', \\\n", - " 'Time to Retrofit'])\n", - " resultsDF.to_csv('../data/retrofitting/retro_results.' + scenario_name + '.'+ Utils.today_date +'.csv', index=False)\n", - " \n", - " return new_embed_dict_master, responses_dict_master\n", - " \n", - " @classmethod\n", - " def execute_supervised_scenario(\n", - " eval_dataset, case, embed_dict_master, new_embed_dict_master, \n", - " num_of_splits = 10, \n", - " concat_mode: bool = False, SVC_or_SVR: str = 'SVC'\n", - " ):\n", - " \n", - " X = [] \n", - " \n", - " ################\n", - " # 2 Approaches based on argument: `concat_mode`\n", - " ################\n", - " \n", - " if concat_mode: ########## CONCAT MODE CODE ####################\n", - " case_name = \" & \".join(case['emb']) + '_' + case['basis'] + '_' + str(case['weight_case']) + ('_weighted' if case['weightedness'] else '_unweighted')\n", - " \n", - " for _, row in eval_dataset.iterrows():\n", - " if case['svm_input'] == 'emb':\n", - " tempX = []\n", - " for individual_emb in case['emb']:\n", - " ind_case_name = individual_emb + '_' + case['basis'] + '_' + str(case['weight_case']) + ('_weighted' if case['weightedness'] else '_unweighted')\n", - " if case['iter_num'] != 0 and ind_case_name not in new_embed_dict_master:\n", - " return case_name, case, None\n", - " if case['iter_num'] == 0:\n", - " tempX += embed_dict_master[individual_emb][row['word1_kg_id']].tolist() + embedDictMaster[individual_emb][row['word2_kg_id']].tolist()\n", - " else:\n", - " tempX += new_embed_dict_master[ind_case_name][row['word1_kg_id']].tolist() + newEmbedDictMaster[ind_case_name][row['word2_kg_id']].tolist()\n", - " X.append(tempX)\n", - " else:\n", - " tempX = []\n", - " for individual_emb in case['emb']:\n", - " ind_case_name = individual_emb + '_' + case['basis'] + '_' + str(case['weight_case']) + ('_weighted' if case['weightedness'] else '_unweighted')\n", - " if case['iter_num'] != 0 and ind_case_name not in new_embed_dict_master:\n", - " return case_name, case, None\n", - " if case['iter_num'] == 0:\n", - " tempX.append(abs(Utils.determine_cos_sim(\n", - " embed_dict_master[individual_emb][row['word1_kg_id']], \n", - " embed_dict_master[individual_emb][row['word2_kg_id']]\n", - " )))\n", - " else:\n", - " tempX.append(abs(Utils.determine_cos_sim(\n", - " new_embed_dict_master[ind_case_name][row['word1_kg_id']],\n", - " new_embed_dict_master[ind_case_name][row['word2_kg_id']]\n", - " )))\n", - " X.append(tempX)\n", - "\n", - " else: ########## NON-CONCAT MODE CODE ####################\n", - " case_name = case['emb'] + '_' + case['basis'] + '_' + str(case['weight_case']) + ('_weighted' if case['weightedness'] else '_unweighted')\n", - " if case['iter_num'] != 0 and case_name not in new_embed_dict_master:\n", - " return case_name, case, None\n", - " for _, row in eval_dataset.iterrows():\n", - " if case['svm_input'] == 'emb':\n", - " if case['iter_num'] == 0:\n", - " X.append(embed_dict_master[case['emb']][row['word1_kg_id']].tolist() + embed_dict_master[case['emb']][row['word2_kg_id']].tolist())\n", - " else:\n", - " X.append(new_embed_dict_master[case_name][row['word1_kg_id']].tolist() + new_embed_dict_master[case_name][row['word2_kg_id']].tolist())\n", - " else:\n", - " if case['iter_num'] == 0:\n", - " X.append(abs(Utils.determine_cos_sim(\n", - " embed_dict_master[case['emb']][row['word1_kg_id']], \n", - " embed_dict_master[case['emb']][row['word2_kg_id']]\n", - " )))\n", - " else:\n", - " X.append(abs(Utils.determine_cos_sim(\n", - " new_embed_dict_master[case_name][row['word1_kg_id']],\n", - " new_embed_dict_master[case_name][row['word2_kg_id']]\n", - " )))\n", - " \n", - " X = pd.DataFrame(X)\n", - " \n", - " ################\n", - " # 2 Approaches based on argument: `SVC_or_SVR`\n", - " ################\n", - " \n", - " # Target split depending on SVC or SVM\n", - " if SVC_or_SVR == 'SVC':\n", - " Y = eval_dataset['category']\n", - " elif SVC_or_SVR == 'SVR':\n", - " if 'Avg' not in eval_dataset.columns:\n", - " raise ValueError(\"Avg column not present in the provided eval_dataset\")\n", - " Y = (eval_dataset['Avg'] - 1) / 3\n", - " else:\n", - " raise ValueError(\"Invalid SVC_or_SVR provided\")\n", - "\n", - " skf = StratifiedKFold(n_splits=num_of_splits, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " tempVals = []\n", - " \n", - " # Classifier/Regressor training depending on SVC or SVM\n", - " if SVC_or_SVR == 'SVC':\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100, max_iter=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - " \n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return case_name, *list(case.values()), acc/num_of_splits\n", - " \n", - " elif SVC_or_SVR == 'SVR':\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVR(gamma='auto', max_iter=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - " \n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += mean_squared_error(pred * 3 + 1, Y_test1 * 3 + 1)\n", - " \n", - " return case_name, *list(case.values()), acc/num_of_splits\n", - " \n", - " @classmethod\n", - " def execute_all_supervised_scenarios(\n", - " eval_dataset, case, embed_dict_master, new_embed_dict_master,\n", - " num_of_splits = 10,\n", - " concat_mode: bool = False, SVC_or_SVR: str = 'SVC'\n", - " ):\n", - "\n", - "\n", - " results = Parallel(n_jobs=3)(delayed(execute_supervised_scenario)(\n", - " eval_dataset, caseDict, embed_dict_master, \n", - " new_embed_dict_master,num_of_spli,\n", - " concat_mode, SVC_or_SVR\n", - " ) for caseDict in tqdm(svmCasesList))\n", - " # print(results)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "qualified-projector", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "caring-hamilton", - "metadata": {}, - "source": [ - "# The Master Controller" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sensitive-moscow", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "5d5fa2d2cf8f4f799e107c1f1c6c4574", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Input Embeddings: 0%| | 0/6 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Term1Term1_kg_idTerm1_kg_labelTerm1_descriptionTerm2Term2_kg_idTerm2_kg_labelTerm2_descriptionPhysicianCoder
0Renal failureQ476921kidney failuredisease where the kidneys fail to adequately f...Kidney failureQ476921kidney failuredisease where the kidneys fail to adequately f...4.04.0
1HeartQ1072heartorgan for the circulation of blood in animal c...MyocardiumQ84133myocardiummiddle layer of the heart wall, which consists...3.33.0
2StrokeQ12202strokeproblem with the arteries supplying blood to t...InfarctQ207550infarctiontissue death caused by a local lack of oxygen,...3.02.8
3AbortionQ8452abortionintentional ending of a pregnancyMiscarriageQ28693miscarriagenatural death of an embryo or fetus before it ...3.03.3
4DelusionQ189643delusionfirm and fixed belief based on inadequate grou...SchizophreniaQ41112schizophreniapsychotic disorder characterized by emotional ...3.02.2
\n", - "" - ], - "text/plain": [ - " Term1 Term1_kg_id Term1_kg_label \\\n", - "0 Renal failure Q476921 kidney failure \n", - "1 Heart Q1072 heart \n", - "2 Stroke Q12202 stroke \n", - "3 Abortion Q8452 abortion \n", - "4 Delusion Q189643 delusion \n", - "\n", - " Term1_description Term2 \\\n", - "0 disease where the kidneys fail to adequately f... Kidney failure \n", - "1 organ for the circulation of blood in animal c... Myocardium \n", - "2 problem with the arteries supplying blood to t... Infarct \n", - "3 intentional ending of a pregnancy Miscarriage \n", - "4 firm and fixed belief based on inadequate grou... Schizophrenia \n", - "\n", - " Term2_kg_id Term2_kg_label \\\n", - "0 Q476921 kidney failure \n", - "1 Q84133 myocardium \n", - "2 Q207550 infarction \n", - "3 Q28693 miscarriage \n", - "4 Q41112 schizophrenia \n", - "\n", - " Term2_description Physician Coder \n", - "0 disease where the kidneys fail to adequately f... 4.0 4.0 \n", - "1 middle layer of the heart wall, which consists... 3.3 3.0 \n", - "2 tissue death caused by a local lack of oxygen,... 3.0 2.8 \n", - "3 natural death of an embryo or fetus before it ... 3.0 3.3 \n", - "4 psychotic disorder characterized by emotional ... 3.0 2.2 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bioDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "parental-event", - "metadata": {}, - "outputs": [], - "source": [ - "bioDFNodesSet = set(bioDF.Term1_kg_id.to_list() + bioDF.Term2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "wicked-proportion", - "metadata": {}, - "outputs": [], - "source": [ - "P279childParNodesSet = set(p279WordSimSeededDF_wabs_text.node1.to_list() + p279WordSimSeededDF_wabs_text.node2.to_list())\n", - "P279siblingsNodesSet = set(p279Seeded_SiblingsDF3_wabs_text.node1.to_list() + p279Seeded_SiblingsDF3_wabs_text.node2.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "pediatric-tomato", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 1)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sum(bioDF.Term1_kg_id.apply(lambda p: p in P279childParNodesSet or p in P279siblingsNodesSet)), \\\n", - "sum(bioDF.Term2_kg_id.apply(lambda p: p in P279childParNodesSet or p in P279siblingsNodesSet))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "transparent-diversity", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(23, 25)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probaseNodesSet = set(probDF_Qnodes_DF_WQnodes1_subset.node1.to_list() + probDF_Qnodes_DF_WQnodes1_subset.node2.to_list())\n", - "\n", - "sum(bioDF.Term1_kg_id.apply(lambda p: p in probaseNodesSet)), \\\n", - "sum(bioDF.Term2_kg_id.apply(lambda p: p in probaseNodesSet))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "uniform-civilian", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "voluntary-logic", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "incoming-calvin", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Correlation Code" - ] - }, - { - "cell_type": "markdown", - "id": "sacred-bacon", - "metadata": {}, - "source": [ - "# Dataset-Target Combinations" - ] - }, - { - "cell_type": "markdown", - "id": "amended-forth", - "metadata": {}, - "source": [ - "## Retrofitting" - ] - }, - { - "cell_type": "markdown", - "id": "incorporate-ecuador", - "metadata": {}, - "source": [ - "### Retrofitting using combination of input and basis" - ] - }, - { - "cell_type": "markdown", - "id": "fourth-finding", - "metadata": {}, - "source": [ - "### Retrofitting using combination - selected few" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "naked-artist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
EmbeddingBasisWeightWeightednessIteration NumOld AccNew AccIncreasePairs CoveredOld I Precision...Old U F1-ScoreNew I PrecisionNew I RecallNew I F1-ScoreNew U PrecisionNew U RecallNew U F1-ScoreAvg F1-ScoreTimeRank
0abstract19k_class_childPar2True163.95348864.2441860.2906983440.461538...0.0892860.4687500.750.5769230.6666670.0388350.0733940.4590212.3658920
1abstract_first_sent19k_class_siblings2True165.69767465.6976740.0000003440.500000...0.1551720.5200000.650.5777780.7000000.0679610.1238940.48544710.2674340
2complex19k_childPar1True468.02325667.732558-0.2906983440.923077...0.4631580.9230770.600.7272730.5000000.3980580.4432430.65200715.4032010
3text_2_props19k_2_class2True156.68604756.104651-0.5813953440.292683...0.0655740.2888890.650.4000000.2105260.0388350.0655740.38930945.0901510
4text_7_props19k_class_childPar2True157.26744256.976744-0.2906983440.325000...0.0655740.3409090.750.4687500.1666670.0291260.0495870.4034577.3340710
5transe19k_class_childPar1True465.40697765.4069770.0000003440.652174...0.2318840.6400000.800.7111110.4545450.1456310.2205880.56494816.9950190
\n", - "

6 rows × 24 columns

\n", - "
" - ], - "text/plain": [ - " Embedding Basis Weight Weightedness \\\n", - "0 abstract 19k_class_childPar 2 True \n", - "1 abstract_first_sent 19k_class_siblings 2 True \n", - "2 complex 19k_childPar 1 True \n", - "3 text_2_props 19k_2_class 2 True \n", - "4 text_7_props 19k_class_childPar 2 True \n", - "5 transe 19k_class_childPar 1 True \n", - "\n", - " Iteration Num Old Acc New Acc Increase Pairs Covered \\\n", - "0 1 63.953488 64.244186 0.290698 344 \n", - "1 1 65.697674 65.697674 0.000000 344 \n", - "2 4 68.023256 67.732558 -0.290698 344 \n", - "3 1 56.686047 56.104651 -0.581395 344 \n", - "4 1 57.267442 56.976744 -0.290698 344 \n", - "5 4 65.406977 65.406977 0.000000 344 \n", - "\n", - " Old I Precision ... Old U F1-Score New I Precision New I Recall \\\n", - "0 0.461538 ... 0.089286 0.468750 0.75 \n", - "1 0.500000 ... 0.155172 0.520000 0.65 \n", - "2 0.923077 ... 0.463158 0.923077 0.60 \n", - "3 0.292683 ... 0.065574 0.288889 0.65 \n", - "4 0.325000 ... 0.065574 0.340909 0.75 \n", - "5 0.652174 ... 0.231884 0.640000 0.80 \n", - "\n", - " New I F1-Score New U Precision New U Recall New U F1-Score \\\n", - "0 0.576923 0.666667 0.038835 0.073394 \n", - "1 0.577778 0.700000 0.067961 0.123894 \n", - "2 0.727273 0.500000 0.398058 0.443243 \n", - "3 0.400000 0.210526 0.038835 0.065574 \n", - "4 0.468750 0.166667 0.029126 0.049587 \n", - "5 0.711111 0.454545 0.145631 0.220588 \n", - "\n", - " Avg F1-Score Time Rank \n", - "0 0.459021 2.365892 0 \n", - "1 0.485447 10.267434 0 \n", - "2 0.652007 15.403201 0 \n", - "3 0.389309 45.090151 0 \n", - "4 0.403457 7.334071 0 \n", - "5 0.564948 16.995019 0 \n", - "\n", - "[6 rows x 24 columns]" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "resultsDF" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "choice-brazilian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['abstract_19k_class_childPar_2_weighted', 'abstract_first_sent_19k_class_siblings_2_weighted', 'complex_19k_childPar_1_weighted', 'text_2_props_19k_2_class_2_weighted', 'text_7_props_19k_class_childPar_2_weighted', 'transe_19k_class_childPar_1_weighted'])" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "responsesDictMaster.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "naughty-soccer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 13, 0, 7],\n", - " [ 0, 7, 96],\n", - " [ 12, 3, 206]])" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "responsesDictMaster['abstract_first_sent_19k_class_siblings_2_weighted']['cm_new']" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "common-certificate", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'BERT abstract_first_sent confusion matrix')" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.close()\n", - "sns.heatmap(responsesDictMaster['abstract_first_sent_19k_class_siblings_2_weighted']['cm_new'], xticklabels=['I', 'U', 'M'], yticklabels=['I', 'U', 'M'], annot=True)\n", - "plt.xlabel('Predicted')\n", - "plt.ylabel('Actual')\n", - "plt.title('BERT abstract_first_sent confusion matrix')" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "bearing-retail", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'BERT text_7_props confusion matrix')" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.close()\n", - "sns.heatmap(responsesDictMaster['text_7_props_19k_class_childPar_2_weighted']['cm_new'], xticklabels=['I', 'U', 'M'], yticklabels=['I', 'U', 'M'], annot=True)\n", - "plt.xlabel('Predicted')\n", - "plt.ylabel('Actual')\n", - "plt.title('BERT text_7_props confusion matrix')" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "approximate-showcase", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'BERT complex confusion matrix')" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.close()\n", - "sns.heatmap(responsesDictMaster['complex_19k_childPar_1_weighted']['cm_new'], xticklabels=['I', 'U', 'M'], yticklabels=['I', 'U', 'M'], annot=True)\n", - "plt.xlabel('Predicted')\n", - "plt.ylabel('Actual')\n", - "plt.title('BERT complex confusion matrix')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "forced-treatment", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "stable-shark", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9331395348837209" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "accuracy_score(responsesDictMaster['abstract_19k_class_childPar_2_weighted']['newOP'], responsesDictMaster['abstract_first_sent_19k_class_siblings_2_weighted']['newOP'])" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "appointed-factor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.7877906976744186" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "accuracy_score(responsesDictMaster['complex_19k_childPar_1_weighted']['newOP'], responsesDictMaster['transe_19k_class_childPar_1_weighted']['newOP'])" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "affiliated-wholesale", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.7005813953488372" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "accuracy_score(responsesDictMaster['complex_19k_childPar_1_weighted']['newOP'], responsesDictMaster['abstract_first_sent_19k_class_siblings_2_weighted']['newOP'])" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "hawaiian-worker", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
abstract_19k_class_childPar_2_weightedabstract_first_sent_19k_class_siblings_2_weightedcomplex_19k_childPar_1_weightedtext_2_props_19k_2_class_2_weightedtext_7_props_19k_class_childPar_2_weightedtranse_19k_class_childPar_1_weighted
abstract_19k_class_childPar_2_weighted1.0000000.9331400.6976740.8575580.8808140.811047
abstract_first_sent_19k_class_siblings_2_weighted0.9331401.0000000.7005810.8343020.8459300.816860
complex_19k_childPar_1_weighted0.6976740.7005811.0000000.6191860.6308140.787791
text_2_props_19k_2_class_2_weighted0.8575580.8343020.6191861.0000000.9593020.735465
text_7_props_19k_class_childPar_2_weighted0.8808140.8459300.6308140.9593021.0000000.747093
transe_19k_class_childPar_1_weighted0.8110470.8168600.7877910.7354650.7470931.000000
\n", - "
" - ], - "text/plain": [ - " abstract_19k_class_childPar_2_weighted \\\n", - "abstract_19k_class_childPar_2_weighted 1.000000 \n", - "abstract_first_sent_19k_class_siblings_2_weighted 0.933140 \n", - "complex_19k_childPar_1_weighted 0.697674 \n", - "text_2_props_19k_2_class_2_weighted 0.857558 \n", - "text_7_props_19k_class_childPar_2_weighted 0.880814 \n", - "transe_19k_class_childPar_1_weighted 0.811047 \n", - "\n", - " abstract_first_sent_19k_class_siblings_2_weighted \\\n", - "abstract_19k_class_childPar_2_weighted 0.933140 \n", - "abstract_first_sent_19k_class_siblings_2_weighted 1.000000 \n", - "complex_19k_childPar_1_weighted 0.700581 \n", - "text_2_props_19k_2_class_2_weighted 0.834302 \n", - "text_7_props_19k_class_childPar_2_weighted 0.845930 \n", - "transe_19k_class_childPar_1_weighted 0.816860 \n", - "\n", - " complex_19k_childPar_1_weighted \\\n", - "abstract_19k_class_childPar_2_weighted 0.697674 \n", - "abstract_first_sent_19k_class_siblings_2_weighted 0.700581 \n", - "complex_19k_childPar_1_weighted 1.000000 \n", - "text_2_props_19k_2_class_2_weighted 0.619186 \n", - "text_7_props_19k_class_childPar_2_weighted 0.630814 \n", - "transe_19k_class_childPar_1_weighted 0.787791 \n", - "\n", - " text_2_props_19k_2_class_2_weighted \\\n", - "abstract_19k_class_childPar_2_weighted 0.857558 \n", - "abstract_first_sent_19k_class_siblings_2_weighted 0.834302 \n", - "complex_19k_childPar_1_weighted 0.619186 \n", - "text_2_props_19k_2_class_2_weighted 1.000000 \n", - "text_7_props_19k_class_childPar_2_weighted 0.959302 \n", - "transe_19k_class_childPar_1_weighted 0.735465 \n", - "\n", - " text_7_props_19k_class_childPar_2_weighted \\\n", - "abstract_19k_class_childPar_2_weighted 0.880814 \n", - "abstract_first_sent_19k_class_siblings_2_weighted 0.845930 \n", - "complex_19k_childPar_1_weighted 0.630814 \n", - "text_2_props_19k_2_class_2_weighted 0.959302 \n", - "text_7_props_19k_class_childPar_2_weighted 1.000000 \n", - "transe_19k_class_childPar_1_weighted 0.747093 \n", - "\n", - " transe_19k_class_childPar_1_weighted \n", - "abstract_19k_class_childPar_2_weighted 0.811047 \n", - "abstract_first_sent_19k_class_siblings_2_weighted 0.816860 \n", - "complex_19k_childPar_1_weighted 0.787791 \n", - "text_2_props_19k_2_class_2_weighted 0.735465 \n", - "text_7_props_19k_class_childPar_2_weighted 0.747093 \n", - "transe_19k_class_childPar_1_weighted 1.000000 " - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "corrAccMatrix = []\n", - "for x in responsesDictMaster.keys():\n", - " temp = []\n", - " for y in responsesDictMaster.keys():\n", - " temp.append(accuracy_score(responsesDictMaster[x]['newOP'], responsesDictMaster[y]['newOP']))\n", - " corrAccMatrix.append(temp)\n", - "pd.DataFrame(corrAccMatrix, index=responsesDictMaster.keys(), columns=responsesDictMaster.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "corporate-quarter", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "dirty-magic", - "metadata": {}, - "source": [ - "### Retrofitting using concatenation of embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "twenty-chinese", - "metadata": {}, - "outputs": [], - "source": [ - "from collections import defaultdict\n", - "def generateConcatenatedEmbeddingDict(embedDictMaster, key_comb, embedding_lengths):\n", - " embedDict = defaultdict(list)\n", - " masterKeySet = set()\n", - " for key in key_comb:\n", - " for qnode in embedDictMaster[key]:\n", - " masterKeySet.add(qnode)\n", - " for qnode in masterKeySet:\n", - " for key in key_comb:\n", - " if qnode in embedDictMaster[key]:\n", - " embedDict[qnode] = embedDict[qnode] + (embedDictMaster[key][qnode].tolist())\n", - " else:\n", - " embedDict[qnode] = embedDict[qnode] + [0]*embedding_lengths[key]\n", - " embedDict[qnode] = np.array(embedDict[qnode])\n", - " return dict(embedDict)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "cooperative-reference", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 1min 16s, sys: 5.4 s, total: 1min 21s\n", - "Wall time: 1min 21s\n" - ] - } - ], - "source": [ - "%%time\n", - "embedDictMaster['text_7-text_2-comp-tran-abs-abs_first'] = generateConcatenatedEmbeddingDict(embedDictMaster, \n", - " ['text_7_props', 'text_2_props', 'complex', 'transe', 'abstract', 'abstract_first_sent'], \n", - " embedding_lengths)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "direct-discrimination", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "55c060d3c04441008eb1631416aa2a38", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/6 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0msvmCombCasesList\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mbasis\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbasisList\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mweightedNess\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0miterNum\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mNUM_ITERS\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mweightCase\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'basisList' is not defined" - ] - } - ], - "source": [ - "svmCombCasesList = []\n", - "for basis in tqdm(basisList):\n", - " for weightedNess in [True]:\n", - " for iterNum in range(0,NUM_ITERS+1):\n", - " for weightCase in [1,2]:\n", - " for svm_input in ['score']:\n", - " for i in range(1,len(embList)+1):\n", - " for embComb in combinations(embList, i):\n", - " temp_dict = {'basis': basis, 'emb': embComb, 'weightedNess': weightedNess, \n", - " 'iterNum': iterNum, 'weightCase': weightCase, 'svm_input': svm_input}\n", - " svmCombCasesList.append(temp_dict)" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "id": "ahead-letters", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3024" - ] - }, - "execution_count": 138, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(svmCombCasesList)" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "chicken-computer", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/3024 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_idcategory
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454U
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784U
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022U
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260M
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112M
\n", - "" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id category \n", - "0 Q454 U \n", - "1 Q13648784 U \n", - "2 Q178022 U \n", - "3 Q21004260 M \n", - "4 Q49112 M " - ] - }, - "execution_count": 151, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "pediatric-intelligence", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3f5e0e7ad7fb4e5589d10aaaf55783a8", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/432 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2AvgtextOldtextNewold_diffnew_diffOld_Diff_CatNew_Diff_Catcorrect_categoryold_predicted_categorynew_predicted_category
0Arafatpeace3.603.9094143.8371590.3094140.23715900UUU
1Arafatterror3.603.6468523.5936110.0468520.00638900UUU
2FBIfingerprint3.603.4706443.4706440.1293560.12935600UMM
3FBIinvestigation3.003.6743953.6250260.6743950.62502611MUU
4HarvardYale2.202.5145912.5145910.3145910.31459100MMM
.......................................
339wartroops3.002.8773622.4768020.1226380.52319800MMM
340weaponsecret3.803.5446763.0785500.2553240.72145001UUM
341weatherforecast3.002.4431002.0758060.5569000.92419411MMM
342woodforest1.803.6666913.6929861.8666911.89298611MUU
343wordsimilarity3.753.2025132.6772940.5474871.07270611UMM
\n", - "

344 rows × 12 columns

\n", - "" - ], - "text/plain": [ - " Word 1 Word 2 Avg textOld textNew old_diff new_diff \\\n", - "0 Arafat peace 3.60 3.909414 3.837159 0.309414 0.237159 \n", - "1 Arafat terror 3.60 3.646852 3.593611 0.046852 0.006389 \n", - "2 FBI fingerprint 3.60 3.470644 3.470644 0.129356 0.129356 \n", - "3 FBI investigation 3.00 3.674395 3.625026 0.674395 0.625026 \n", - "4 Harvard Yale 2.20 2.514591 2.514591 0.314591 0.314591 \n", - ".. ... ... ... ... ... ... ... \n", - "339 war troops 3.00 2.877362 2.476802 0.122638 0.523198 \n", - "340 weapon secret 3.80 3.544676 3.078550 0.255324 0.721450 \n", - "341 weather forecast 3.00 2.443100 2.075806 0.556900 0.924194 \n", - "342 wood forest 1.80 3.666691 3.692986 1.866691 1.892986 \n", - "343 word similarity 3.75 3.202513 2.677294 0.547487 1.072706 \n", - "\n", - " Old_Diff_Cat New_Diff_Cat correct_category old_predicted_category \\\n", - "0 0 0 U U \n", - "1 0 0 U U \n", - "2 0 0 U M \n", - "3 1 1 M U \n", - "4 0 0 M M \n", - ".. ... ... ... ... \n", - "339 0 0 M M \n", - "340 0 1 U U \n", - "341 1 1 M M \n", - "342 1 1 M U \n", - "343 1 1 U M \n", - "\n", - " new_predicted_category \n", - "0 U \n", - "1 U \n", - "2 M \n", - "3 U \n", - "4 M \n", - ".. ... \n", - "339 M \n", - "340 M \n", - "341 M \n", - "342 U \n", - "343 M \n", - "\n", - "[344 rows x 12 columns]" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "automotive-trouble", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "123" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "arabic-binding", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['old_predicted_category'] != wordSim353AnnotDF_New_Merged_DF['correct_category']].to_csv('../data/transEmb/badBefore_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "acoustic-holocaust", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[wordSim353AnnotDF_New_Merged_DF['new_predicted_category'] != wordSim353AnnotDF_New_Merged_DF['correct_category']].to_csv('../data/transEmb/badAfter_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "accompanied-spyware", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.to_csv('../data/transEmb/entireSet.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "reverse-cincinnati", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "breathing-footage", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 0)].to_csv('../data/transEmb/good+good_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "chief-chance", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 1)].to_csv('../data/transEmb/good+bad_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "shaped-letter", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 0)].to_csv('../data/transEmb/bad+good_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "adolescent-monte", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['Old_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['New_Diff_Cat'] == 1)].to_csv('../data/transEmb/bad+bad_'+ today_date +'.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "swiss-bridal", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "current-mirror", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "placed-identity", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "stopped-daisy", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'] = abs(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim'] - wordSim353AnnotDF_New_Merged_DF['Avg'])" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "deadly-forwarding", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "southeast-canal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 344.000000\n", - "mean 0.567297\n", - "std 0.435379\n", - "min 0.000000\n", - "25% 0.250130\n", - "50% 0.508725\n", - "75% 0.835197\n", - "max 5.000000\n", - "Name: concat_19k_v1_old_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_old_cosSim_Diff'],ascending=False)['concat_19k_v1_old_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "adequate-terminology", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 3.440000e+02\n", - "mean 5.938081e-01\n", - "std 4.503200e-01\n", - "min 4.440892e-16\n", - "25% 2.665817e-01\n", - "50% 5.349785e-01\n", - "75% 8.528840e-01\n", - "max 5.000000e+00\n", - "Name: concat_19k_v1_2_new_cosSim_Diff, dtype: float64" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.sort_values(by=['concat_19k_v1_2_new_cosSim_Diff'],ascending=False)['concat_19k_v1_2_new_cosSim_Diff'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "wired-shoot", - "metadata": {}, - "outputs": [], - "source": [ - "def determineFarNessOfOld(val1):\n", - " if 0.000000 <= val1 < 0.508725:\n", - " return 0\n", - " else:\n", - " return 1\n", - "def determineFarNessOfNew(val1):\n", - " if 0 <= val1 < 5.349785e-01:\n", - " return 0\n", - " else:\n", - " return 1\n", - "\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "operating-senegal", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'concat_19k_v1_old_cosSim', 'concat_19k_v1_2_new_cosSim', 'concat_19k_v1_old_cosSim_Diff', 'concat_19k_v1_2_new_cosSim_Diff', 'concat_19k_v1_old_cosSim_Diff_Cat', 'concat_19k_v1_2_new_cosSim_Diff_Cat']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quantitative-money", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2Avgconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_19k_v1_old_cosSim_Diffconcat_19k_v1_2_new_cosSim_Diffconcat_19k_v1_old_cosSim_Diff_Catconcat_19k_v1_2_new_cosSim_Diff_Cat
0Arafatpeace3.603.2511983.1932710.3488020.40672900
1Arafatterror3.603.2314093.1572290.3685910.44277100
2FBIfingerprint3.602.9484872.8530480.6515130.74695211
3FBIinvestigation3.002.9303652.8956040.0696350.10439600
4HarvardYale2.201.9910541.9910540.2089460.20894600
..............................
339wartroops3.002.9139312.7872130.0860690.21278700
340weaponsecret3.803.1525133.1190650.6474870.68093511
341weatherforecast3.002.4927652.4623890.5072350.53761101
342woodforest1.802.6126812.6069410.8126810.80694111
343wordsimilarity3.752.6782762.6528291.0717241.09717111
\n", - "

344 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 Avg concat_19k_v1_old_cosSim \\\n", - "0 Arafat peace 3.60 3.251198 \n", - "1 Arafat terror 3.60 3.231409 \n", - "2 FBI fingerprint 3.60 2.948487 \n", - "3 FBI investigation 3.00 2.930365 \n", - "4 Harvard Yale 2.20 1.991054 \n", - ".. ... ... ... ... \n", - "339 war troops 3.00 2.913931 \n", - "340 weapon secret 3.80 3.152513 \n", - "341 weather forecast 3.00 2.492765 \n", - "342 wood forest 1.80 2.612681 \n", - "343 word similarity 3.75 2.678276 \n", - "\n", - " concat_19k_v1_2_new_cosSim concat_19k_v1_old_cosSim_Diff \\\n", - "0 3.193271 0.348802 \n", - "1 3.157229 0.368591 \n", - "2 2.853048 0.651513 \n", - "3 2.895604 0.069635 \n", - "4 1.991054 0.208946 \n", - ".. ... ... \n", - "339 2.787213 0.086069 \n", - "340 3.119065 0.647487 \n", - "341 2.462389 0.507235 \n", - "342 2.606941 0.812681 \n", - "343 2.652829 1.071724 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff concat_19k_v1_old_cosSim_Diff_Cat \\\n", - "0 0.406729 0 \n", - "1 0.442771 0 \n", - "2 0.746952 1 \n", - "3 0.104396 0 \n", - "4 0.208946 0 \n", - ".. ... ... \n", - "339 0.212787 0 \n", - "340 0.680935 1 \n", - "341 0.537611 0 \n", - "342 0.806941 1 \n", - "343 1.097171 1 \n", - "\n", - " concat_19k_v1_2_new_cosSim_Diff_Cat \n", - "0 0 \n", - "1 0 \n", - "2 1 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "339 0 \n", - "340 1 \n", - "341 1 \n", - "342 1 \n", - "343 1 \n", - "\n", - "[344 rows x 9 columns]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "attractive-annex", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "164" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "proof-registrar", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "elder-harmony", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "magnetic-marina", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/concEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "satisfied-increase", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['concat_19k_v1_2_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/concEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "surprising-milan", - "metadata": {}, - "source": [ - "# SVM Models" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "worldwide-genius", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting datacompy\n", - " Downloading datacompy-0.7.2-py3-none-any.whl (27 kB)\n", - "Requirement already satisfied: numpy>=1.11.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.20.1)\n", - "Requirement already satisfied: pandas>=0.25.0 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from datacompy) (1.2.2)\n", - "Requirement already satisfied: pytz>=2017.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2021.1)\n", - "Requirement already satisfied: python-dateutil>=2.7.3 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from pandas>=0.25.0->datacompy) (2.8.1)\n", - "Requirement already satisfied: six>=1.5 in /nas/home/kshenoy/miniconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas>=0.25.0->datacompy) (1.15.0)\n", - "Installing collected packages: datacompy\n", - "Successfully installed datacompy-0.7.2\n" - ] - } - ], - "source": [ - "!pip install datacompy" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "overhead-board", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits_new.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "id": "developing-option", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "catholic-compensation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004515859576248157, -0.01172366887295375, ...3.2445393.175157[0.006720440291834372, 0.008331484208161396, 0...[-0.005011610937734838, -0.013383541550578623,...[0.006720440291834372, 0.008331484208161396, 0...[-0.00497129831746384, -0.01325426749683971, -...3.2445393.240270
1Arafatterror93D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004862257088069111, 0.014077170590128979, ...3.0850833.013958[0.006720440291834372, 0.008331484208161396, 0...[-0.005805280438126139, 0.015115419696749257, ...[0.006720440291834372, 0.008331484208161396, 0...[-0.004862255062129871, 0.014077164724644747, ...3.0850833.013958
2FBIfingerprint1093D4NaN4NaN3...[0.006466897059812569, 0.014694837542908411, -...[0.01523113309590259, 0.005271417380511587, -0...2.8230932.745230[0.006466894365273728, 0.014694831420063071, -...[0.013922101136130544, 0.0023911842131386003, ...[0.006466894365273728, 0.014694831420063071, -...[0.013814564227839972, 0.0024352598952305004, ...2.8230932.816176
3FBIinvestigation1103U3U3U3...[0.006466897059812569, 0.014694837542908411, -...[0.013016090623183913, 0.01114268771757639, -0...2.9209862.886161[0.006466894365273728, 0.014694831420063071, -...[0.01327496060589727, 0.010965634890657862, -0...[0.006466894365273728, 0.014694831420063071, -...[0.013242882546106787, 0.010953106196386554, -...2.9209862.919120
4HarvardYale1372S3S2S2...[0.01322626159341165, 0.005047111630696947, -0...[0.010410829393995813, 0.014776997996557633, -...1.7076551.707655[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...1.7076551.707655
\n", - "

5 rows × 104 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "1 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "2 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "3 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "4 ... [0.01322626159341165, 0.005047111630696947, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859576248157, -0.01172366887295375, ... 3.244539 \n", - "1 [-0.004862257088069111, 0.014077170590128979, ... 3.085083 \n", - "2 [0.01523113309590259, 0.005271417380511587, -0... 2.823093 \n", - "3 [0.013016090623183913, 0.01114268771757639, -0... 2.920986 \n", - "4 [0.010410829393995813, 0.014776997996557633, -... 1.707655 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.175157 \n", - "1 3.013958 \n", - "2 2.745230 \n", - "3 2.886161 \n", - "4 1.707655 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.005011610937734838, -0.013383541550578623,... \n", - "1 [-0.005805280438126139, 0.015115419696749257, ... \n", - "2 [0.013922101136130544, 0.0023911842131386003, ... \n", - "3 [0.01327496060589727, 0.010965634890657862, -0... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.00497129831746384, -0.01325426749683971, -... \n", - "1 [-0.004862255062129871, 0.014077164724644747, ... \n", - "2 [0.013814564227839972, 0.0024352598952305004, ... \n", - "3 [0.013242882546106787, 0.010953106196386554, -... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.244539 3.240270 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.816176 \n", - "3 2.920986 2.919120 \n", - "4 1.707655 1.707655 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF_old.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "id": "expanded-uniform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
text_7props_19k_old_cosSimtext_7props_19k_2_new_cosSimtext_2props_19k_old_cosSimtext_2props_19k_2_new_cosSimcomplex_19k_old_cosSimcomplex_19k_2_new_cosSimtranse_19k_old_cosSimtranse_19k_1_new_cosSimabstract_19k_old_cosSimabstract_19k_2_new_cosSim...transe_probase_19k_old_cosSimtranse_probase_19k_1_new_cosSimconcat_19k_v1_old_cosSimconcat_19k_v1_2_new_cosSimconcat_probase_19k_v1_old_cosSimconcat_probase_19k_v1_2_new_cosSimconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
count344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000...344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000344.000000
mean2.5110332.4648762.4822542.4351612.9833022.6848182.9833022.6800022.6528662.593916...2.9833022.5658862.8753812.8264932.8753812.8651012.8680662.8166852.8680662.856603
std1.1488211.1529111.1510601.1554270.6459110.5390920.6459110.6192390.6805250.653512...0.6459110.5967500.5739020.5755850.5739020.5744101.0971211.1063621.0971211.099179
min1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000...1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
25%2.0050971.9632291.9934241.9498692.5885912.4554312.5885912.3118182.1809122.137568...2.5885912.1836862.5779382.5510332.5779382.5838112.3843372.3506452.3843372.377672
50%2.3282762.2736742.2746682.2321563.0390872.7085693.0390872.7222782.6168102.591640...3.0390872.6080412.9505782.9120982.9505782.9339842.7164712.6570782.7164712.704941
75%2.6369072.5761552.5804822.5275543.3592432.9592593.3592433.0905633.2089193.060782...3.3592432.9352263.2087353.1644263.2087353.1962702.9922652.8996262.9922652.977770
max7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000004.3400894.327902...7.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.0000007.000000
\n", - "

8 rows × 28 columns

\n", - "
" - ], - "text/plain": [ - " text_7props_19k_old_cosSim text_7props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.511033 2.464876 \n", - "std 1.148821 1.152911 \n", - "min 1.000000 1.000000 \n", - "25% 2.005097 1.963229 \n", - "50% 2.328276 2.273674 \n", - "75% 2.636907 2.576155 \n", - "max 7.000000 7.000000 \n", - "\n", - " text_2props_19k_old_cosSim text_2props_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.482254 2.435161 \n", - "std 1.151060 1.155427 \n", - "min 1.000000 1.000000 \n", - "25% 1.993424 1.949869 \n", - "50% 2.274668 2.232156 \n", - "75% 2.580482 2.527554 \n", - "max 7.000000 7.000000 \n", - "\n", - " complex_19k_old_cosSim complex_19k_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.684818 \n", - "std 0.645911 0.539092 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.455431 \n", - "50% 3.039087 2.708569 \n", - "75% 3.359243 2.959259 \n", - "max 7.000000 7.000000 \n", - "\n", - " transe_19k_old_cosSim transe_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.680002 \n", - "std 0.645911 0.619239 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.311818 \n", - "50% 3.039087 2.722278 \n", - "75% 3.359243 3.090563 \n", - "max 7.000000 7.000000 \n", - "\n", - " abstract_19k_old_cosSim abstract_19k_2_new_cosSim ... \\\n", - "count 344.000000 344.000000 ... \n", - "mean 2.652866 2.593916 ... \n", - "std 0.680525 0.653512 ... \n", - "min 1.000000 1.000000 ... \n", - "25% 2.180912 2.137568 ... \n", - "50% 2.616810 2.591640 ... \n", - "75% 3.208919 3.060782 ... \n", - "max 4.340089 4.327902 ... \n", - "\n", - " transe_probase_19k_old_cosSim transe_probase_19k_1_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.983302 2.565886 \n", - "std 0.645911 0.596750 \n", - "min 1.000000 1.000000 \n", - "25% 2.588591 2.183686 \n", - "50% 3.039087 2.608041 \n", - "75% 3.359243 2.935226 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v1_old_cosSim concat_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.826493 \n", - "std 0.573902 0.575585 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.551033 \n", - "50% 2.950578 2.912098 \n", - "75% 3.208735 3.164426 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v1_old_cosSim concat_probase_19k_v1_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.875381 2.865101 \n", - "std 0.573902 0.574410 \n", - "min 1.000000 1.000000 \n", - "25% 2.577938 2.583811 \n", - "50% 2.950578 2.933984 \n", - "75% 3.208735 3.196270 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_19k_v2_old_cosSim concat_19k_v2_2_new_cosSim \\\n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.816685 \n", - "std 1.097121 1.106362 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.350645 \n", - "50% 2.716471 2.657078 \n", - "75% 2.992265 2.899626 \n", - "max 7.000000 7.000000 \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "count 344.000000 344.000000 \n", - "mean 2.868066 2.856603 \n", - "std 1.097121 1.099179 \n", - "min 1.000000 1.000000 \n", - "25% 2.384337 2.377672 \n", - "50% 2.716471 2.704941 \n", - "75% 2.992265 2.977770 \n", - "max 7.000000 7.000000 \n", - "\n", - "[8 rows x 28 columns]" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF[list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "id": "indian-embassy", - "metadata": {}, - "outputs": [], - "source": [ - "import datacompy\n", - "compare = datacompy.Compare(\n", - " wordSim353AnnotDF_New_Merged_DF[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns.to_list()))],\n", - " wordSim353AnnotDF_New_Merged_DF_old[['Word 1',\n", - " 'Word 2',\n", - " 'Avg',\n", - " 'word1_kg_id',\n", - " 'word2_kg_id',\n", - " 'category'] + list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF_old.columns.to_list()))],\n", - " join_columns = ['Word 1', 'Word 2'])" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "id": "vocational-nurse", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DataComPy Comparison\n", - "--------------------\n", - "\n", - "DataFrame Summary\n", - "-----------------\n", - "\n", - " DataFrame Columns Rows\n", - "0 df1 34 344\n", - "1 df2 34 344\n", - "\n", - "Column Summary\n", - "--------------\n", - "\n", - "Number of columns in common: 32\n", - "Number of columns in df1 but not in df2: 2\n", - "Number of columns in df2 but not in df1: 2\n", - "\n", - "Row Summary\n", - "-----------\n", - "\n", - "Matched on: word 1, word 2\n", - "Any duplicates on match values: No\n", - "Absolute Tolerance: 0\n", - "Relative Tolerance: 0\n", - "Number of rows in common: 344\n", - "Number of rows in df1 but not in df2: 0\n", - "Number of rows in df2 but not in df1: 0\n", - "\n", - "Number of rows with some compared columns unequal: 343\n", - "Number of rows with all compared columns equal: 1\n", - "\n", - "Column Comparison\n", - "-----------------\n", - "\n", - "Number of columns compared with some values unequal: 27\n", - "Number of columns compared with all values equal: 5\n", - "Total number of values which compare unequal: 5,136\n", - "\n", - "Columns with Unequal Values or Types\n", - "------------------------------------\n", - "\n", - " Column df1 dtype df2 dtype # Unequal Max Diff # Null Diff\n", - "25 abstract_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "17 abstract_19k_old_cossim float64 float64 9 4.440892e-16 0\n", - "8 abstract_firstsent_19k_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "19 abstract_firstsent_19k_old_cossim float64 float64 8 4.440892e-16 0\n", - "6 category object object 4 0.000000e+00 0\n", - "12 complex_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "21 complex_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "11 complex_probase_2_new_cossim float64 float64 8 4.440892e-16 0\n", - "18 complex_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "1 concat_19k_v1_2_new_cossim float64 float64 343 9.656675e-01 0\n", - "22 concat_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "2 concat_19k_v2_2_new_cossim float64 float64 325 4.810998e-01 0\n", - "3 concat_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "10 concat_probase_19k_v1_2_new_cossim float64 float64 341 9.673423e-01 0\n", - "7 concat_probase_19k_v1_old_cossim float64 float64 343 9.684394e-01 0\n", - "26 concat_probase_19k_v2_2_new_cossim float64 float64 324 4.828636e-01 0\n", - "9 concat_probase_19k_v2_old_cossim float64 float64 324 4.842197e-01 0\n", - "15 text_2props_19k_2_new_cossim float64 float64 7 4.440892e-16 0\n", - "0 text_2props_19k_old_cossim float64 float64 5 4.440892e-16 0\n", - "14 text_7props_19k_2_new_cossim float64 float64 11 4.440892e-16 0\n", - "24 text_7props_19k_old_cossim float64 float64 7 4.440892e-16 0\n", - "5 transe_19k_1_new_cossim float64 float64 5 4.440892e-16 0\n", - "4 transe_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "16 transe_probase_19k_1_new_cossim float64 float64 340 1.192889e-08 0\n", - "20 transe_probase_19k_old_cossim float64 float64 340 1.452659e+00 0\n", - "23 transe_probase_1_new_cossim float64 float64 9 4.440892e-16 0\n", - "13 transe_probase_old_cossim float64 float64 340 1.452659e+00 0\n", - "\n", - "Sample Rows with Unequal Values\n", - "-------------------------------\n", - "\n", - " word 1 word 2 text_2props_19k_old_cossim (df1) text_2props_19k_old_cossim (df2)\n", - "33 bishop rabbi 2.333195 2.333195\n", - "69 credit card 1.834364 1.834364\n", - "107 drink ear 2.515900 2.515900\n", - "271 registration arrangement 1.826611 1.826611\n", - "169 line insurance 2.670612 2.670612\n", - "\n", - " word 1 word 2 concat_19k_v1_2_new_cossim (df1) concat_19k_v1_2_new_cossim (df2)\n", - "107 drink ear 3.116502 2.813165\n", - "112 energy crisis 3.024137 3.099512\n", - "14 admission ticket 2.647422 2.819317\n", - "63 computer software 2.167120 2.273544\n", - "241 precedent example 2.091422 2.138805\n", - "44 car flight 3.064250 2.948899\n", - "229 planet constellation 2.240850 2.286295\n", - "159 king queen 2.169999 2.241265\n", - "161 lad brother 2.755663 2.733430\n", - "297 stock egg 2.943623 2.952019\n", - "\n", - " word 1 word 2 concat_19k_v2_2_new_cossim (df1) concat_19k_v2_2_new_cossim (df2)\n", - "61 computer laboratory 2.670662 2.635687\n", - "239 precedent cognition 2.643438 2.676361\n", - "286 situation isolation 2.313211 2.399693\n", - "225 physics chemistry 1.755500 1.873616\n", - "262 psychology doctor 2.861167 2.665892\n", - "271 registration arrangement 1.935898 2.144032\n", - "111 drug abuse 2.653034 2.716209\n", - "150 impartiality interest 2.395906 2.496811\n", - "130 forest graveyard 2.963496 2.743907\n", - "80 cup substance 2.738585 2.703536\n", - "\n", - " word 1 word 2 concat_19k_v2_old_cossim (df1) concat_19k_v2_old_cossim (df2)\n", - "247 president medal 2.809529 3.039440\n", - "70 credit information 2.557827 2.567752\n", - "58 competition price 2.699197 2.854295\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "47 century nation 3.025727 3.021246\n", - "280 seven series 2.801360 2.821742\n", - "193 money dollar 2.376377 2.437513\n", - "5 Japanese American 2.564544 2.535274\n", - "340 weapon secret 2.889109 2.897323\n", - "189 money bank 2.261778 2.170577\n", - "\n", - " word 1 word 2 transe_19k_old_cossim (df1) transe_19k_old_cossim (df2)\n", - "36 book paper 3.078243 2.635533\n", - "5 Japanese American 2.496058 2.408249\n", - "26 baby mother 2.292784 2.155920\n", - "248 problem airport 3.826307 3.170909\n", - "55 coast hill 3.722873 2.798622\n", - "112 energy crisis 3.106233 3.230795\n", - "340 weapon secret 3.285620 3.310261\n", - "219 opera industry 3.296724 3.553488\n", - "169 line insurance 3.089979 2.829222\n", - "332 type kind 1.000000 1.000000\n", - "\n", - " word 1 word 2 transe_19k_1_new_cossim (df1) transe_19k_1_new_cossim (df2)\n", - "192 money deposit 2.837495 2.837495\n", - "232 planet people 3.716617 3.716617\n", - "114 energy secretary 2.865451 2.865451\n", - "304 street block 2.904156 2.904156\n", - "271 registration arrangement 1.933719 1.933719\n", - "\n", - " word 1 word 2 category (df1) category (df2)\n", - "296 stock CD U M\n", - "45 cell phone I M\n", - "328 tool implement I M\n", - "237 practice institution M U\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_old_cossim (df1) concat_probase_19k_v1_old_cossim (df2)\n", - "312 television film 3.266487 2.813985\n", - "191 money currency 2.401111 2.298975\n", - "243 precedent information 3.131530 3.019516\n", - "53 closet clothes 2.947983 2.705879\n", - "142 government crisis 3.181431 2.683486\n", - "183 media trading 3.103774 2.822458\n", - "89 delay racism 3.037041 2.943246\n", - "32 bird crane 2.323600 2.007661\n", - "126 food rooster 3.641608 3.323421\n", - "43 car automobile 1.000000 1.000000\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_2_new_cossim (df1) abstract_firstsent_19k_2_new_cossim (df2)\n", - "67 country citizen 2.307399 2.307399\n", - "218 oil stock 2.875288 2.875288\n", - "337 vodka gin 1.848263 1.848263\n", - "152 investor earning 1.998387 1.998387\n", - "90 deployment departure 1.826386 1.826386\n", - "208 movie theater 2.390347 2.390347\n", - "263 psychology fear 2.679016 2.679016\n", - "96 discovery space 2.952799 2.952799\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_old_cossim (df1) concat_probase_19k_v2_old_cossim (df2)\n", - "21 architecture century 3.188363 3.081890\n", - "117 exhibit memorabilia 2.720881 2.806831\n", - "60 computer keyboard 2.131908 2.212525\n", - "120 fertility egg 2.202871 2.244311\n", - "311 telephone communication 2.677514 2.463340\n", - "238 precedent antecedent 1.935676 2.019795\n", - "33 bishop rabbi 2.277504 2.458967\n", - "203 morality importance 2.272562 2.446757\n", - "228 planet astronomer 2.470710 2.152302\n", - "144 governor office 2.720705 2.742336\n", - "\n", - " word 1 word 2 concat_probase_19k_v1_2_new_cossim (df1) concat_probase_19k_v1_2_new_cossim (df2)\n", - "166 life death 2.384376 2.467146\n", - "249 problem challenge 2.573163 2.851951\n", - "216 noon string 2.831571 3.404519\n", - "214 network hardware 2.797734 2.468385\n", - "324 tiger mammal 2.608830 2.218881\n", - "269 reason hypertension 3.043544 2.554564\n", - "35 book library 3.335751 2.560611\n", - "169 line insurance 3.121240 2.947265\n", - "319 tiger carnivore 3.332882 3.004569\n", - "161 lad brother 2.885448 2.868957\n", - "\n", - " word 1 word 2 complex_probase_2_new_cossim (df1) complex_probase_2_new_cossim (df2)\n", - "39 bread butter 1.926594 1.926594\n", - "102 dollar buck 2.733086 2.733086\n", - "193 money dollar 2.733086 2.733086\n", - "150 impartiality interest 2.323327 2.323327\n", - "1 Arafat terror 3.103668 3.103668\n", - "266 psychology psychiatry 1.826092 1.826092\n", - "10 Mexico Brazil 1.921104 1.921104\n", - "5 Japanese American 2.408249 2.408249\n", - "\n", - " word 1 word 2 complex_19k_old_cossim (df1) complex_19k_old_cossim (df2)\n", - "115 environment ecology 2.920428 2.903515\n", - "256 psychology Freud 3.234018 2.992413\n", - "169 line insurance 3.089979 2.829222\n", - "33 bishop rabbi 2.300842 2.845229\n", - "220 opera performance 3.163513 3.062105\n", - "267 psychology science 2.231959 2.334221\n", - "265 psychology mind 2.886509 2.426014\n", - "45 cell phone 3.622510 2.693966\n", - "26 baby mother 2.292784 2.155920\n", - "161 lad brother 3.110214 3.092837\n", - "\n", - " word 1 word 2 transe_probase_old_cossim (df1) transe_probase_old_cossim (df2)\n", - "209 murder manslaughter 2.249251 2.257188\n", - "141 glass metal 3.225510 2.093335\n", - "296 stock CD 3.395233 3.514011\n", - "325 tiger organism 3.290722 2.591059\n", - "35 book library 3.701910 2.539030\n", - "2 FBI fingerprint 3.149125 2.911334\n", - "254 profit loss 1.653272 1.573516\n", - "334 video archive 3.219152 2.407191\n", - "166 life death 2.565452 2.692000\n", - "9 Mars scientist 3.504530 3.187455\n", - "\n", - " word 1 word 2 text_7props_19k_2_new_cossim (df1) text_7props_19k_2_new_cossim (df2)\n", - "176 luxury car 2.942098 2.942098\n", - "293 space world 2.109041 2.109041\n", - "309 summer drought 2.687325 2.687325\n", - "67 country citizen 1.942392 1.942392\n", - "169 line insurance 2.691916 2.691916\n", - "302 stock phone 2.963663 2.963663\n", - "5 Japanese American 2.145108 2.145108\n", - "238 precedent antecedent 1.844509 1.844509\n", - "143 governor interview 2.651640 2.651640\n", - "152 investor earning 1.902240 1.902240\n", - "\n", - " word 1 word 2 text_2props_19k_2_new_cossim (df1) text_2props_19k_2_new_cossim (df2)\n", - "329 train car 1.998965 1.998965\n", - "10 Mexico Brazil 1.950233 1.950233\n", - "19 announcement production 1.866451 1.866451\n", - "121 fighting defeating 1.940122 1.940122\n", - "293 space world 1.993016 1.993016\n", - "8 Maradona football 2.351065 2.351065\n", - "114 energy secretary 2.803514 2.803514\n", - "\n", - " word 1 word 2 transe_probase_19k_1_new_cossim (df1) transe_probase_19k_1_new_cossim (df2)\n", - "155 journal association 2.736767 2.736767\n", - "123 focus life 2.337493 2.337493\n", - "159 king queen 1.570639 1.570639\n", - "169 line insurance 2.557647 2.557647\n", - "305 street children 3.186623 3.186623\n", - "336 vodka brandy 1.527815 1.527815\n", - "232 planet people 3.593423 3.593423\n", - "130 forest graveyard 3.142560 3.142560\n", - "69 credit card 2.076337 2.076337\n", - "40 brother monk 2.683273 2.683273\n", - "\n", - " word 1 word 2 abstract_19k_old_cossim (df1) abstract_19k_old_cossim (df2)\n", - "285 situation conclusion 1.808156 1.808156\n", - "303 street avenue 2.281843 2.281843\n", - "94 disability death 2.746255 2.746255\n", - "5 Japanese American 3.292768 3.292768\n", - "183 media trading 3.108796 3.108796\n", - "11 OPEC country 3.042327 3.042327\n", - "162 lad wizard 3.334772 3.334772\n", - "129 football tennis 2.518421 2.518421\n", - "231 planet moon 1.920149 1.920149\n", - "\n", - " word 1 word 2 complex_probase_old_cossim (df1) complex_probase_old_cossim (df2)\n", - "63 computer software 2.565704 2.726328\n", - "21 architecture century 3.418617 3.099197\n", - "179 man woman 2.351588 1.471079\n", - "149 image surface 3.137178 3.256807\n", - "81 cup tableware 2.124012 1.954043\n", - "36 book paper 3.078243 2.635533\n", - "194 money laundering 2.759570 2.800958\n", - "236 possibility girl 3.361988 2.920025\n", - "209 murder manslaughter 2.249251 2.257188\n", - "218 oil stock 2.577913 2.625197\n", - "\n", - " word 1 word 2 abstract_firstsent_19k_old_cossim (df1) abstract_firstsent_19k_old_cossim (df2)\n", - "246 preservation world 3.234863 3.234863\n", - "5 Japanese American 2.728319 2.728319\n", - "285 situation conclusion 1.808156 1.808156\n", - "244 precedent law 1.878214 1.878214\n", - "94 disability death 3.016865 3.016865\n", - "175 lover quarrel 3.157233 3.157233\n", - "109 drink mother 3.128050 3.128050\n", - "177 magician wizard 1.909871 1.909871\n", - "\n", - " word 1 word 2 transe_probase_19k_old_cossim (df1) transe_probase_19k_old_cossim (df2)\n", - "79 cup object 2.627446 2.362561\n", - "234 planet star 2.586230 2.320493\n", - "176 luxury car 3.150901 2.977136\n", - "156 journey car 2.971068 2.457446\n", - "324 tiger mammal 2.909669 2.322927\n", - "120 fertility egg 2.547399 2.671721\n", - "248 problem airport 3.826307 3.170909\n", - "16 aluminum metal 2.712132 1.916614\n", - "36 book paper 3.078243 2.635533\n", - "211 music project 3.141641 3.304875\n", - "\n", - " word 1 word 2 complex_probase_19k_old_cossim (df1) complex_probase_19k_old_cossim (df2)\n", - "277 seafood lobster 2.240601 2.113436\n", - "27 bank money 3.066413 2.792811\n", - "337 vodka gin 1.857971 2.369972\n", - "211 music project 3.141641 3.304875\n", - "271 registration arrangement 2.319711 2.954145\n", - "143 governor interview 4.023383 3.076389\n", - "149 image surface 3.137178 3.256807\n", - "94 disability death 2.565398 2.939547\n", - "166 life death 2.565452 2.692000\n", - "226 physics proton 3.802075 2.800635\n", - "\n", - " word 1 word 2 concat_19k_v1_old_cossim (df1) concat_19k_v1_old_cossim (df2)\n", - "270 record number 2.977163 2.589607\n", - "282 shower flood 3.398140 2.908007\n", - "97 dividend calculation 2.507181 2.708939\n", - "239 precedent cognition 2.724066 2.793355\n", - "125 food preparation 2.932974 2.836360\n", - "342 wood forest 3.144257 2.612681\n", - "304 street block 2.690410 2.201689\n", - "250 production crew 2.552550 2.783363\n", - "6 Jerusalem Israel 2.978292 2.383538\n", - "210 museum theater 3.208882 2.943593\n", - "\n", - " word 1 word 2 transe_probase_1_new_cossim (df1) transe_probase_1_new_cossim (df2)\n", - "108 drink eat 2.334188 2.334188\n", - "25 attempt peace 2.624155 2.624155\n", - "232 planet people 3.392578 3.392578\n", - "204 morality marriage 2.173908 2.173908\n", - "267 psychology science 1.840069 1.840069\n", - "20 announcement warning 1.930855 1.930855\n", - "37 boxing round 3.527058 3.527058\n", - "77 cup food 2.657233 2.657233\n", - "73 cup artifact 2.065621 2.065621\n", - "\n", - " word 1 word 2 text_7props_19k_old_cossim (df1) text_7props_19k_old_cossim (df2)\n", - "311 telephone communication 2.269291 2.269291\n", - "205 movie critic 2.872865 2.872865\n", - "69 credit card 1.834364 1.834364\n", - "334 video archive 1.948662 1.948662\n", - "51 change attitude 1.894075 1.894075\n", - "260 psychology depression 1.948810 1.948810\n", - "63 computer software 1.918968 1.918968\n", - "\n", - " word 1 word 2 abstract_19k_2_new_cossim (df1) abstract_19k_2_new_cossim (df2)\n", - "90 deployment departure 1.826386 1.826386\n", - "14 admission ticket 2.890691 2.890691\n", - "84 day summer 1.820569 1.820569\n", - "217 observation architecture 2.541219 2.541219\n", - "243 precedent information 2.768309 2.768309\n", - "253 professor doctor 2.462181 2.462181\n", - "60 computer keyboard 1.977226 1.977226\n", - "95 disaster area 3.350219 3.350219\n", - "\n", - " word 1 word 2 concat_probase_19k_v2_2_new_cossim (df1) concat_probase_19k_v2_2_new_cossim (df2)\n", - "208 movie theater 2.614114 2.456455\n", - "177 magician wizard 2.146197 2.011585\n", - "86 death row 2.990100 2.809539\n", - "293 space world 2.481352 2.412213\n", - "123 focus life 2.908816 2.990622\n", - "316 territory surface 2.778507 2.489232\n", - "289 smart student 2.754242 2.578396\n", - "333 victim emergency 2.380390 2.445431\n", - "55 coast hill 2.826077 2.516979\n", - "78 cup liquid 2.365327 2.264276\n", - "\n", - "\n" - ] - } - ], - "source": [ - "print(compare.report())" - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "id": "common-vietnam", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idword 1word 2idh_simh_dimf_simf_dimn_sim...concat_19k_v2_word2_newconcat_19k_v2_old_cossimconcat_19k_v2_2_new_cossimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cossimconcat_probase_19k_v2_2_new_cossimavg_old
0Q106106Q11460closetclothes423H3H3...[0.0014151543049584102, 0.003161483781535701, ...2.6970222.652559[0.013902607489678993, 0.013241494756981564, -...[0.0014224480432097992, 0.0031547764732941653,...[0.01371531560905985, 0.013126875633706597, -0...[0.0014206775968733409, 0.0031581452887393872,...2.6970222.6833183.0
1Q107Q16502spaceworld2933L3S3...[-0.0031782974877087693, 0.003973805776938075,...2.4858592.347308[0.00027019944749503126, 0.005353652289998999,...[-0.0032792710227188605, 0.0036472880832864947...[0.00027492382990721006, 0.0053545622809597, -...[-0.0032450374860671267, 0.0036673577053825254...2.4858592.4813523.2
2Q107Q2329spacechemistry2924NaN4NaN4...[0.015268952851071075, -0.0024137893437008715,...2.7987882.782963[0.00027019944749503126, 0.005353652289998999,...[0.015322423107720673, -0.0024500099720118624,...[0.00027492382990721006, 0.0053545622809597, -...[0.015281665873653082, -0.002421165402091456, ...2.7987882.7950474.0
3Q1074Q7364skineye2883H3H3...[0.002992664951436964, 0.013922942027531155, -...2.3558132.314417[-0.0026976204618851985, 0.001541600665881322,...[0.0033640181667058486, 0.014044398230441645, ...[-0.002678224125439186, 0.0015598357892553907,...[0.0033484286344994184, 0.014002864550517797, ...2.3558132.3506033.0
4Q1079023Q500834championshiptournament381NaN1NaN2...[0.00920825730356781, 0.011965374832474578, 0....1.8686991.865663[-0.0008601077391385219, 0.005201185839222482,...[0.00923153244996602, 0.011960544533439752, 0....[-0.0008458279784483333, 0.005209858282773185,...[0.009207264410626997, 0.011951895965764294, 0...1.8686991.8667851.2
\n", - "

5 rows × 105 columns

\n", - "
" - ], - "text/plain": [ - " word1_kg_id word2_kg_id word 1 word 2 id h_sim h_dim f_sim \\\n", - "0 Q106106 Q11460 closet clothes 42 3 H 3 \n", - "1 Q107 Q16502 space world 293 3 L 3 \n", - "2 Q107 Q2329 space chemistry 292 4 NaN 4 \n", - "3 Q1074 Q7364 skin eye 288 3 H 3 \n", - "4 Q1079023 Q500834 championship tournament 38 1 NaN 1 \n", - "\n", - " f_dim n_sim ... concat_19k_v2_word2_new \\\n", - "0 H 3 ... [0.0014151543049584102, 0.003161483781535701, ... \n", - "1 S 3 ... [-0.0031782974877087693, 0.003973805776938075,... \n", - "2 NaN 4 ... [0.015268952851071075, -0.0024137893437008715,... \n", - "3 H 3 ... [0.002992664951436964, 0.013922942027531155, -... \n", - "4 NaN 2 ... [0.00920825730356781, 0.011965374832474578, 0.... \n", - "\n", - " concat_19k_v2_old_cossim concat_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.652559 \n", - "1 2.485859 2.347308 \n", - "2 2.798788 2.782963 \n", - "3 2.355813 2.314417 \n", - "4 1.868699 1.865663 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.013902607489678993, 0.013241494756981564, -... \n", - "1 [0.00027019944749503126, 0.005353652289998999,... \n", - "2 [0.00027019944749503126, 0.005353652289998999,... \n", - "3 [-0.0026976204618851985, 0.001541600665881322,... \n", - "4 [-0.0008601077391385219, 0.005201185839222482,... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [0.0014224480432097992, 0.0031547764732941653,... \n", - "1 [-0.0032792710227188605, 0.0036472880832864947... \n", - "2 [0.015322423107720673, -0.0024500099720118624,... \n", - "3 [0.0033640181667058486, 0.014044398230441645, ... \n", - "4 [0.00923153244996602, 0.011960544533439752, 0.... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.01371531560905985, 0.013126875633706597, -0... \n", - "1 [0.00027492382990721006, 0.0053545622809597, -... \n", - "2 [0.00027492382990721006, 0.0053545622809597, -... \n", - "3 [-0.002678224125439186, 0.0015598357892553907,... \n", - "4 [-0.0008458279784483333, 0.005209858282773185,... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [0.0014206775968733409, 0.0031581452887393872,... \n", - "1 [-0.0032450374860671267, 0.0036673577053825254... \n", - "2 [0.015281665873653082, -0.002421165402091456, ... \n", - "3 [0.0033484286344994184, 0.014002864550517797, ... \n", - "4 [0.009207264410626997, 0.011951895965764294, 0... \n", - "\n", - " concat_probase_19k_v2_old_cossim concat_probase_19k_v2_2_new_cossim \\\n", - "0 2.697022 2.683318 \n", - "1 2.485859 2.481352 \n", - "2 2.798788 2.795047 \n", - "3 2.355813 2.350603 \n", - "4 1.868699 1.866785 \n", - "\n", - " avg_old \n", - "0 3.0 \n", - "1 3.2 \n", - "2 4.0 \n", - "3 3.0 \n", - "4 1.2 \n", - "\n", - "[5 rows x 105 columns]" - ] - }, - "execution_count": 157, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "rising-platform", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.20519776]])" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cosine_similarity(np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word1_new'][1:-1].split(\",\")]).reshape(1,-1), np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word2_new'][1:-1].split(\",\")]).reshape(1,-1))" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "governing-offer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Word 1', 'Word 2', 'ID', 'H_Sim', 'H_Dim', 'F_Sim', 'F_Dim', 'N_Sim',\n", - " 'N_Dim', 'D_Sim',\n", - " ...\n", - " 'concat_19k_v2_word1_new', 'concat_19k_v2_word2_new',\n", - " 'concat_19k_v2_old_cosSim', 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_word1_old', 'concat_probase_19k_v2_word2_old',\n", - " 'concat_probase_19k_v2_word1_new', 'concat_probase_19k_v2_word2_new',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim'],\n", - " dtype='object', length=104)" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "rough-february", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_7props_19k_2_new_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'text_2props_19k_2_new_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'complex_19k_2_new_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'transe_19k_1_new_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_19k_2_new_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_2_new_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'complex_probase_2_new_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'transe_probase_1_new_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'complex_probase_19k_2_new_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_1_new_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_19k_v1_2_new_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_2_new_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim']" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "hired-center", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "\n", - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "extraordinary-value", - "metadata": {}, - "outputs": [], - "source": [ - "emb_pairs = [('text_7props_19k', 'text_7props_19k_2'),\n", - " ('text_2props_19k', 'text_2props_19k_2'),\n", - " ('complex_19k', 'complex_19k_2'),\n", - " ('transe_19k', 'transe_19k_1'),\n", - " ('abstract_19k', 'abstract_19k_2'),\n", - " ('abstract_firstSent_19k', 'abstract_firstSent_19k_2'),\n", - " ('complex_probase', 'complex_probase_2'),\n", - " ('transe_probase', 'transe_probase_1'),\n", - " ('complex_probase_19k', 'complex_probase_19k_2'),\n", - " ('transe_probase_19k', 'transe_probase_19k_1'),\n", - " ('concat_19k_v1', 'concat_19k_v1_2'),\n", - " ('concat_probase_19k_v1', 'concat_probase_19k_v1_2'),\n", - " ('concat_19k_v2', 'concat_19k_v2_2'),\n", - " ('concat_probase_19k_v2', 'concat_probase_19k_v2_2')]\n", - "colMappers = {p[0]+'_old_cosSim': p[1]+'_new_cosSim' for p in emb_pairs}" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "political-battle", - "metadata": {}, - "outputs": [], - "source": [ - "oldColList = list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "flexible-booking", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 123, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "radio-outline", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_with_r3.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "recent-portal", - "metadata": {}, - "outputs": [], - "source": [ - "# oldColList, [colMappers[col] for col in oldColList]\n", - "t1234 = []\n", - "t4567 = []\n", - "for col in oldColList:\n", - " t1234.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(label_samples), wordSim353AnnotDF_New_Merged_DF[col].apply(label_samples)))\n", - " t4567.append(accuracy_score(wordSim353AnnotDF_New_Merged_DF.Avg.apply(label_samples), wordSim353AnnotDF_New_Merged_DF[colMappers[col]].apply(label_samples)))\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "id": "opening-inside", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = list(zip(indNames,t1234, t4567))" - ] - }, - { - "cell_type": "code", - "execution_count": 187, - "id": "settled-overhead", - "metadata": {}, - "outputs": [], - "source": [ - "t1234 = pd.DataFrame(t1234, columns=['Type', 'Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category'])" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "id": "young-heath", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TypeAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated category
10Complex-Transe-AbsFirstSent - 19k0.6802330.686047
11Complex-Transe-AbsFirstSent - Probase-19k0.6802330.680233
8Complex - Probase-19k0.5988370.662791
2Complex - 19k0.5988370.659884
6Complex - Probase0.5988370.656977
3Transe - 19k0.5988370.654070
5Abstract First Sentence - 19k0.6511630.654070
7Transe - Probase0.5988370.645349
9Transe - Probase-19k0.5988370.642442
4Abstract - 19k0.6279070.627907
136 embeddings - Probase-19k0.6250000.627907
126 embeddings - 19k0.6250000.625000
0Text 7 props - 19k0.5726740.569767
1Text 2 props - 19k0.5668600.555233
\n", - "
" - ], - "text/plain": [ - " Type \\\n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "8 Complex - Probase-19k \n", - "2 Complex - 19k \n", - "6 Complex - Probase \n", - "3 Transe - 19k \n", - "5 Abstract First Sentence - 19k \n", - "7 Transe - Probase \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "10 0.680233 \n", - "11 0.680233 \n", - "8 0.598837 \n", - "2 0.598837 \n", - "6 0.598837 \n", - "3 0.598837 \n", - "5 0.651163 \n", - "7 0.598837 \n", - "9 0.598837 \n", - "4 0.627907 \n", - "13 0.625000 \n", - "12 0.625000 \n", - "0 0.572674 \n", - "1 0.566860 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \n", - "10 0.686047 \n", - "11 0.680233 \n", - "8 0.662791 \n", - "2 0.659884 \n", - "6 0.656977 \n", - "3 0.654070 \n", - "5 0.654070 \n", - "7 0.645349 \n", - "9 0.642442 \n", - "4 0.627907 \n", - "13 0.627907 \n", - "12 0.625000 \n", - "0 0.569767 \n", - "1 0.555233 " - ] - }, - "execution_count": 188, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t1234.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "id": "beneficial-continuity", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " tempVals.append(acc/N_SPLITS)\n", - "\n", - " for col in colList:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " tempVals.append(acc/N_SPLITS)\n", - " return tempVals\n", - "\n", - "def compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, newColList, indNames):\n", - " tempVals1 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, oldColList)\n", - " tempVals2 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, newColList)\n", - " summ = (pd.DataFrame(list(zip(tempVals1, tempVals2)), index = ['Combined'] + indNames, columns = ['Accuracy (in %) of old embeddings compared to annotated category', 'Accuracy (in %) of new embeddings compared to annotated category']) * 100)\n", - " summ['Increase'] = summ['Accuracy (in %) of new embeddings compared to annotated category'] - summ['Accuracy (in %) of old embeddings compared to annotated category']\n", - " return summ.sort_values(by=['Increase'], ascending=False)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "intensive-platform", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "id": "significant-season", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracyRF(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = RandomForestClassifier(max_depth=max(2 * len(colList) // 3,3), random_state=100)\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "id": "fitting-jurisdiction", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Text 2 props - 19k66.00000067.1596641.159664
Complex - 19k66.86554667.1596640.294118
Combined68.89916069.1680670.268908
Transe - 19k66.86554666.571429-0.294118
Abstract - 19k66.54621865.983193-0.563025
Text 7 props - 19k67.74789967.159664-0.588235
Abstract First Sentence - 19k73.21848771.504202-1.714286
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Text 2 props - 19k 66.000000 \n", - "Complex - 19k 66.865546 \n", - "Combined 68.899160 \n", - "Transe - 19k 66.865546 \n", - "Abstract - 19k 66.546218 \n", - "Text 7 props - 19k 67.747899 \n", - "Abstract First Sentence - 19k 73.218487 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Text 2 props - 19k 67.159664 \n", - "Complex - 19k 67.159664 \n", - "Combined 69.168067 \n", - "Transe - 19k 66.571429 \n", - "Abstract - 19k 65.983193 \n", - "Text 7 props - 19k 67.159664 \n", - "Abstract First Sentence - 19k 71.504202 \n", - "\n", - " Increase \n", - "Text 2 props - 19k 1.159664 \n", - "Complex - 19k 0.294118 \n", - "Combined 0.268908 \n", - "Transe - 19k -0.294118 \n", - "Abstract - 19k -0.563025 \n", - "Text 7 props - 19k -0.588235 \n", - "Abstract First Sentence - 19k -1.714286 " - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - "'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', \n", - " 'Transe - 19k', 'Abstract - 19k', 'Abstract First Sentence - 19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "loose-cuisine", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncrease
Complex + Transe + Abstract FirstSent 19k66.17647166.4621850.285714
Combined68.75630369.0336130.277311
Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent69.63025269.327731-0.302521
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.176471 \n", - "Combined 68.756303 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.630252 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "Complex + Transe + Abstract FirstSent 19k 66.462185 \n", - "Combined 69.033613 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... 69.327731 \n", - "\n", - " Increase \n", - "Complex + Transe + Abstract FirstSent 19k 0.285714 \n", - "Combined 0.277311 \n", - "Text7, Text2, Complex, Transe, Abstract, Abstra... -0.302521 " - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "oldColList = ['concat_19k_v1_old_cosSim',\n", - "'concat_19k_v2_old_cosSim']\n", - "indNames = ['Complex + Transe + Abstract FirstSent 19k', 'Text7, Text2, Complex, Transe, Abstract, Abstract FirstSent']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "second-lightning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'old_cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 271, - "id": "institutional-gamma", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "KeyboardInterrupt\n", - "\n" - ] - } - ], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, [colMappers[col] for col in oldColList], indNames)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "seven-edinburgh", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "individual-store", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "processed-reynolds", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "oldColList = ['text_7props_19k_old_cosSim',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'complex_19k_old_cosSim',\n", - " 'transe_19k_old_cosSim',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'complex_probase_old_cosSim',\n", - " 'transe_probase_old_cosSim',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_old_cosSim']\n", - "indNames = ['Text 7 props - 19k', 'Text 2 props - 19k', 'Complex - 19k', 'Transe - 19k', \n", - " 'Abstract - 19k', 'Abstract First Sentence - 19k', 'Complex - Probase', 'Transe - Probase', \n", - " 'Complex - Probase-19k', 'Transe - Probase-19k', 'Complex-Transe-AbsFirstSent - 19k',\n", - " 'Complex-Transe-AbsFirstSent - Probase-19k', '6 embeddings - 19k',\n", - " '6 embeddings - Probase-19k']\n", - "oldColPairs = list(zip(oldColList, indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "forced-dining", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Text 7 props - 19k\n", - "Text 2 props - 19k\n", - "Complex - 19k\n", - "Transe - 19k\n", - "Abstract - 19k\n", - "Abstract First Sentence - 19k\n", - "Complex - Probase\n", - "Transe - Probase\n", - "Complex - Probase-19k\n", - "Transe - Probase-19k\n", - "Complex-Transe-AbsFirstSent - 19k\n", - "Complex-Transe-AbsFirstSent - Probase-19k\n", - "6 embeddings - 19k\n", - "6 embeddings - Probase-19k\n" - ] - } - ], - "source": [ - "print(\"\\n\".join(indNames))" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "permanent-comfort", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2002" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "comb(len(oldColPairs), 9)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "quantitative-japanese", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "16384" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "2**(len(oldColPairs))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "flexible-preparation", - "metadata": {}, - "outputs": [], - "source": [ - "# accs = []\n", - "# for r in tqdm(range(1,len(oldColPairs)+1)):\n", - "# for comb in tqdm(combinations(oldColPairs, r)):\n", - "# print(len(comb))\n", - "# # oldAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [col[0] for col in comb])\n", - "# # newAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [colMappers[col[0]] for col in comb])\n", - "# print(\" & \".join([col[1] for col in comb]).count(\"&\"))\n", - "# # accs.append((indName, oldAcc, newAcc))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 316, - "id": "fatal-publicity", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "77739ea8b6bf4cfb933f406e6e9699a5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.42857165.126050-0.3025211
1Text 2 props - 19k64.55462263.680672-0.8739501
2Complex - 19k64.57983265.4453780.8655461
3Transe - 19k64.57983266.8907562.3109241
4Abstract - 19k67.73949668.0504200.3109241
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.428571 \n", - "1 64.554622 \n", - "2 64.579832 \n", - "3 64.579832 \n", - "4 67.739496 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 65.126050 -0.302521 \n", - "1 63.680672 -0.873950 \n", - "2 65.445378 0.865546 \n", - "3 66.890756 2.310924 \n", - "4 68.050420 0.310924 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 325, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 326, - "id": "congressional-genre", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 327, - "id": "single-duration", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 328, - "id": "sharp-tunisia", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
30Text 2 props - 19k & Abstract First Sentence - 19k71.84033670.966387-0.8739502
204Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k71.84033670.378151-1.4621853
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
60Abstract - 19k & Abstract First Sentence - 19k71.54621871.243697-0.3025212
12350Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.504202-1.4705888
12329Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.075630-0.8991608
12154Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479070.084034-0.8907568
11944Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.781513-1.1932778
12349Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.97479069.210084-1.7647068
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "30 Text 2 props - 19k & Abstract First Sentence - 19k \n", - "204 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "12350 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12329 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12154 Text 2 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "11944 Text 2 props - 19k & Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "12349 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "30 71.840336 \n", - "204 71.840336 \n", - "18 71.840336 \n", - "60 71.546218 \n", - "12350 70.974790 \n", - "12329 70.974790 \n", - "12154 70.974790 \n", - "11944 70.974790 \n", - "12349 70.974790 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "30 70.966387 \n", - "204 70.378151 \n", - "18 71.848739 \n", - "60 71.243697 \n", - "12350 69.504202 \n", - "12329 70.075630 \n", - "12154 70.084034 \n", - "11944 69.781513 \n", - "12349 69.210084 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "30 -0.873950 2 \n", - "204 -1.462185 3 \n", - "18 0.008403 2 \n", - "60 -0.302521 2 \n", - "12350 -1.470588 8 \n", - "12329 -0.899160 8 \n", - "12154 -0.890756 8 \n", - "11944 -1.193277 8 \n", - "12349 -1.764706 8 " - ] - }, - "execution_count": 328, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 329, - "id": "federal-timing", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
18Text 7 props - 19k & Abstract First Sentence - 19k71.84033671.8487390.0084032
5318Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.39495871.5462181.1512616
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
108Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k69.21008471.2521012.0420173
694Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k70.08403471.2521011.1680674
8035Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.09243771.2521011.1596647
7049Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k70.38655571.2521010.8655467
1916Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k69.79831971.2521011.4537825
11327Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k70.10084071.2521011.1512618
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "18 Text 7 props - 19k & Abstract First Sentence - 19k \n", - "5318 Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "108 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k \n", - "694 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "8035 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7049 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "1916 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "11327 Text 7 props - 19k & Transe - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "18 71.840336 \n", - "5318 70.394958 \n", - "5 72.705882 \n", - "51 68.630252 \n", - "108 69.210084 \n", - "694 70.084034 \n", - "8035 70.092437 \n", - "7049 70.386555 \n", - "1916 69.798319 \n", - "11327 70.100840 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "18 71.848739 \n", - "5318 71.546218 \n", - "5 71.537815 \n", - "51 71.521008 \n", - "108 71.252101 \n", - "694 71.252101 \n", - "8035 71.252101 \n", - "7049 71.252101 \n", - "1916 71.252101 \n", - "11327 71.252101 \n", - "\n", - " Increase count \n", - "18 0.008403 2 \n", - "5318 1.151261 6 \n", - "5 -1.168067 1 \n", - "51 2.890756 2 \n", - "108 2.042017 3 \n", - "694 1.168067 4 \n", - "8035 1.159664 7 \n", - "7049 0.865546 7 \n", - "1916 1.453782 5 \n", - "11327 1.151261 8 " - ] - }, - "execution_count": 329, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 330, - "id": "known-basement", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
1041Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k66.28571469.1932772.9075634
2828Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k65.71428668.6134452.8991605
51Transe - 19k & Abstract First Sentence - 19k68.63025271.5210082.8907562
9440Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k66.56302569.1848742.6218497
2701Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k65.71428668.3277312.6134455
1035Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k66.28571468.8991602.6134454
1030Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k66.28571468.8991602.6134454
2689Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k65.71428668.3193282.6050425
2834Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k65.71428668.3193282.6050425
1026Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k68.64705971.2268912.5798324
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "1041 Complex - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "2828 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k \n", - "51 Transe - 19k & Abstract First Sentence - 19k \n", - "9440 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "2701 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & Transe - Probase-19k \n", - "1035 Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k \n", - "1030 Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase-19k \n", - "2689 Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k \n", - "2834 Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k \n", - "1026 Complex - 19k & Abstract - 19k & Abstract First Sentence - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "1041 66.285714 \n", - "2828 65.714286 \n", - "51 68.630252 \n", - "9440 66.563025 \n", - "2701 65.714286 \n", - "1035 66.285714 \n", - "1030 66.285714 \n", - "2689 65.714286 \n", - "2834 65.714286 \n", - "1026 68.647059 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "1041 69.193277 \n", - "2828 68.613445 \n", - "51 71.521008 \n", - "9440 69.184874 \n", - "2701 68.327731 \n", - "1035 68.899160 \n", - "1030 68.899160 \n", - "2689 68.319328 \n", - "2834 68.319328 \n", - "1026 71.226891 \n", - "\n", - " Increase count \n", - "1041 2.907563 4 \n", - "2828 2.899160 5 \n", - "51 2.890756 2 \n", - "9440 2.621849 7 \n", - "2701 2.613445 5 \n", - "1035 2.613445 4 \n", - "1030 2.613445 4 \n", - "2689 2.605042 5 \n", - "2834 2.605042 5 \n", - "1026 2.579832 4 " - ] - }, - "execution_count": 330, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "id": "private-conditions", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k72.70588271.537815-1.1680671
126 embeddings - 19k70.09243771.2521011.1596641
136 embeddings - Probase-19k70.09243770.6722690.5798321
4Abstract - 19k67.73949668.0504200.3109241
11Complex-Transe-AbsFirstSent - Probase-19k67.47058867.176471-0.2941181
10Complex-Transe-AbsFirstSent - 19k67.47058866.899160-0.5714291
3Transe - 19k64.57983266.8907562.3109241
9Transe - Probase-19k64.57983266.8907562.3109241
7Transe - Probase64.57983266.5966392.0168071
8Complex - Probase-19k64.57983265.4453780.8655461
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "12 6 embeddings - 19k \n", - "13 6 embeddings - Probase-19k \n", - "4 Abstract - 19k \n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "7 Transe - Probase \n", - "8 Complex - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 72.705882 \n", - "12 70.092437 \n", - "13 70.092437 \n", - "4 67.739496 \n", - "11 67.470588 \n", - "10 67.470588 \n", - "3 64.579832 \n", - "9 64.579832 \n", - "7 64.579832 \n", - "8 64.579832 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 71.537815 \n", - "12 71.252101 \n", - "13 70.672269 \n", - "4 68.050420 \n", - "11 67.176471 \n", - "10 66.899160 \n", - "3 66.890756 \n", - "9 66.890756 \n", - "7 66.596639 \n", - "8 65.445378 \n", - "\n", - " Increase count \n", - "5 -1.168067 1 \n", - "12 1.159664 1 \n", - "13 0.579832 1 \n", - "4 0.310924 1 \n", - "11 -0.294118 1 \n", - "10 -0.571429 1 \n", - "3 2.310924 1 \n", - "9 2.310924 1 \n", - "7 2.016807 1 \n", - "8 0.865546 1 " - ] - }, - "execution_count": 331, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs[allCombs['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "markdown", - "id": "heard-think", - "metadata": {}, - "source": [ - "## RF" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "id": "trying-liabilities", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "123c20d4e60b4e3e8b09c0e0e46efc1e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.12605063.672269-1.4537821
1Text 2 props - 19k61.89916063.3445381.4453781
2Complex - 19k66.61344564.277311-2.3361341
3Transe - 19k66.61344566.310924-0.3025211
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.126050 \n", - "1 61.899160 \n", - "2 66.613445 \n", - "3 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 63.672269 -1.453782 \n", - "1 63.344538 1.445378 \n", - "2 64.277311 -2.336134 \n", - "3 66.310924 -0.302521 \n", - "4 66.008403 -2.890756 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "id": "increased-indonesian", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs1)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "id": "english-brother", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "id": "fantastic-narrow", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
60Abstract - 19k & Abstract First Sentence - 19k72.11764768.327731-3.7899162
138Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k72.10084070.361345-1.7394963
151Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.83193370.378151-1.4537823
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
2114Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k71.81512669.789916-2.0252105
2001Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k71.81512669.798319-2.0168075
2000Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k71.81512670.378151-1.4369755
1999Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k71.81512669.495798-2.3193285
1998Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k71.81512669.487395-2.3277315
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "138 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "151 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "2114 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "2001 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "2000 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "1999 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k \n", - "1998 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 73.285714 \n", - "60 72.117647 \n", - "138 72.100840 \n", - "151 71.831933 \n", - "152 71.831933 \n", - "2114 71.815126 \n", - "2001 71.815126 \n", - "2000 71.815126 \n", - "1999 71.815126 \n", - "1998 71.815126 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 70.075630 \n", - "60 68.327731 \n", - "138 70.361345 \n", - "151 70.378151 \n", - "152 71.252101 \n", - "2114 69.789916 \n", - "2001 69.798319 \n", - "2000 70.378151 \n", - "1999 69.495798 \n", - "1998 69.487395 \n", - "\n", - " Increase count \n", - "5 -3.210084 1 \n", - "60 -3.789916 2 \n", - "138 -1.739496 3 \n", - "151 -1.453782 3 \n", - "152 -0.579832 3 \n", - "2114 -2.025210 5 \n", - "2001 -2.016807 5 \n", - "2000 -1.436975 5 \n", - "1999 -2.319328 5 \n", - "1998 -2.327731 5 " - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 259, - "id": "brown-punishment", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
681Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k70.66386671.2605040.5966394
218Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.22689171.2521010.0252103
1575Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.23529471.2521010.0168075
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
3884Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k68.31092471.2352942.9243706
129Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k69.76470671.2352941.4705883
217Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.22689170.974790-0.2521013
604Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.52941270.966387-0.5630254
7207Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k68.60504270.9663872.3613457
690Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k70.66386670.9663870.3025214
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "681 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k \n", - "218 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "1575 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "3884 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "129 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k \n", - "217 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "604 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "7207 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "690 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "681 70.663866 \n", - "218 71.226891 \n", - "1575 71.235294 \n", - "152 71.831933 \n", - "3884 68.310924 \n", - "129 69.764706 \n", - "217 71.226891 \n", - "604 71.529412 \n", - "7207 68.605042 \n", - "690 70.663866 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "681 71.260504 \n", - "218 71.252101 \n", - "1575 71.252101 \n", - "152 71.252101 \n", - "3884 71.235294 \n", - "129 71.235294 \n", - "217 70.974790 \n", - "604 70.966387 \n", - "7207 70.966387 \n", - "690 70.966387 \n", - "\n", - " Increase count \n", - "681 0.596639 4 \n", - "218 0.025210 3 \n", - "1575 0.016807 5 \n", - "152 -0.579832 3 \n", - "3884 2.924370 6 \n", - "129 1.470588 3 \n", - "217 -0.252101 3 \n", - "604 -0.563025 4 \n", - "7207 2.361345 7 \n", - "690 0.302521 4 " - ] - }, - "execution_count": 259, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 260, - "id": "considerable-syndication", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
13048Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210170.3529416.1008409
13084Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210169.2100844.9579839
14022Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.52941269.1764714.6470599
13861Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.24369768.8907564.6470599
7551Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k63.09243767.7226894.6302527
13058Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210168.6050424.3529419
6500Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k63.68907668.0336134.3445387
7537Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k63.09243767.4369754.3445387
7570Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k63.09243767.4285714.3361347
6499Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k63.68907668.0252104.3361347
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "13048 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "13084 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "14022 Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "13861 Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7551 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "13058 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "6500 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7537 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7570 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k \n", - "6499 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "13048 64.252101 \n", - "13084 64.252101 \n", - "14022 64.529412 \n", - "13861 64.243697 \n", - "7551 63.092437 \n", - "13058 64.252101 \n", - "6500 63.689076 \n", - "7537 63.092437 \n", - "7570 63.092437 \n", - "6499 63.689076 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "13048 70.352941 \n", - "13084 69.210084 \n", - "14022 69.176471 \n", - "13861 68.890756 \n", - "7551 67.722689 \n", - "13058 68.605042 \n", - "6500 68.033613 \n", - "7537 67.436975 \n", - "7570 67.428571 \n", - "6499 68.025210 \n", - "\n", - " Increase count \n", - "13048 6.100840 9 \n", - "13084 4.957983 9 \n", - "14022 4.647059 9 \n", - "13861 4.647059 9 \n", - "7551 4.630252 7 \n", - "13058 4.352941 9 \n", - "6500 4.344538 7 \n", - "7537 4.344538 7 \n", - "7570 4.336134 7 \n", - "6499 4.336134 7 " - ] - }, - "execution_count": 260, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 261, - "id": "binary-committee", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
11Complex-Transe-AbsFirstSent - Probase-19k70.04201770.6302520.5882351
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
10Complex-Transe-AbsFirstSent - 19k70.04201768.302521-1.7394961
136 embeddings - Probase-19k68.90756368.042017-0.8655461
126 embeddings - 19k68.90756366.857143-2.0504201
6Complex - Probase66.61344566.596639-0.0168071
7Transe - Probase66.61344566.596639-0.0168071
3Transe - 19k66.61344566.310924-0.3025211
9Transe - Probase-19k66.61344566.008403-0.6050421
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "6 Complex - Probase \n", - "7 Transe - Probase \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "11 70.042017 \n", - "5 73.285714 \n", - "10 70.042017 \n", - "13 68.907563 \n", - "12 68.907563 \n", - "6 66.613445 \n", - "7 66.613445 \n", - "3 66.613445 \n", - "9 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "11 70.630252 \n", - "5 70.075630 \n", - "10 68.302521 \n", - "13 68.042017 \n", - "12 66.857143 \n", - "6 66.596639 \n", - "7 66.596639 \n", - "3 66.310924 \n", - "9 66.008403 \n", - "4 66.008403 \n", - "\n", - " Increase count \n", - "11 0.588235 1 \n", - "5 -3.210084 1 \n", - "10 -1.739496 1 \n", - "13 -0.865546 1 \n", - "12 -2.050420 1 \n", - "6 -0.016807 1 \n", - "7 -0.016807 1 \n", - "3 -0.302521 1 \n", - "9 -0.605042 1 \n", - "4 -2.890756 1 " - ] - }, - "execution_count": 261, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1[allCombs1['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "approximate-event", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "successful-spider", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "moral-thought", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "western-easter", - "metadata": {}, - "source": [ - "# Generate Embeddings Files" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "nervous-physiology", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = pd.concat([wordSim353AnnotDF_New2[['word1_kg_id', 'Word 1']], wordSim353AnnotDF_New2[['word2_kg_id', 'Word 2']].rename(columns={'Word 2': 'Word 1', 'word2_kg_id': 'word1_kg_id'})])" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "neither-hammer", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = wordList[~wordList.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "welsh-indiana", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in embedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "processed-wonder", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in newEmbedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings_new_attempt1.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "psychological-template", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['Word 1'].to_csv('../data/wordsim353_embeddings_words.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prime-munich", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assigned-appliance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "severe-textbook", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prompt-orlando", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "otherwise-qatar", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "inclusive-brick", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "micro-kernel", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "optical-atlas", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assured-means", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-fever", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opened-baker", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "supposed-charm", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "308px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/SVM Hans.ipynb b/SVM Hans.ipynb deleted file mode 100644 index 9eb4cd6..0000000 --- a/SVM Hans.ipynb +++ /dev/null @@ -1,3513 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "dynamic-generator", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn.metrics.pairwise import euclidean_distances\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.metrics import confusion_matrix\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from tqdm.notebook import tqdm\n", - "from itertools import combinations\n", - "from math import comb\n", - "from sklearn.ensemble import RandomForestClassifier" - ] - }, - { - "cell_type": "markdown", - "id": "million-analyst", - "metadata": {}, - "source": [ - "# Determine Differences" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "operating-launch", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_annotation_task_qnodes_kartik_20210629+IDs+jiang_conrath_sim.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "regional-denmark", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimLat = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "functional-chosen", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF.set_index(['Word 1', 'Word 2']).join(wordsimLat.set_index(['Word 1', 'Word 2']),rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "coral-puppy", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "alone-rendering", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDword1_kg_idword1_kg_labelword1_kg_descriptionword2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace8Q34211Yasser Arafatformer Palestinian PresidentQ454peacestate of harmony characterized by lack of viol...2.1250...[0.006720443092017323, 0.008331487679612525, 0...[-0.004515859576248157, -0.01172366887295375, ...3.2445393.175157[0.006720440291834372, 0.008331484208161396, 0...[-0.005011610937734838, -0.013383541550578623,...[0.006720440291834372, 0.008331484208161396, 0...[-0.00497129831746384, -0.01325426749683971, -...3.2445393.240270
1Arafatterror9Q34211Yasser Arafatformer Palestinian PresidentQ13648784terrorpolicy of political repression and violence3.0625...[0.006720443092017323, 0.008331487679612525, 0...[-0.004862257088069111, 0.014077170590128979, ...3.0850833.013958[0.006720440291834372, 0.008331484208161396, 0...[-0.005805280438126139, 0.015115419696749257, ...[0.006720440291834372, 0.008331484208161396, 0...[-0.004862255062129871, 0.014077164724644747, ...3.0850833.013958
2FBIfingerprint109Q8333Federal Bureau of InvestigationUnited States law enforcement agencyQ178022fingerprintbiometric identifier4.0625...[0.006466897059812569, 0.014694837542908411, -...[0.01523113309590259, 0.005271417380511587, -0...2.8230932.745230[0.006466894365273728, 0.014694831420063071, -...[0.013922101136130544, 0.0023911842131386003, ...[0.006466894365273728, 0.014694831420063071, -...[0.013814564227839972, 0.0024352598952305004, ...2.8230932.816176
3FBIinvestigation110Q8333Federal Bureau of InvestigationUnited States law enforcement agencyQ21004260inquiryprocess that has the aim of augmenting knowled...5.0625...[0.006466897059812569, 0.014694837542908411, -...[0.013016090623183913, 0.01114268771757639, -0...2.9209862.886161[0.006466894365273728, 0.014694831420063071, -...[0.01327496060589727, 0.010965634890657862, -0...[0.006466894365273728, 0.014694831420063071, -...[0.013242882546106787, 0.010953106196386554, -...2.9209862.919120
4HarvardYale137Q13371Harvard Universityprivate research university in Cambridge, Mass...Q49112Yale Universityprivate research university in New Haven, Conn...4.8750...[0.01322626159341165, 0.005047111630696947, -0...[0.010410829393995813, 0.014776997996557633, -...1.7076551.707655[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...1.7076551.707655
\n", - "

5 rows × 117 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID word1_kg_id word1_kg_label \\\n", - "0 Arafat peace 8 Q34211 Yasser Arafat \n", - "1 Arafat terror 9 Q34211 Yasser Arafat \n", - "2 FBI fingerprint 109 Q8333 Federal Bureau of Investigation \n", - "3 FBI investigation 110 Q8333 Federal Bureau of Investigation \n", - "4 Harvard Yale 137 Q13371 Harvard University \n", - "\n", - " word1_kg_description word2_kg_id \\\n", - "0 former Palestinian President Q454 \n", - "1 former Palestinian President Q13648784 \n", - "2 United States law enforcement agency Q178022 \n", - "3 United States law enforcement agency Q21004260 \n", - "4 private research university in Cambridge, Mass... Q49112 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 peace state of harmony characterized by lack of viol... \n", - "1 terror policy of political repression and violence \n", - "2 fingerprint biometric identifier \n", - "3 inquiry process that has the aim of augmenting knowled... \n", - "4 Yale University private research university in New Haven, Conn... \n", - "\n", - " Human (Mean) ... concat_19k_v2_word1_new \\\n", - "0 2.1250 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "1 3.0625 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "2 4.0625 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "3 5.0625 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "4 4.8750 ... [0.01322626159341165, 0.005047111630696947, -0... \n", - "\n", - " concat_19k_v2_word2_new \\\n", - "0 [-0.004515859576248157, -0.01172366887295375, ... \n", - "1 [-0.004862257088069111, 0.014077170590128979, ... \n", - "2 [0.01523113309590259, 0.005271417380511587, -0... \n", - "3 [0.013016090623183913, 0.01114268771757639, -0... \n", - "4 [0.010410829393995813, 0.014776997996557633, -... \n", - "\n", - " concat_19k_v2_old_cosSim concat_19k_v2_2_new_cosSim \\\n", - "0 3.244539 3.175157 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.745230 \n", - "3 2.920986 2.886161 \n", - "4 1.707655 1.707655 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.005011610937734838, -0.013383541550578623,... \n", - "1 [-0.005805280438126139, 0.015115419696749257, ... \n", - "2 [0.013922101136130544, 0.0023911842131386003, ... \n", - "3 [0.01327496060589727, 0.010965634890657862, -0... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.00497129831746384, -0.01325426749683971, -... \n", - "1 [-0.004862255062129871, 0.014077164724644747, ... \n", - "2 [0.013814564227839972, 0.0024352598952305004, ... \n", - "3 [0.013242882546106787, 0.010953106196386554, -... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.244539 3.240270 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.816176 \n", - "3 2.920986 2.919120 \n", - "4 1.707655 1.707655 \n", - "\n", - "[5 rows x 117 columns]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "documented-civilian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 1, 1, 19, 4, 0]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "[wordSim353AnnotDF_New_Merged_DF[col].isna().sum() for col in ['Human (Mean)', 'complex', 'transe', 'text', 'class', 'jc_sim']]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "hollywood-trade", - "metadata": {}, - "outputs": [], - "source": [ - "for col in ['complex', 'transe', 'text', 'class', 'jc_sim']:\n", - " wordSim353AnnotDF_New_Merged_DF[col] = wordSim353AnnotDF_New_Merged_DF[col].fillna(-1)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "dangerous-syndicate", - "metadata": {}, - "outputs": [], - "source": [ - "# def determineFarNessOfOld(val1):\n", - "# if 0.000000 <= val1 < 0.496332:\n", - "# return 0\n", - "# else:\n", - "# return 1\n", - "# def determineFarNessOfNew(val1):\n", - "# if 0 <= val1 < 0.570044:\n", - "# return 0\n", - "# else:\n", - "# return 1\n", - "\n", - "# wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff'].apply(determineFarNessOfOld)\n", - "# wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] = wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff'].apply(determineFarNessOfNew)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "monthly-application", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[['Word 1', 'Word 2', 'Avg', 'transe_19k_old_cosSim', 'transe_19k_1_new_cosSim', 'transe_19k_old_cosSim_Diff', 'transe_19k_1_new_cosSim_Diff', 'transe_19k_old_cosSim_Diff_Cat', 'transe_19k_1_new_cosSim_Diff_Cat']]" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "ultimate-stuff", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "timely-jefferson", - "metadata": {}, - "outputs": [], - "source": [ - "# len(wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)])" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "miniature-problem", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New_Merged_DF = wordSim353AnnotDF_New_Merged_DF[]" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "incorporate-intermediate", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/good+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "american-february", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 0) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/good+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "herbal-kitty", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 0)].to_csv('../data/transEmb/bad+good.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "outside-korean", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSim353AnnotDF_New_Merged_DF[(wordSim353AnnotDF_New_Merged_DF['transe_19k_old_cosSim_Diff_Cat'] == 1) & (wordSim353AnnotDF_New_Merged_DF['transe_19k_1_new_cosSim_Diff_Cat'] == 1)].to_csv('../data/transEmb/bad+bad.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "steady-alliance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "thousand-multiple", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "nominated-variance", - "metadata": {}, - "source": [ - "# SVM Models" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "perceived-dutch", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_annotation_task_qnodes_kartik_20210629+IDs+jiang_conrath_sim.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "choice-worse", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDword1_kg_idword1_kg_labelword1_kg_descriptionword2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace8Q34211Yasser Arafatformer Palestinian PresidentQ454peacestate of harmony characterized by lack of viol...2.1250...[0.006720443092017323, 0.008331487679612525, 0...[-0.004515859576248157, -0.01172366887295375, ...3.2445393.175157[0.006720440291834372, 0.008331484208161396, 0...[-0.005011610937734838, -0.013383541550578623,...[0.006720440291834372, 0.008331484208161396, 0...[-0.00497129831746384, -0.01325426749683971, -...3.2445393.240270
1Arafatterror9Q34211Yasser Arafatformer Palestinian PresidentQ13648784terrorpolicy of political repression and violence3.0625...[0.006720443092017323, 0.008331487679612525, 0...[-0.004862257088069111, 0.014077170590128979, ...3.0850833.013958[0.006720440291834372, 0.008331484208161396, 0...[-0.005805280438126139, 0.015115419696749257, ...[0.006720440291834372, 0.008331484208161396, 0...[-0.004862255062129871, 0.014077164724644747, ...3.0850833.013958
2FBIfingerprint109Q8333Federal Bureau of InvestigationUnited States law enforcement agencyQ178022fingerprintbiometric identifier4.0625...[0.006466897059812569, 0.014694837542908411, -...[0.01523113309590259, 0.005271417380511587, -0...2.8230932.745230[0.006466894365273728, 0.014694831420063071, -...[0.013922101136130544, 0.0023911842131386003, ...[0.006466894365273728, 0.014694831420063071, -...[0.013814564227839972, 0.0024352598952305004, ...2.8230932.816176
3FBIinvestigation110Q8333Federal Bureau of InvestigationUnited States law enforcement agencyQ21004260inquiryprocess that has the aim of augmenting knowled...5.0625...[0.006466897059812569, 0.014694837542908411, -...[0.013016090623183913, 0.01114268771757639, -0...2.9209862.886161[0.006466894365273728, 0.014694831420063071, -...[0.01327496060589727, 0.010965634890657862, -0...[0.006466894365273728, 0.014694831420063071, -...[0.013242882546106787, 0.010953106196386554, -...2.9209862.919120
4HarvardYale137Q13371Harvard Universityprivate research university in Cambridge, Mass...Q49112Yale Universityprivate research university in New Haven, Conn...4.8750...[0.01322626159341165, 0.005047111630696947, -0...[0.010410829393995813, 0.014776997996557633, -...1.7076551.707655[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...1.7076551.707655
\n", - "

5 rows × 117 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID word1_kg_id word1_kg_label \\\n", - "0 Arafat peace 8 Q34211 Yasser Arafat \n", - "1 Arafat terror 9 Q34211 Yasser Arafat \n", - "2 FBI fingerprint 109 Q8333 Federal Bureau of Investigation \n", - "3 FBI investigation 110 Q8333 Federal Bureau of Investigation \n", - "4 Harvard Yale 137 Q13371 Harvard University \n", - "\n", - " word1_kg_description word2_kg_id \\\n", - "0 former Palestinian President Q454 \n", - "1 former Palestinian President Q13648784 \n", - "2 United States law enforcement agency Q178022 \n", - "3 United States law enforcement agency Q21004260 \n", - "4 private research university in Cambridge, Mass... Q49112 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 peace state of harmony characterized by lack of viol... \n", - "1 terror policy of political repression and violence \n", - "2 fingerprint biometric identifier \n", - "3 inquiry process that has the aim of augmenting knowled... \n", - "4 Yale University private research university in New Haven, Conn... \n", - "\n", - " Human (Mean) ... concat_19k_v2_word1_new \\\n", - "0 2.1250 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "1 3.0625 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "2 4.0625 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "3 5.0625 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "4 4.8750 ... [0.01322626159341165, 0.005047111630696947, -0... \n", - "\n", - " concat_19k_v2_word2_new \\\n", - "0 [-0.004515859576248157, -0.01172366887295375, ... \n", - "1 [-0.004862257088069111, 0.014077170590128979, ... \n", - "2 [0.01523113309590259, 0.005271417380511587, -0... \n", - "3 [0.013016090623183913, 0.01114268771757639, -0... \n", - "4 [0.010410829393995813, 0.014776997996557633, -... \n", - "\n", - " concat_19k_v2_old_cosSim concat_19k_v2_2_new_cosSim \\\n", - "0 3.244539 3.175157 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.745230 \n", - "3 2.920986 2.886161 \n", - "4 1.707655 1.707655 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.005011610937734838, -0.013383541550578623,... \n", - "1 [-0.005805280438126139, 0.015115419696749257, ... \n", - "2 [0.013922101136130544, 0.0023911842131386003, ... \n", - "3 [0.01327496060589727, 0.010965634890657862, -0... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.00497129831746384, -0.01325426749683971, -... \n", - "1 [-0.004862255062129871, 0.014077164724644747, ... \n", - "2 [0.013814564227839972, 0.0024352598952305004, ... \n", - "3 [0.013242882546106787, 0.010953106196386554, -... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.244539 3.240270 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.816176 \n", - "3 2.920986 2.919120 \n", - "4 1.707655 1.707655 \n", - "\n", - "[5 rows x 117 columns]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "continuing-fraud", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Word 1',\n", - " 'Word 2',\n", - " 'ID',\n", - " 'word1_kg_id',\n", - " 'word1_kg_label',\n", - " 'word1_kg_description',\n", - " 'word2_kg_id',\n", - " 'word2_kg_label',\n", - " 'word2_kg_description',\n", - " 'Human (Mean)',\n", - " 'complex',\n", - " 'transe',\n", - " 'text',\n", - " 'class',\n", - " 'jc_sim',\n", - " 'ID_right',\n", - " 'H_Sim',\n", - " 'H_Dim',\n", - " 'F_Sim',\n", - " 'F_Dim',\n", - " 'N_Sim',\n", - " 'N_Dim',\n", - " 'D_Sim',\n", - " 'D_Dim',\n", - " 'P_Sim',\n", - " 'P_Dim',\n", - " 'Avg',\n", - " 'Stdev',\n", - " 'H_orig',\n", - " 'H_reversed',\n", - " 'word1_kg_id_right',\n", - " 'word2_kg_id_right',\n", - " 'category',\n", - " 'text_7props_19k_word1_old',\n", - " 'text_7props_19k_word2_old',\n", - " 'text_7props_19k_word1_new',\n", - " 'text_7props_19k_word2_new',\n", - " 'text_7props_19k_old_cosSim',\n", - " 'text_7props_19k_2_new_cosSim',\n", - " 'text_2props_19k_word1_old',\n", - " 'text_2props_19k_word2_old',\n", - " 'text_2props_19k_word1_new',\n", - " 'text_2props_19k_word2_new',\n", - " 'text_2props_19k_old_cosSim',\n", - " 'text_2props_19k_2_new_cosSim',\n", - " 'complex_19k_word1_old',\n", - " 'complex_19k_word2_old',\n", - " 'complex_19k_word1_new',\n", - " 'complex_19k_word2_new',\n", - " 'complex_19k_old_cosSim',\n", - " 'complex_19k_1_new_cosSim',\n", - " 'transe_19k_word1_old',\n", - " 'transe_19k_word2_old',\n", - " 'transe_19k_word1_new',\n", - " 'transe_19k_word2_new',\n", - " 'transe_19k_old_cosSim',\n", - " 'transe_19k_1_new_cosSim',\n", - " 'abstract_19k_word1_old',\n", - " 'abstract_19k_word2_old',\n", - " 'abstract_19k_word1_new',\n", - " 'abstract_19k_word2_new',\n", - " 'abstract_19k_old_cosSim',\n", - " 'abstract_19k_2_new_cosSim',\n", - " 'abstract_firstSent_19k_word1_old',\n", - " 'abstract_firstSent_19k_word2_old',\n", - " 'abstract_firstSent_19k_word1_new',\n", - " 'abstract_firstSent_19k_word2_new',\n", - " 'abstract_firstSent_19k_old_cosSim',\n", - " 'abstract_firstSent_19k_2_new_cosSim',\n", - " 'complex_probase_word1_old',\n", - " 'complex_probase_word2_old',\n", - " 'complex_probase_word1_new',\n", - " 'complex_probase_word2_new',\n", - " 'complex_probase_old_cosSim',\n", - " 'complex_probase_2_new_cosSim',\n", - " 'transe_probase_word1_old',\n", - " 'transe_probase_word2_old',\n", - " 'transe_probase_word1_new',\n", - " 'transe_probase_word2_new',\n", - " 'transe_probase_old_cosSim',\n", - " 'transe_probase_1_new_cosSim',\n", - " 'complex_probase_19k_word1_old',\n", - " 'complex_probase_19k_word2_old',\n", - " 'complex_probase_19k_word1_new',\n", - " 'complex_probase_19k_word2_new',\n", - " 'complex_probase_19k_old_cosSim',\n", - " 'complex_probase_19k_1_new_cosSim',\n", - " 'transe_probase_19k_word1_old',\n", - " 'transe_probase_19k_word2_old',\n", - " 'transe_probase_19k_word1_new',\n", - " 'transe_probase_19k_word2_new',\n", - " 'transe_probase_19k_old_cosSim',\n", - " 'transe_probase_19k_1_new_cosSim',\n", - " 'concat_19k_v1_word1_old',\n", - " 'concat_19k_v1_word2_old',\n", - " 'concat_19k_v1_word1_new',\n", - " 'concat_19k_v1_word2_new',\n", - " 'concat_19k_v1_old_cosSim',\n", - " 'concat_19k_v1_2_new_cosSim',\n", - " 'concat_probase_19k_v1_word1_old',\n", - " 'concat_probase_19k_v1_word2_old',\n", - " 'concat_probase_19k_v1_word1_new',\n", - " 'concat_probase_19k_v1_word2_new',\n", - " 'concat_probase_19k_v1_old_cosSim',\n", - " 'concat_probase_19k_v1_2_new_cosSim',\n", - " 'concat_19k_v2_word1_old',\n", - " 'concat_19k_v2_word2_old',\n", - " 'concat_19k_v2_word1_new',\n", - " 'concat_19k_v2_word2_new',\n", - " 'concat_19k_v2_old_cosSim',\n", - " 'concat_19k_v2_2_new_cosSim',\n", - " 'concat_probase_19k_v2_word1_old',\n", - " 'concat_probase_19k_v2_word2_old',\n", - " 'concat_probase_19k_v2_word1_new',\n", - " 'concat_probase_19k_v2_word2_new',\n", - " 'concat_probase_19k_v2_old_cosSim',\n", - " 'concat_probase_19k_v2_2_new_cosSim']" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.columns.to_list()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "conservative-bunch", - "metadata": {}, - "outputs": [], - "source": [ - "# cosine_similarity(np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word1_new'][1:-1].split(\",\")]).reshape(1,-1), np.array([float(val1) for val1 in wordSim353AnnotDF_New_Merged_DF.iloc[0]['concat_19k_v2_word2_new'][1:-1].split(\",\")]).reshape(1,-1))" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "middle-tower", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['ID', 'Word 1', 'word1_kg_id', 'word1_kg_label', 'word1_kg_description',\n", - " 'Word 2', 'word2_kg_id', 'word2_kg_label', 'word2_kg_description',\n", - " 'Human (Mean)', 'complex', 'transe', 'text', 'class', 'jc_sim'],\n", - " dtype='object')" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "growing-edgar", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import KFold\n", - "\n", - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVR\n", - "\n", - "# from sklearn.metrics import accuracy_score\n", - "from sklearn.metrics import mean_squared_error\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "respiratory-washer", - "metadata": {}, - "outputs": [], - "source": [ - "# def trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, colList):\n", - "# X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - "# Y = wordSim353AnnotDF_New_Merged_DF['Avg']\n", - "\n", - "# N_SPLITS = 10\n", - "\n", - "# skf = KFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - "# X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - "# for train_index, test_index in skf.split(X, Y):\n", - "# X_train_splits.append(X.iloc[train_index])\n", - "# X_test_splits.append(X.iloc[test_index])\n", - "# Y_train_splits.append(Y.iloc[train_index])\n", - "# Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - "# preds = []\n", - "# for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - "# clf = make_pipeline(StandardScaler(), SVR(gamma='auto'))\n", - "# clf.fit(X_train1, Y_train1)\n", - "# preds.append(clf.predict(X_test1))\n", - "\n", - "# tempVals = []å\n", - "\n", - "# acc = 0\n", - "# for pred, Y_test1 in zip(preds, Y_test_splits):\n", - "# acc += mean_squared_error(pred, Y_test1)\n", - "\n", - "# tempVals.append(acc/N_SPLITS)\n", - "\n", - "# for col in colList:\n", - "# preds = []\n", - "# for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - "# clf1 = make_pipeline(StandardScaler(), SVR(gamma='auto'))\n", - "# clf1.fit(X_train1[[col]], Y_train1)\n", - "# preds.append(clf1.predict(X_test1[[col]]))\n", - "# acc = 0\n", - "# for pred, Y_test1 in zip(preds, Y_test_splits):\n", - "# acc += mean_squared_error(pred, Y_test1)\n", - "# tempVals.append(acc/N_SPLITS)\n", - "# return tempVals\n", - "\n", - "# def compareEmbeddings(wordSim353AnnotDF_New_Merged_DF, oldColList, newColList, indNames):\n", - "# tempVals1 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, oldColList)\n", - "# tempVals2 = trainAndGenerateAccuracies(wordSim353AnnotDF_New_Merged_DF, newColList)\n", - "# summ = (pd.DataFrame(list(zip(tempVals1, tempVals2)), index = ['Combined'] + indNames, columns = ['MSE of old embeddings compared to annotated category', 'MSE of new embeddings compared to annotated category']) * 100)\n", - "# summ['Increase'] = summ['MSE of new embeddings compared to annotated category'] - summ['MSE of old embeddings compared to annotated category']\n", - "# return summ.sort_values(by=['Increase'], ascending=False)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "sustained-excitement", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['Avg']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = KFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVR(gamma='auto'))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += mean_squared_error(pred, Y_test1)\n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "polish-slovakia", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "349" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSim353AnnotDF_New_Merged_DF)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "answering-island", - "metadata": {}, - "outputs": [], - "source": [ - "# def trainAndFindAccuracyClassification(wordSim353AnnotDF_New_Merged_DF, colList):\n", - "# X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - "# Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - "# N_SPLITS = 10\n", - "\n", - "# skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - "# X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - "# for train_index, test_index in skf.split(X, Y):\n", - "# X_train_splits.append(X.iloc[train_index])\n", - "# X_test_splits.append(X.iloc[test_index])\n", - "# Y_train_splits.append(Y.iloc[train_index])\n", - "# Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - "# preds = []\n", - "# for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - "# clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - "# clf.fit(X_train1, Y_train1)\n", - "# preds.append(clf.predict(X_test1))\n", - "\n", - "# tempVals = []\n", - "\n", - "# acc = 0\n", - "# for pred, Y_test1 in zip(preds, Y_test_splits):\n", - "# acc += accuracy_score(pred, Y_test1)\n", - "\n", - "# return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "suspected-protein", - "metadata": {}, - "outputs": [], - "source": [ - "# def trainAndFindAccuracyRF(wordSim353AnnotDF_New_Merged_DF, colList):\n", - "# X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - "# Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - "# N_SPLITS = 10\n", - "\n", - "# skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - "# X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - "# for train_index, test_index in skf.split(X, Y):\n", - "# X_train_splits.append(X.iloc[train_index])\n", - "# X_test_splits.append(X.iloc[test_index])\n", - "# Y_train_splits.append(Y.iloc[train_index])\n", - "# Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - "# preds = []\n", - "# for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - "# clf = RandomForestClassifier(max_depth=max(2 * len(colList) // 3,3), random_state=100)\n", - "# clf.fit(X_train1, Y_train1)\n", - "# preds.append(clf.predict(X_test1))\n", - "\n", - "# tempVals = []\n", - "\n", - "# acc = 0\n", - "# for pred, Y_test1 in zip(preds, Y_test_splits):\n", - "# acc += accuracy_score(pred, Y_test1)\n", - "\n", - "# return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "intelligent-right", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.016446209419554415" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "colList = ['complex', 'transe', 'text', 'class', 'jc_sim']\n", - "indNames = ['Complex', 'Transe', 'Text', 'Class', 'JC_Sim']\n", - "colPairs = list(zip(colList, indNames))\n", - "trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList)" - ] - }, - { - "cell_type": "markdown", - "id": "collect-learning", - "metadata": {}, - "source": [ - "## Regression" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "awful-glasgow", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['Avg1'] = wordSim353AnnotDF_New_Merged_DF['Avg']" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "built-intelligence", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['Avg'] = wordSim353AnnotDF_New_Merged_DF['Avg'].apply(lambda p: 1-(p - 1)/4)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "continuous-mileage", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 349.000000\n", - "mean 0.490867 \n", - "std 0.189153 \n", - "min 0.250000 \n", - "25% 0.350000 \n", - "50% 0.500000 \n", - "75% 0.600000 \n", - "max 1.000000 \n", - "Name: Avg, dtype: float64" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['Avg'].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "opened-morning", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "21fcb1c963234c3985a2963716e5f090", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/5 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationMSEcount
0Complex0.0232191
1Transe0.0262131
2Text0.0224561
3Class0.0193621
4JC_Sim0.0193371
\n", - "" - ], - "text/plain": [ - " Combination MSE count\n", - "0 Complex 0.023219 1 \n", - "1 Transe 0.026213 1 \n", - "2 Text 0.022456 1 \n", - "3 Class 0.019362 1 \n", - "4 JC_Sim 0.019337 1 " - ] - }, - "execution_count": 99, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "lucky-absorption", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 31 combinations of embedding scores based on the length 5\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs)} combinations of embedding scores based on the length {len(colPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "rising-explosion", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "id": "passive-nowhere", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationMSEcount
30Complex & Transe & Text & Class & JC_Sim0.0164465
29Transe & Text & Class & JC_Sim0.0165174
25Complex & Transe & Text & Class0.0167824
28Complex & Text & Class & JC_Sim0.0168024
21Transe & Text & Class0.0169093
24Text & Class & JC_Sim0.0169253
18Complex & Text & Class0.0169343
19Complex & Text & JC_Sim0.0172723
13Text & JC_Sim0.0172732
12Text & Class0.0174722
\n", - "
" - ], - "text/plain": [ - " Combination MSE count\n", - "30 Complex & Transe & Text & Class & JC_Sim 0.016446 5 \n", - "29 Transe & Text & Class & JC_Sim 0.016517 4 \n", - "25 Complex & Transe & Text & Class 0.016782 4 \n", - "28 Complex & Text & Class & JC_Sim 0.016802 4 \n", - "21 Transe & Text & Class 0.016909 3 \n", - "24 Text & Class & JC_Sim 0.016925 3 \n", - "18 Complex & Text & Class 0.016934 3 \n", - "19 Complex & Text & JC_Sim 0.017272 3 \n", - "13 Text & JC_Sim 0.017273 2 \n", - "12 Text & Class 0.017472 2 " - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs.sort_values(by=['MSE']).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "offensive-spirituality", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "# allCombs.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "virgin-mountain", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "# allCombs.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "id": "quick-warner", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationMSEcount
4JC_Sim0.0193371
3Class0.0193621
2Text0.0224561
0Complex0.0232191
1Transe0.0262131
\n", - "
" - ], - "text/plain": [ - " Combination MSE count\n", - "4 JC_Sim 0.019337 1 \n", - "3 Class 0.019362 1 \n", - "2 Text 0.022456 1 \n", - "0 Complex 0.023219 1 \n", - "1 Transe 0.026213 1 " - ] - }, - "execution_count": 105, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs[allCombs['count'] == 1].sort_values(by=['MSE']).head(10)" - ] - }, - { - "cell_type": "markdown", - "id": "relative-while", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## Classification" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "forced-dominant", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "corresponding-measure", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF['category'] = wordSim353AnnotDF_New_Merged_DF['Avg']" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "devoted-thousand", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7bb7cc3195524ea588210ba32ad87c4a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/5 [00:00\n return [func(*args, **kwargs)\n File \"\", line 6, in generateCombAccuraciesClassn\n File \"\", line 3, in trainAndFindAccuracyClassification\n File \"/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/frame.py\", line 3024, in __getitem__\n indexer = self.columns.get_loc(key)\n File \"/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/indexes/base.py\", line 3082, in get_loc\n raise KeyError(key) from err\nKeyError: 'category'\n\"\"\"", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0maccs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0mresultsClassn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParallel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_jobs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m14\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdelayed\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgenerateCombAccuraciesClassn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcolPairs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcolPairs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 13\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresultsClassn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/joblib/parallel.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, iterable)\u001b[0m\n\u001b[1;32m 1052\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1053\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_backend\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieval_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1054\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1055\u001b[0m \u001b[0;31m# Make sure that we get a last message telling us we are done\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1056\u001b[0m \u001b[0melapsed_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_start_time\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/joblib/parallel.py\u001b[0m in \u001b[0;36mretrieve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 931\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 932\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_backend\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'supports_timeout'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 933\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 934\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 935\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/joblib/_parallel_backends.py\u001b[0m in \u001b[0;36mwrap_future_result\u001b[0;34m(future, timeout)\u001b[0m\n\u001b[1;32m 540\u001b[0m AsyncResults.get from multiprocessing.\"\"\"\n\u001b[1;32m 541\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 542\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfuture\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 543\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mCfTimeoutError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 544\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTimeoutError\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/concurrent/futures/_base.py\u001b[0m in \u001b[0;36mresult\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 437\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mCancelledError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 438\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_state\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mFINISHED\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 439\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__get_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 440\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 441\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTimeoutError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/concurrent/futures/_base.py\u001b[0m in \u001b[0;36m__get_result\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 386\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__get_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 387\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_exception\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 388\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_exception\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 389\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 390\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_result\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'category'" - ] - } - ], - "source": [ - "from joblib import Parallel, delayed\n", - "def generateCombAccuraciesClassn(oldColPairs, r):\n", - " accs = []\n", - " for comb in tqdm(combinations(oldColPairs, r)):\n", - " assert len(comb) == r\n", - " oldAcc = trainAndFindAccuracyClassification(wordSim353AnnotDF_New_Merged_DF, [col[0] for col in comb])\n", - "# newAcc = trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [colMappers[col[0]] for col in comb])\n", - " indName = \" & \".join([col[1] for col in comb])\n", - " accs.append((indName, oldAcc))\n", - " return accs\n", - " \n", - "resultsClassn = Parallel(n_jobs=14)(delayed(generateCombAccuraciesClassn)(colPairs, i) for i in tqdm(range(1,len(colPairs)+1)))\n", - "print(resultsClassn)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "organized-campbell", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "results_flat_classn = [item for sublist in resultsClassn for item in sublist]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "confidential-nicaragua", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "allCombs_classn = (pd.DataFrame(results_flat_classn, columns = ['Combination','MSE']).set_index('Combination')).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outstanding-bracelet", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# allCombs['Increase'] = allCombs['Accuracy (in %) of new embeddings compared to annotated category'] - allCombs['Accuracy (in %) of old embeddings compared to annotated category']" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "transparent-possession", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "allCombs_classn['count'] = allCombs_classn['Combination'].apply(lambda p: p.count(\"&\")+1)" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "peripheral-sucking", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# allCombs.to_csv('../data/wordsim353_all_combinations_SVM_accuracies.csv', index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "greek-sleeve", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# allCombs = pd.read_csv('../data/wordsim353_all_combinations_SVM_accuracies.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "attended-helen", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationMSEcount
0Complex3.0642311
1Transe3.3930201
2Text2.5933131
3Class2.8638161
4JC_Sim2.9628281
\n", - "
" - ], - "text/plain": [ - " Combination MSE count\n", - "0 Complex 3.064231 1 \n", - "1 Transe 3.393020 1 \n", - "2 Text 2.593313 1 \n", - "3 Class 2.863816 1 \n", - "4 JC_Sim 2.962828 1 " - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs_classn.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "local-chuck", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 31 combinations of embedding scores based on the length 5\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs_classn)} combinations of embedding scores based on the length {len(colPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "atomic-screw", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "rental-scratch", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationMSEcount
24Text & Class & JC_Sim2.3377203
12Text & Class2.3396912
13Text & JC_Sim2.3694312
29Transe & Text & Class & JC_Sim2.4112514
28Complex & Text & Class & JC_Sim2.4154214
18Complex & Text & Class2.4395343
21Transe & Text & Class2.4733883
19Complex & Text & JC_Sim2.4757023
22Transe & Text & JC_Sim2.4913343
30Complex & Transe & Text & Class & JC_Sim2.4976285
\n", - "
" - ], - "text/plain": [ - " Combination MSE count\n", - "24 Text & Class & JC_Sim 2.337720 3 \n", - "12 Text & Class 2.339691 2 \n", - "13 Text & JC_Sim 2.369431 2 \n", - "29 Transe & Text & Class & JC_Sim 2.411251 4 \n", - "28 Complex & Text & Class & JC_Sim 2.415421 4 \n", - "18 Complex & Text & Class 2.439534 3 \n", - "21 Transe & Text & Class 2.473388 3 \n", - "19 Complex & Text & JC_Sim 2.475702 3 \n", - "22 Transe & Text & JC_Sim 2.491334 3 \n", - "30 Complex & Transe & Text & Class & JC_Sim 2.497628 5 " - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs_classn.sort_values(by=['MSE']).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "mexican-detective", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [], - "source": [ - "# allCombs.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "vocal-morning", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [], - "source": [ - "# allCombs.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "yellow-replacement", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationMSEcount
2Text2.5933131
3Class2.8638161
4JC_Sim2.9628281
0Complex3.0642311
1Transe3.3930201
\n", - "
" - ], - "text/plain": [ - " Combination MSE count\n", - "2 Text 2.593313 1 \n", - "3 Class 2.863816 1 \n", - "4 JC_Sim 2.962828 1 \n", - "0 Complex 3.064231 1 \n", - "1 Transe 3.393020 1 " - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs_classn[allCombs_classn['count'] == 1].sort_values(by=['MSE']).head(10)" - ] - }, - { - "cell_type": "markdown", - "id": "flying-boxing", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "## RF" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "id": "unlikely-divorce", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "123c20d4e60b4e3e8b09c0e0e46efc1e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/14 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
0Text 7 props - 19k65.12605063.672269-1.4537821
1Text 2 props - 19k61.89916063.3445381.4453781
2Complex - 19k66.61344564.277311-2.3361341
3Transe - 19k66.61344566.310924-0.3025211
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "" - ], - "text/plain": [ - " Combination \\\n", - "0 Text 7 props - 19k \n", - "1 Text 2 props - 19k \n", - "2 Complex - 19k \n", - "3 Transe - 19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "0 65.126050 \n", - "1 61.899160 \n", - "2 66.613445 \n", - "3 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category Increase \\\n", - "0 63.672269 -1.453782 \n", - "1 63.344538 1.445378 \n", - "2 64.277311 -2.336134 \n", - "3 66.310924 -0.302521 \n", - "4 66.008403 -2.890756 \n", - "\n", - " count \n", - "0 1 \n", - "1 1 \n", - "2 1 \n", - "3 1 \n", - "4 1 " - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "id": "increased-dakota", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Determined accuracies of 16383 combinations of embedding scores based on the length 14\n" - ] - } - ], - "source": [ - "print(f\"Determined accuracies of {len(allCombs1)} combinations of embedding scores based on the length {len(oldColPairs)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "id": "indirect-baltimore", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "pd.options.display.max_colwidth = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "id": "amber-estonia", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
60Abstract - 19k & Abstract First Sentence - 19k72.11764768.327731-3.7899162
138Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k72.10084070.361345-1.7394963
151Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.83193370.378151-1.4537823
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
2114Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k71.81512669.789916-2.0252105
2001Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k71.81512669.798319-2.0168075
2000Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k71.81512670.378151-1.4369755
1999Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k71.81512669.495798-2.3193285
1998Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k71.81512669.487395-2.3277315
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "5 Abstract First Sentence - 19k \n", - "60 Abstract - 19k & Abstract First Sentence - 19k \n", - "138 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k \n", - "151 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "2114 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "2001 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "2000 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "1999 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - Probase-19k \n", - "1998 Text 7 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "5 73.285714 \n", - "60 72.117647 \n", - "138 72.100840 \n", - "151 71.831933 \n", - "152 71.831933 \n", - "2114 71.815126 \n", - "2001 71.815126 \n", - "2000 71.815126 \n", - "1999 71.815126 \n", - "1998 71.815126 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "5 70.075630 \n", - "60 68.327731 \n", - "138 70.361345 \n", - "151 70.378151 \n", - "152 71.252101 \n", - "2114 69.789916 \n", - "2001 69.798319 \n", - "2000 70.378151 \n", - "1999 69.495798 \n", - "1998 69.487395 \n", - "\n", - " Increase count \n", - "5 -3.210084 1 \n", - "60 -3.789916 2 \n", - "138 -1.739496 3 \n", - "151 -1.453782 3 \n", - "152 -0.579832 3 \n", - "2114 -2.025210 5 \n", - "2001 -2.016807 5 \n", - "2000 -1.436975 5 \n", - "1999 -2.319328 5 \n", - "1998 -2.327731 5 " - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of old embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 259, - "id": "dutch-offense", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
681Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k70.66386671.2605040.5966394
218Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.22689171.2521010.0252103
1575Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.23529471.2521010.0168075
152Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.83193371.252101-0.5798323
3884Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k68.31092471.2352942.9243706
129Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k69.76470671.2352941.4705883
217Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k71.22689170.974790-0.2521013
604Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k71.52941270.966387-0.5630254
7207Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k68.60504270.9663872.3613457
690Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k70.66386670.9663870.3025214
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "681 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k \n", - "218 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "1575 Text 7 props - 19k & Text 2 props - 19k & Abstract - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "152 Text 7 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "3884 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "129 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k \n", - "217 Text 2 props - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - 19k \n", - "604 Text 7 props - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "7207 Text 7 props - 19k & Text 2 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - Probase-19k \n", - "690 Text 7 props - 19k & Abstract First Sentence - 19k & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "681 70.663866 \n", - "218 71.226891 \n", - "1575 71.235294 \n", - "152 71.831933 \n", - "3884 68.310924 \n", - "129 69.764706 \n", - "217 71.226891 \n", - "604 71.529412 \n", - "7207 68.605042 \n", - "690 70.663866 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "681 71.260504 \n", - "218 71.252101 \n", - "1575 71.252101 \n", - "152 71.252101 \n", - "3884 71.235294 \n", - "129 71.235294 \n", - "217 70.974790 \n", - "604 70.966387 \n", - "7207 70.966387 \n", - "690 70.966387 \n", - "\n", - " Increase count \n", - "681 0.596639 4 \n", - "218 0.025210 3 \n", - "1575 0.016807 5 \n", - "152 -0.579832 3 \n", - "3884 2.924370 6 \n", - "129 1.470588 3 \n", - "217 -0.252101 3 \n", - "604 -0.563025 4 \n", - "7207 2.361345 7 \n", - "690 0.302521 4 " - ] - }, - "execution_count": 259, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 260, - "id": "induced-transmission", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
13048Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210170.3529416.1008409
13084Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210169.2100844.9579839
14022Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.52941269.1764714.6470599
13861Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k64.24369768.8907564.6470599
7551Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k63.09243767.7226894.6302527
13058Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k64.25210168.6050424.3529419
6500Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k63.68907668.0336134.3445387
7537Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k63.09243767.4369754.3445387
7570Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k63.09243767.4285714.3361347
6499Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k63.68907668.0252104.3361347
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "13048 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "13084 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "14022 Text 7 props - 19k & Complex - 19k & Abstract First Sentence - 19k & Transe - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - 19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "13861 Text 7 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Transe - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k & 6 embeddings - Probase-19k \n", - "7551 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - Probase-19k \n", - "13058 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract First Sentence - 19k & Complex - Probase & Complex - Probase-19k & Complex-Transe-AbsFirstSent - Probase-19k & 6 embeddings - 19k \n", - "6500 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7537 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Complex - Probase & Transe - Probase & Complex - Probase-19k & 6 embeddings - Probase-19k \n", - "7570 Text 7 props - 19k & Complex - 19k & Abstract - 19k & Transe - Probase & Complex - Probase-19k & Transe - Probase-19k & 6 embeddings - 19k \n", - "6499 Text 7 props - 19k & Text 2 props - 19k & Complex - 19k & Transe - 19k & Abstract - 19k & Complex - Probase-19k & 6 embeddings - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "13048 64.252101 \n", - "13084 64.252101 \n", - "14022 64.529412 \n", - "13861 64.243697 \n", - "7551 63.092437 \n", - "13058 64.252101 \n", - "6500 63.689076 \n", - "7537 63.092437 \n", - "7570 63.092437 \n", - "6499 63.689076 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "13048 70.352941 \n", - "13084 69.210084 \n", - "14022 69.176471 \n", - "13861 68.890756 \n", - "7551 67.722689 \n", - "13058 68.605042 \n", - "6500 68.033613 \n", - "7537 67.436975 \n", - "7570 67.428571 \n", - "6499 68.025210 \n", - "\n", - " Increase count \n", - "13048 6.100840 9 \n", - "13084 4.957983 9 \n", - "14022 4.647059 9 \n", - "13861 4.647059 9 \n", - "7551 4.630252 7 \n", - "13058 4.352941 9 \n", - "6500 4.344538 7 \n", - "7537 4.344538 7 \n", - "7570 4.336134 7 \n", - "6499 4.336134 7 " - ] - }, - "execution_count": 260, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1.sort_values(by=['Increase'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 261, - "id": "confidential-sandwich", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CombinationAccuracy (in %) of old embeddings compared to annotated categoryAccuracy (in %) of new embeddings compared to annotated categoryIncreasecount
11Complex-Transe-AbsFirstSent - Probase-19k70.04201770.6302520.5882351
5Abstract First Sentence - 19k73.28571470.075630-3.2100841
10Complex-Transe-AbsFirstSent - 19k70.04201768.302521-1.7394961
136 embeddings - Probase-19k68.90756368.042017-0.8655461
126 embeddings - 19k68.90756366.857143-2.0504201
6Complex - Probase66.61344566.596639-0.0168071
7Transe - Probase66.61344566.596639-0.0168071
3Transe - 19k66.61344566.310924-0.3025211
9Transe - Probase-19k66.61344566.008403-0.6050421
4Abstract - 19k68.89916066.008403-2.8907561
\n", - "
" - ], - "text/plain": [ - " Combination \\\n", - "11 Complex-Transe-AbsFirstSent - Probase-19k \n", - "5 Abstract First Sentence - 19k \n", - "10 Complex-Transe-AbsFirstSent - 19k \n", - "13 6 embeddings - Probase-19k \n", - "12 6 embeddings - 19k \n", - "6 Complex - Probase \n", - "7 Transe - Probase \n", - "3 Transe - 19k \n", - "9 Transe - Probase-19k \n", - "4 Abstract - 19k \n", - "\n", - " Accuracy (in %) of old embeddings compared to annotated category \\\n", - "11 70.042017 \n", - "5 73.285714 \n", - "10 70.042017 \n", - "13 68.907563 \n", - "12 68.907563 \n", - "6 66.613445 \n", - "7 66.613445 \n", - "3 66.613445 \n", - "9 66.613445 \n", - "4 68.899160 \n", - "\n", - " Accuracy (in %) of new embeddings compared to annotated category \\\n", - "11 70.630252 \n", - "5 70.075630 \n", - "10 68.302521 \n", - "13 68.042017 \n", - "12 66.857143 \n", - "6 66.596639 \n", - "7 66.596639 \n", - "3 66.310924 \n", - "9 66.008403 \n", - "4 66.008403 \n", - "\n", - " Increase count \n", - "11 0.588235 1 \n", - "5 -3.210084 1 \n", - "10 -1.739496 1 \n", - "13 -0.865546 1 \n", - "12 -2.050420 1 \n", - "6 -0.016807 1 \n", - "7 -0.016807 1 \n", - "3 -0.302521 1 \n", - "9 -0.605042 1 \n", - "4 -2.890756 1 " - ] - }, - "execution_count": 261, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allCombs1[allCombs1['count'] == 1].sort_values(by=['Accuracy (in %) of new embeddings compared to annotated category'], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "smoking-trinity", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "successful-spider", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "moral-thought", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "western-easter", - "metadata": {}, - "source": [ - "# Generate Embeddings Files" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "nervous-physiology", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = pd.concat([wordSim353AnnotDF_New2[['word1_kg_id', 'Word 1']], wordSim353AnnotDF_New2[['word2_kg_id', 'Word 2']].rename(columns={'Word 2': 'Word 1', 'word2_kg_id': 'word1_kg_id'})])" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "neither-hammer", - "metadata": {}, - "outputs": [], - "source": [ - "wordList = wordList[~wordList.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "welsh-indiana", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in embedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "processed-wonder", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['word1_kg_id'].apply(lambda p: \"\\t\".join([str(p1) for p1 in newEmbedDict[p].tolist()])).to_csv('../data/wordsim353_embeddings_new_attempt1.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "psychological-template", - "metadata": {}, - "outputs": [], - "source": [ - "wordList['Word 1'].to_csv('../data/wordsim353_embeddings_words.tsv', index=False, header=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prime-munich", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assigned-appliance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "severe-textbook", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "prompt-orlando", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "otherwise-qatar", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "inclusive-brick", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "micro-kernel", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "optical-atlas", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "assured-means", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-fever", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "opened-baker", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "supposed-charm", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "384px" - }, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Scratchpad Nbook.ipynb b/Scratchpad Nbook.ipynb deleted file mode 100644 index f63eb1f..0000000 --- a/Scratchpad Nbook.ipynb +++ /dev/null @@ -1,848 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "detailed-citizenship", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "unlimited-panel", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New_Merged_DF = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "american-prerequisite", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...concat_19k_v2_word1_newconcat_19k_v2_word2_newconcat_19k_v2_old_cosSimconcat_19k_v2_2_new_cosSimconcat_probase_19k_v2_word1_oldconcat_probase_19k_v2_word2_oldconcat_probase_19k_v2_word1_newconcat_probase_19k_v2_word2_newconcat_probase_19k_v2_old_cosSimconcat_probase_19k_v2_2_new_cosSim
0Arafatpeace83D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004515859576248157, -0.01172366887295375, ...3.2445393.175157[0.006720440291834372, 0.008331484208161396, 0...[-0.005011610937734838, -0.013383541550578623,...[0.006720440291834372, 0.008331484208161396, 0...[-0.00497129831746384, -0.01325426749683971, -...3.2445393.240270
1Arafatterror93D4NaN3U4...[0.006720443092017323, 0.008331487679612525, 0...[-0.004862257088069111, 0.014077170590128979, ...3.0850833.013958[0.006720440291834372, 0.008331484208161396, 0...[-0.005805280438126139, 0.015115419696749257, ...[0.006720440291834372, 0.008331484208161396, 0...[-0.004862255062129871, 0.014077164724644747, ...3.0850833.013958
2FBIfingerprint1093D4NaN4NaN3...[0.006466897059812569, 0.014694837542908411, -...[0.01523113309590259, 0.005271417380511587, -0...2.8230932.745230[0.006466894365273728, 0.014694831420063071, -...[0.013922101136130544, 0.0023911842131386003, ...[0.006466894365273728, 0.014694831420063071, -...[0.013814564227839972, 0.0024352598952305004, ...2.8230932.816176
3FBIinvestigation1103U3U3U3...[0.006466897059812569, 0.014694837542908411, -...[0.013016090623183913, 0.01114268771757639, -0...2.9209862.886161[0.006466894365273728, 0.014694831420063071, -...[0.01327496060589727, 0.010965634890657862, -0...[0.006466894365273728, 0.014694831420063071, -...[0.013242882546106787, 0.010953106196386554, -...2.9209862.919120
4HarvardYale1372S3S2S2...[0.01322626159341165, 0.005047111630696947, -0...[0.010410829393995813, 0.014776997996557633, -...1.7076551.707655[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...[0.013226256082472592, 0.005047109527735016, -...[0.010410825056152807, 0.014776991839478788, -...1.7076551.707655
\n", - "

5 rows × 104 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... concat_19k_v2_word1_new \\\n", - "0 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "1 ... [0.006720443092017323, 0.008331487679612525, 0... \n", - "2 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "3 ... [0.006466897059812569, 0.014694837542908411, -... \n", - "4 ... [0.01322626159341165, 0.005047111630696947, -0... \n", - "\n", - " concat_19k_v2_word2_new concat_19k_v2_old_cosSim \\\n", - "0 [-0.004515859576248157, -0.01172366887295375, ... 3.244539 \n", - "1 [-0.004862257088069111, 0.014077170590128979, ... 3.085083 \n", - "2 [0.01523113309590259, 0.005271417380511587, -0... 2.823093 \n", - "3 [0.013016090623183913, 0.01114268771757639, -0... 2.920986 \n", - "4 [0.010410829393995813, 0.014776997996557633, -... 1.707655 \n", - "\n", - " concat_19k_v2_2_new_cosSim \\\n", - "0 3.175157 \n", - "1 3.013958 \n", - "2 2.745230 \n", - "3 2.886161 \n", - "4 1.707655 \n", - "\n", - " concat_probase_19k_v2_word1_old \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_old \\\n", - "0 [-0.005011610937734838, -0.013383541550578623,... \n", - "1 [-0.005805280438126139, 0.015115419696749257, ... \n", - "2 [0.013922101136130544, 0.0023911842131386003, ... \n", - "3 [0.01327496060589727, 0.010965634890657862, -0... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_word1_new \\\n", - "0 [0.006720440291834372, 0.008331484208161396, 0... \n", - "1 [0.006720440291834372, 0.008331484208161396, 0... \n", - "2 [0.006466894365273728, 0.014694831420063071, -... \n", - "3 [0.006466894365273728, 0.014694831420063071, -... \n", - "4 [0.013226256082472592, 0.005047109527735016, -... \n", - "\n", - " concat_probase_19k_v2_word2_new \\\n", - "0 [-0.00497129831746384, -0.01325426749683971, -... \n", - "1 [-0.004862255062129871, 0.014077164724644747, ... \n", - "2 [0.013814564227839972, 0.0024352598952305004, ... \n", - "3 [0.013242882546106787, 0.010953106196386554, -... \n", - "4 [0.010410825056152807, 0.014776991839478788, -... \n", - "\n", - " concat_probase_19k_v2_old_cosSim concat_probase_19k_v2_2_new_cosSim \n", - "0 3.244539 3.240270 \n", - "1 3.085083 3.013958 \n", - "2 2.823093 2.816176 \n", - "3 2.920986 2.919120 \n", - "4 1.707655 1.707655 \n", - "\n", - "[5 rows x 104 columns]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "southwest-maldives", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353LatestAnnot.csv')\n", - "wordSimOG_DF = pd.read_csv('../data/wordsim.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "light-reference", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSimOG_DF.set_index(['Word 1', 'Word 2'])[['word1_kg_id', 'word2_kg_id']]).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "ranging-ordering", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversedword1_kg_idword2_kg_id
0Arafatpeace83D4NaN3U4NaN4.0NaN3.60.5477232.12507.8750Q34211Q454
1Arafatterror93D4NaN3U4NaN4.0NaN3.60.5477233.06256.9375Q34211Q13648784
2FBIfingerprint1093D4NaN4NaN3u4.0NaN3.60.5477234.06255.9375Q8333Q178022
3FBIinvestigation1103U3U3U3u3.0u3.00.0000005.06254.9375Q8333Q21004260
4HarvardYale1372S3S2S2s2.0s2.20.4472144.87505.1250Q13371Q49112
\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed word1_kg_id \\\n", - "0 NaN 4.0 NaN 3.6 0.547723 2.1250 7.8750 Q34211 \n", - "1 NaN 4.0 NaN 3.6 0.547723 3.0625 6.9375 Q34211 \n", - "2 u 4.0 NaN 3.6 0.547723 4.0625 5.9375 Q8333 \n", - "3 u 3.0 u 3.0 0.000000 5.0625 4.9375 Q8333 \n", - "4 s 2.0 s 2.2 0.447214 4.8750 5.1250 Q13371 \n", - "\n", - " word2_kg_id \n", - "0 Q454 \n", - "1 Q13648784 \n", - "2 Q178022 \n", - "3 Q21004260 \n", - "4 Q49112 " - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "hidden-textbook", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 3.60\n", - "1 3.60\n", - "2 3.60\n", - "3 3.00\n", - "4 2.20\n", - " ... \n", - "339 3.00\n", - "340 3.80\n", - "341 3.00\n", - "342 1.80\n", - "343 3.75\n", - "Name: Avg, Length: 344, dtype: float64" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "opposite-broadway", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = wordSim353AnnotDF_New[['word1_kg_id', 'word2_kg_id', 'Avg']]\n", - "temp1 = wordSim353AnnotDF_New_Merged_DF.set_index(['word1_kg_id', 'word2_kg_id']).join(wordSim353AnnotDF_New.set_index(['word1_kg_id', 'word2_kg_id']), rsuffix=\"_old\").reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "ranging-adams", - "metadata": {}, - "outputs": [], - "source": [ - "temp2 = temp1[temp1.Avg != temp1.Avg_old][['Avg', 'Avg_old']]" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "variable-cabinet", - "metadata": {}, - "outputs": [], - "source": [ - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "formed-firewall", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgAvg_oldCatCat_old
334.03.4UM
372.23.2MM
643.63.2UM
653.63.2UM
663.03.6MU
673.03.6MU
683.03.2MM
693.03.2MM
962.83.4MM
1281.82.2MM
1641.82.2MM
1712.02.4MM
1852.83.6MU
1932.83.2MM
2021.62.4IM
2382.02.4MM
2982.22.6MM
2991.62.2IM
3362.43.0MM
\n", - "
" - ], - "text/plain": [ - " Avg Avg_old Cat Cat_old\n", - "33 4.0 3.4 U M\n", - "37 2.2 3.2 M M\n", - "64 3.6 3.2 U M\n", - "65 3.6 3.2 U M\n", - "66 3.0 3.6 M U\n", - "67 3.0 3.6 M U\n", - "68 3.0 3.2 M M\n", - "69 3.0 3.2 M M\n", - "96 2.8 3.4 M M\n", - "128 1.8 2.2 M M\n", - "164 1.8 2.2 M M\n", - "171 2.0 2.4 M M\n", - "185 2.8 3.6 M U\n", - "193 2.8 3.2 M M\n", - "202 1.6 2.4 I M\n", - "238 2.0 2.4 M M\n", - "298 2.2 2.6 M M\n", - "299 1.6 2.2 I M\n", - "336 2.4 3.0 M M" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp2['Cat'] = temp2.Avg.apply(labelSamples)\n", - "temp2['Cat_old'] = temp2.Avg_old.apply(labelSamples)\n", - "temp2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "atmospheric-associate", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "oriented-stockholm", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "instrumental-thing", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Similarity Work-Copy1.ipynb b/Similarity Work-Copy1.ipynb deleted file mode 100644 index bd52b23..0000000 --- a/Similarity Work-Copy1.ipynb +++ /dev/null @@ -1,9632 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "protecting-craft", - "metadata": {}, - "source": [ - "Downloaded dataset from [DBPedia Short Abstracts - 2020.07.01](https://downloads.dbpedia.org/repo/dbpedia/text/short-abstracts/2020.07.01/short-abstracts_lang=en.ttl.bz2)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "indirect-kingdom", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm.notebook import tqdm\n", - "import pandas as pd\n", - "from time import time" - ] - }, - { - "cell_type": "markdown", - "id": "elder-russian", - "metadata": {}, - "source": [ - "# Process and format DBPedia dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "characteristic-orientation", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c3db8345a6c34dbe8f54427985216b25", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cnt = 0\n", - "\n", - "p1s = []\n", - "p11s = []\n", - "p2s = []\n", - "lines = []\n", - "with open(\"../data/short-abstracts_lang=en.ttl\", 'r', encoding='utf-8') as f:\n", - " for line in tqdm(f):\n", - " p1 = line[:line.find(\" \")]\n", - "# p11 = p1.split(\"/\")[-1][:-1]\n", - " p11 = p1[len(\"\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ignoreurlignore2abstract
node1
NaN0#startedNaN
Animalia_(book)1<http://dbpedia.org/resource/Animalia_(book)><http://www.w3.org/2000/01/rdf-schema#comment>Animalia is an illustrated children's book by ...
Agricultural_science2<http://dbpedia.org/resource/Agricultural_scie...<http://www.w3.org/2000/01/rdf-schema#comment>Agricultural science is a broad multidisciplin...
Albedo3<http://dbpedia.org/resource/Albedo><http://www.w3.org/2000/01/rdf-schema#comment>Albedo () (Latin: albedo, meaning 'whiteness')...
Alain_Connes4<http://dbpedia.org/resource/Alain_Connes><http://www.w3.org/2000/01/rdf-schema#comment>Alain Connes (French: [alɛ̃ kɔn]; born 1 April...
\n", - "" - ], - "text/plain": [ - " ignore \\\n", - "node1 \n", - "NaN 0 \n", - "Animalia_(book) 1 \n", - "Agricultural_science 2 \n", - "Albedo 3 \n", - "Alain_Connes 4 \n", - "\n", - " url \\\n", - "node1 \n", - "NaN # \n", - "Animalia_(book) \n", - "Agricultural_science \n", - "Alain_Connes \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "NaN started \n", - "Animalia_(book) \n", - "Agricultural_science \n", - "Albedo \n", - "Alain_Connes \n", - "\n", - " abstract \n", - "node1 \n", - "NaN NaN \n", - "Animalia_(book) Animalia is an illustrated children's book by ... \n", - "Agricultural_science Agricultural science is a broad multidisciplin... \n", - "Albedo Albedo () (Latin: albedo, meaning 'whiteness')... \n", - "Alain_Connes Alain Connes (French: [alɛ̃ kɔn]; born 1 April... " - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "specified-emission", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ignoreurlignore2abstract
node1
NaN0#startedNaN
\n", - "
" - ], - "text/plain": [ - " ignore url ignore2 abstract\n", - "node1 \n", - "NaN 0 # started NaN" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1[df1.url.apply(lambda p: 'http://dbpedia.org/resource' not in p)]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "streaming-watch", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DBPedia dataset has 5732949 records with unique 5732947 index values\n" - ] - } - ], - "source": [ - "print(f\"DBPedia dataset has {len(df1)} records with unique {df1.index.nunique()} index values\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "clean-brook", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ignoreurlignore2abstract
node1
NaN0#startedNaN
NaN23399<http://dbpedia.org/resource/NaN><http://www.w3.org/2000/01/rdf-schema#comment>In computing, NaN, standing for Not a Number, ...
\n", - "
" - ], - "text/plain": [ - " ignore url \\\n", - "node1 \n", - "NaN 0 # \n", - "NaN 23399 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "NaN started \n", - "NaN \n", - "\n", - " abstract \n", - "node1 \n", - "NaN NaN \n", - "NaN In computing, NaN, standing for Not a Number, ... " - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1.loc[df1[df1.index.duplicated()].index]" - ] - }, - { - "cell_type": "markdown", - "id": "residential-bunch", - "metadata": {}, - "source": [ - "There are many duplicate element names with different abstracts. For example, 390 corresponds to year 390, ibm 390 systemss." - ] - }, - { - "cell_type": "markdown", - "id": "whole-retirement", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Wikidata Sitelinks" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "usual-albuquerque", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "sitelinksDF = pd.read_csv(\"../data/sitelinks.en.tsv.gz\", sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "classical-tamil", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "sitelinksDF['trimmedNode2'] = sitelinksDF.node2.apply(lambda p: p.split(\"/\")[-1] if p.split(\"/\")[-1] != '' else p.split(\"/\")[-2])" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "undefined-gospel", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "sitelinksDF1 = sitelinksDF[sitelinksDF.label == 'wikipedia_sitelink']" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "backed-criminal", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "sitelinksDF2 = sitelinksDF1.set_index('trimmedNode2')" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "armed-gardening", - "metadata": { - "hidden": true, - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2
trimmedNode2
UniverseQ1-wikipedia_sitelink-5e459a-0Q1wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Universe
BostonQ100-wikipedia_sitelink-c612f2-0Q100wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Boston
GabonQ1000-wikipedia_sitelink-b7f1ee-0Q1000wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Gabon
Dutch_WikipediaQ10000-wikipedia_sitelink-16adbd-0Q10000wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Dutch_Wikipedia
Cadier_en_KeerQ100000-wikipedia_sitelink-d81a0a-0Q100000wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Cadier_en_Keer
\n", - "
" - ], - "text/plain": [ - " id node1 \\\n", - "trimmedNode2 \n", - "Universe Q1-wikipedia_sitelink-5e459a-0 Q1 \n", - "Boston Q100-wikipedia_sitelink-c612f2-0 Q100 \n", - "Gabon Q1000-wikipedia_sitelink-b7f1ee-0 Q1000 \n", - "Dutch_Wikipedia Q10000-wikipedia_sitelink-16adbd-0 Q10000 \n", - "Cadier_en_Keer Q100000-wikipedia_sitelink-d81a0a-0 Q100000 \n", - "\n", - " label \\\n", - "trimmedNode2 \n", - "Universe wikipedia_sitelink \n", - "Boston wikipedia_sitelink \n", - "Gabon wikipedia_sitelink \n", - "Dutch_Wikipedia wikipedia_sitelink \n", - "Cadier_en_Keer wikipedia_sitelink \n", - "\n", - " node2 \n", - "trimmedNode2 \n", - "Universe http://en.wikipedia.org/wiki/Universe \n", - "Boston http://en.wikipedia.org/wiki/Boston \n", - "Gabon http://en.wikipedia.org/wiki/Gabon \n", - "Dutch_Wikipedia http://en.wikipedia.org/wiki/Dutch_Wikipedia \n", - "Cadier_en_Keer http://en.wikipedia.org/wiki/Cadier_en_Keer " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sitelinksDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "thousand-marriage", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "There are 8472828 sitelinks present in the dataset corresponding to 8472828 unique node1s (Qxxx), 8401883 unique labels (text)\n" - ] - } - ], - "source": [ - "print(f\"There are {len(sitelinksDF2)} sitelinks present in the dataset corresponding to {sitelinksDF2.node1.nunique()} unique node1s (Qxxx), {sitelinksDF2.index.nunique()} unique labels (text)\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "alpha-sport", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "KeyboardInterrupt\n", - "\n" - ] - } - ], - "source": [ - "sitelinksDF2.loc[sitelinksDF2[sitelinksDF2.index.duplicated()].index]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "editorial-cache", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "naval-morrison", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Join DBPedia file with sitelinks - File X" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "incorrect-beach", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF = df1.join(sitelinksDF2).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "answering-rhythm", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "peripheral-edinburgh", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "len(abstractsDF), abstractsDF.index.nunique(), abstractsDF.node1.nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "first-encoding", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "print(f\"From {len(abstractsDF)} Qnodes, there are {abstractsDF.node2.isna().sum()} dbpedia statements which do not have a sitelink i.e {len(abstractsDF) - abstractsDF.node2.isna().sum()} have a sitelink\")\n" - ] - }, - { - "cell_type": "markdown", - "id": "modular-spirituality", - "metadata": {}, - "source": [ - "# Similarity file" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "wired-hayes", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF = pd.read_csv(\"../data/SimIP_new.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "referenced-newport", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Indexg_qnodep_qnodeq1_labelq2_labelcomplextransetextclassnode2vec-v0H_3x6H_5x8
011Q17221Q189290spokespersonmilitary officer0.250.110.620.650.270.680.45
13Q702269Q2285706professionalhead of government0.290.390.590.570.130.470.29
25Q2285706Q82955head of governmentpolitician0.360.260.840.550.050.610.64
311Q107711Q189290firefightermilitary officer0.290.220.580.520.340.780.49
43Q702269Q48352professionalhead of state0.300.270.610.520.040.490.33
\n", - "
" - ], - "text/plain": [ - " Index g_qnode p_qnode q1_label q2_label complex \\\n", - "0 11 Q17221 Q189290 spokesperson military officer 0.25 \n", - "1 3 Q702269 Q2285706 professional head of government 0.29 \n", - "2 5 Q2285706 Q82955 head of government politician 0.36 \n", - "3 11 Q107711 Q189290 firefighter military officer 0.29 \n", - "4 3 Q702269 Q48352 professional head of state 0.30 \n", - "\n", - " transe text class node2vec-v0 H_3x6 H_5x8 \n", - "0 0.11 0.62 0.65 0.27 0.68 0.45 \n", - "1 0.39 0.59 0.57 0.13 0.47 0.29 \n", - "2 0.26 0.84 0.55 0.05 0.61 0.64 \n", - "3 0.22 0.58 0.52 0.34 0.78 0.49 \n", - "4 0.27 0.61 0.52 0.04 0.49 0.33 " - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "persistent-electronics", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesList = set(wordsimDF.g_qnode.to_list() + wordsimDF.p_qnode.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "billion-syndrome", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "From the similarity file having 118 records, we have list1 with 19 unique Qnodes and list2 with 21 unique Qnodes. Taking their union, we get 31 unique Qnodes and by taking their intersection, we get 9 unique Qnodes\n" - ] - } - ], - "source": [ - "print(f\"From the similarity file having {len(wordsimDF)} records, we have list1 with {len(set(wordsimDF.g_qnode.to_list()))} unique Qnodes and list2 with {len(set(wordsimDF.p_qnode.to_list()))} unique Qnodes. Taking their union, we get {len(set(wordsimDF.g_qnode.to_list() + wordsimDF.p_qnode.to_list()))} unique Qnodes and by taking their intersection, we get {len(set(wordsimDF.g_qnode.to_list()).intersection(set(wordsimDF.p_qnode.to_list())))} unique Qnodes\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "affecting-people", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListDF1 = pd.DataFrame({'node1': list(wordsimQNodesList)}).set_index('node1')\n" - ] - }, - { - "cell_type": "markdown", - "id": "hourly-document", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Filtering File X Qnodes using similarity file Qnodes list" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "universal-romance", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF1 = abstractsDF[abstractsDF.node1.apply(lambda p:p in wordsimQNodesList)]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "secure-default", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexignoreurlignore2abstractidnode1labelnode2
4002100159716<http://dbpedia.org/resource/100><http://www.w3.org/2000/01/rdf-schema#comment>100 or one hundred (Roman numeral: C) is the n...Q37413-wikipedia_sitelink-c0dbd3-0Q37413wikipedia_sitelinkhttp://en.wikipedia.org/wiki/100
30649251074621<http://dbpedia.org/resource/5><http://www.w3.org/2000/01/rdf-schema#comment>5 (five) is a number, numeral, and glyph. It i...Q203-wikipedia_sitelink-c8e811-0Q203wikipedia_sitelinkhttp://en.wikipedia.org/wiki/5
3129867103187<http://dbpedia.org/resource/7><http://www.w3.org/2000/01/rdf-schema#comment>7 (seven) is the natural number following 6 an...Q23350-wikipedia_sitelink-6dd502-0Q23350wikipedia_sitelinkhttp://en.wikipedia.org/wiki/7
363000Abuse165447<http://dbpedia.org/resource/Abuse><http://www.w3.org/2000/01/rdf-schema#comment>Abuse is the improper usage or treatment of a ...Q600571-wikipedia_sitelink-5719bc-0Q600571wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Abuse
364696Academic_discipline1830099<http://dbpedia.org/resource/Academic_discipline><http://www.w3.org/2000/01/rdf-schema#comment>An academic discipline or academic field is a ...Q11862829-wikipedia_sitelink-cdefe0-0Q11862829wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Academic_discipline
\n", - "
" - ], - "text/plain": [ - " index ignore \\\n", - "4002 100 159716 \n", - "306492 5 1074621 \n", - "312986 7 103187 \n", - "363000 Abuse 165447 \n", - "364696 Academic_discipline 1830099 \n", - "\n", - " url \\\n", - "4002 \n", - "306492 \n", - "312986 \n", - "363000 \n", - "364696 \n", - "\n", - " ignore2 \\\n", - "4002 \n", - "306492 \n", - "312986 \n", - "363000 \n", - "364696 \n", - "\n", - " abstract \\\n", - "4002 100 or one hundred (Roman numeral: C) is the n... \n", - "306492 5 (five) is a number, numeral, and glyph. It i... \n", - "312986 7 (seven) is the natural number following 6 an... \n", - "363000 Abuse is the improper usage or treatment of a ... \n", - "364696 An academic discipline or academic field is a ... \n", - "\n", - " id node1 label \\\n", - "4002 Q37413-wikipedia_sitelink-c0dbd3-0 Q37413 wikipedia_sitelink \n", - "306492 Q203-wikipedia_sitelink-c8e811-0 Q203 wikipedia_sitelink \n", - "312986 Q23350-wikipedia_sitelink-6dd502-0 Q23350 wikipedia_sitelink \n", - "363000 Q600571-wikipedia_sitelink-5719bc-0 Q600571 wikipedia_sitelink \n", - "364696 Q11862829-wikipedia_sitelink-cdefe0-0 Q11862829 wikipedia_sitelink \n", - "\n", - " node2 \n", - "4002 http://en.wikipedia.org/wiki/100 \n", - "306492 http://en.wikipedia.org/wiki/5 \n", - "312986 http://en.wikipedia.org/wiki/7 \n", - "363000 http://en.wikipedia.org/wiki/Abuse \n", - "364696 http://en.wikipedia.org/wiki/Academic_discipline " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "abroad-donna", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Initially, there were 5732949 short abstracts. From 5785371 Qnodes with short abstracts, there are 324 Qnodes which have some similarity measure\n" - ] - } - ], - "source": [ - "print(f\"Initially, there were {len(df1)} short abstracts. From {len(abstractsDF)} Qnodes with short abstracts, there are {len(abstractsDF1)} Qnodes which have some similarity measure\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "extensive-giving", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "absDFLabelList = abstractsDF1['index'].to_list()" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "charged-valuable", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "324" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF1['index'].nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "recent-kansas", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "terminal-offer", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Join sitelinks with DBPedia file - File Y" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "particular-nerve", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF2 = sitelinksDF2.join(df1).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "dimensional-preserve", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidnode1labelnode2ignoreurlignore2abstract
0Q956244-wikipedia_sitelink-539183-0Q956244wikipedia_sitelinkhttp://en.wikipedia.org/wiki///NaNNaNNaNNaN
1!!Q353153-wikipedia_sitelink-d716fb-0Q353153wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!NaNNaNNaNNaN
2!!!Q371-wikipedia_sitelink-628937-0Q371wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!211415.0<http://dbpedia.org/resource/!!!><http://www.w3.org/2000/01/rdf-schema#comment>!!! ( chk-chk-chk) is an American dance-punk b...
3!!!!!!!Q91868926-wikipedia_sitelink-d58178-0Q91868926wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!!!!!NaNNaNNaNNaN
4!!!_(album)Q2705922-wikipedia_sitelink-e96003-0Q2705922wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!_(album)584428.0<http://dbpedia.org/resource/!!!_(album)><http://www.w3.org/2000/01/rdf-schema#comment>!!! is the eponymous debut studio album by dan...
\n", - "
" - ], - "text/plain": [ - " index id node1 \\\n", - "0 Q956244-wikipedia_sitelink-539183-0 Q956244 \n", - "1 !! Q353153-wikipedia_sitelink-d716fb-0 Q353153 \n", - "2 !!! Q371-wikipedia_sitelink-628937-0 Q371 \n", - "3 !!!!!!! Q91868926-wikipedia_sitelink-d58178-0 Q91868926 \n", - "4 !!!_(album) Q2705922-wikipedia_sitelink-e96003-0 Q2705922 \n", - "\n", - " label node2 ignore \\\n", - "0 wikipedia_sitelink http://en.wikipedia.org/wiki/// NaN \n", - "1 wikipedia_sitelink http://en.wikipedia.org/wiki/!! NaN \n", - "2 wikipedia_sitelink http://en.wikipedia.org/wiki/!!! 211415.0 \n", - "3 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!!!!! NaN \n", - "4 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!_(album) 584428.0 \n", - "\n", - " url \\\n", - "0 NaN \n", - "1 NaN \n", - "2 \n", - "3 NaN \n", - "4 \n", - "\n", - " ignore2 \\\n", - "0 NaN \n", - "1 NaN \n", - "2 \n", - "3 NaN \n", - "4 \n", - "\n", - " abstract \n", - "0 NaN \n", - "1 NaN \n", - "2 !!! ( chk-chk-chk) is an American dance-punk b... \n", - "3 NaN \n", - "4 !!! is the eponymous debut studio album by dan... " - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "existing-disabled", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "From 8472828 Qnodes, there are 2741574 sitelink Qnodes which do not have a short abstract i.e 5731254 have a short abstract\n" - ] - } - ], - "source": [ - "print(f\"From {len(abstractsDF2)} Qnodes, there are {abstractsDF2.ignore2.isna().sum()} sitelink Qnodes which do not have a short abstract i.e {len(abstractsDF2) - abstractsDF2.ignore2.isna().sum()} have a short abstract\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "normal-rachel", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "attempted-scotland", - "metadata": {}, - "source": [ - "# Join list of similarity file Qnodes with File Y" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "premier-attack", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = sitelinksDF2.join(df1)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "disturbed-windsor", - "metadata": {}, - "outputs": [], - "source": [ - "temp2 = temp1.reset_index().set_index('node1')" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "southern-cookbook", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstract
node1
Q956244Q956244-wikipedia_sitelink-539183-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki///NaNNaNNaNNaN
Q353153!!Q353153-wikipedia_sitelink-d716fb-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!NaNNaNNaNNaN
Q371!!!Q371-wikipedia_sitelink-628937-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!211415.0<http://dbpedia.org/resource/!!!><http://www.w3.org/2000/01/rdf-schema#comment>!!! ( chk-chk-chk) is an American dance-punk b...
Q91868926!!!!!!!Q91868926-wikipedia_sitelink-d58178-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!!!!!NaNNaNNaNNaN
Q2705922!!!_(album)Q2705922-wikipedia_sitelink-e96003-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!_(album)584428.0<http://dbpedia.org/resource/!!!_(album)><http://www.w3.org/2000/01/rdf-schema#comment>!!! is the eponymous debut studio album by dan...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q956244 Q956244-wikipedia_sitelink-539183-0 \n", - "Q353153 !! Q353153-wikipedia_sitelink-d716fb-0 \n", - "Q371 !!! Q371-wikipedia_sitelink-628937-0 \n", - "Q91868926 !!!!!!! Q91868926-wikipedia_sitelink-d58178-0 \n", - "Q2705922 !!!_(album) Q2705922-wikipedia_sitelink-e96003-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q956244 wikipedia_sitelink http://en.wikipedia.org/wiki/// \n", - "Q353153 wikipedia_sitelink http://en.wikipedia.org/wiki/!! \n", - "Q371 wikipedia_sitelink http://en.wikipedia.org/wiki/!!! \n", - "Q91868926 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!!!!! \n", - "Q2705922 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!_(album) \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q956244 NaN NaN \n", - "Q353153 NaN NaN \n", - "Q371 211415.0 \n", - "Q91868926 NaN NaN \n", - "Q2705922 584428.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q956244 NaN \n", - "Q353153 NaN \n", - "Q371 \n", - "Q91868926 NaN \n", - "Q2705922 \n", - "\n", - " abstract \n", - "node1 \n", - "Q956244 NaN \n", - "Q353153 NaN \n", - "Q371 !!! ( chk-chk-chk) is an American dance-punk b... \n", - "Q91868926 NaN \n", - "Q2705922 !!! is the eponymous debut studio album by dan... " - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "ordinary-connectivity", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsDF = wordsimQNodesListDF1.join(temp2)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "married-prior", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstract
node1
Q11499147NaNNaNNaNNaNNaNNaNNaNNaN
Q1048835Political_divisionQ1048835-wikipedia_sitelink-a3aa16-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Political_divisionNaNNaNNaNNaN
Q27096235NaNNaNNaNNaNNaNNaNNaNNaN
Q48352Head_of_stateQ48352-wikipedia_sitelink-0ba458-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Head_of_state5945.0<http://dbpedia.org/resource/Head_of_state><http://www.w3.org/2000/01/rdf-schema#comment>A head of state (or chief of state) is the pub...
Q83307Minister_(government)Q83307-wikipedia_sitelink-519dcf-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Minister_(governm...243508.0<http://dbpedia.org/resource/Minister_(governm...<http://www.w3.org/2000/01/rdf-schema#comment>A minister is a politician who heads a ministr...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 Political_division Q1048835-wikipedia_sitelink-a3aa16-0 \n", - "Q27096235 NaN NaN \n", - "Q48352 Head_of_state Q48352-wikipedia_sitelink-0ba458-0 \n", - "Q83307 Minister_(government) Q83307-wikipedia_sitelink-519dcf-0 \n", - "\n", - " label \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 wikipedia_sitelink \n", - "Q27096235 NaN \n", - "Q48352 wikipedia_sitelink \n", - "Q83307 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 http://en.wikipedia.org/wiki/Political_division NaN \n", - "Q27096235 NaN NaN \n", - "Q48352 http://en.wikipedia.org/wiki/Head_of_state 5945.0 \n", - "Q83307 http://en.wikipedia.org/wiki/Minister_(governm... 243508.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 NaN \n", - "Q27096235 NaN \n", - "Q48352 \n", - "Q83307 \n", - "Q83307 \n", - "\n", - " abstract \n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 NaN \n", - "Q27096235 NaN \n", - "Q48352 A head of state (or chief of state) is the pub... \n", - "Q83307 A minister is a politician who heads a ministr... " - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "durable-keeping", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "9" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsDF.abstract.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "oriental-devices", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "22" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(set(wordsimQNodesListWAbstractsDF[~wordsimQNodesListWAbstractsDF.abstract.isna()].index.to_list()))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dominican-illinois", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "afraid-asian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "31" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(set(wordsimQNodesListWAbstractsDF.index.to_list()))" - ] - }, - { - "cell_type": "markdown", - "id": "beneficial-dynamics", - "metadata": {}, - "source": [ - "# Adding labels from labels.en" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "satisfactory-nickname", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "potential-vegetable", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2
0P10-label-enP10label'video'@en
1P1000-label-enP1000label'record held'@en
2P1001-label-enP1001label'applies to jurisdiction'@en
3P1002-label-enP1002label'engine configuration'@en
4P1003-label-enP1003label'National Library of Romania ID'@en
\n", - "
" - ], - "text/plain": [ - " id node1 label node2\n", - "0 P10-label-en P10 label 'video'@en\n", - "1 P1000-label-en P1000 label 'record held'@en\n", - "2 P1001-label-en P1001 label 'applies to jurisdiction'@en\n", - "3 P1002-label-en P1002 label 'engine configuration'@en\n", - "4 P1003-label-en P1003 label 'National Library of Romania ID'@en" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "labelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "significant-cross", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF = wordsimQNodesListWAbstractsDF.join(labelsDF.set_index('node1'), rsuffix='_labelsDF')" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "bigger-separation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractid_labelsDFlabel_labelsDFnode2_labelsDF
node1
Q11499147NaNNaNNaNNaNNaNNaNNaNNaNQ11499147-label-enlabel'political activist'@en
Q1048835Political_divisionQ1048835-wikipedia_sitelink-a3aa16-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Political_divisionNaNNaNNaNNaNQ1048835-label-enlabel'political territorial entity'@en
Q27096235NaNNaNNaNNaNNaNNaNNaNNaNQ27096235-label-enlabel'artificial geographic entity'@en
Q48352Head_of_stateQ48352-wikipedia_sitelink-0ba458-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Head_of_state5945.0<http://dbpedia.org/resource/Head_of_state><http://www.w3.org/2000/01/rdf-schema#comment>A head of state (or chief of state) is the pub...Q48352-label-enlabel'head of state'@en
Q83307Minister_(government)Q83307-wikipedia_sitelink-519dcf-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Minister_(governm...243508.0<http://dbpedia.org/resource/Minister_(governm...<http://www.w3.org/2000/01/rdf-schema#comment>A minister is a politician who heads a ministr...Q83307-label-enlabel'minister'@en
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 Political_division Q1048835-wikipedia_sitelink-a3aa16-0 \n", - "Q27096235 NaN NaN \n", - "Q48352 Head_of_state Q48352-wikipedia_sitelink-0ba458-0 \n", - "Q83307 Minister_(government) Q83307-wikipedia_sitelink-519dcf-0 \n", - "\n", - " label \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 wikipedia_sitelink \n", - "Q27096235 NaN \n", - "Q48352 wikipedia_sitelink \n", - "Q83307 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 http://en.wikipedia.org/wiki/Political_division NaN \n", - "Q27096235 NaN NaN \n", - "Q48352 http://en.wikipedia.org/wiki/Head_of_state 5945.0 \n", - "Q83307 http://en.wikipedia.org/wiki/Minister_(governm... 243508.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 NaN \n", - "Q27096235 NaN \n", - "Q48352 \n", - "Q83307 \n", - "Q83307 \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 NaN \n", - "Q27096235 NaN \n", - "Q48352 A head of state (or chief of state) is the pub... \n", - "Q83307 A minister is a politician who heads a ministr... \n", - "\n", - " id_labelsDF label_labelsDF \\\n", - "node1 \n", - "Q11499147 Q11499147-label-en label \n", - "Q1048835 Q1048835-label-en label \n", - "Q27096235 Q27096235-label-en label \n", - "Q48352 Q48352-label-en label \n", - "Q83307 Q83307-label-en label \n", - "\n", - " node2_labelsDF \n", - "node1 \n", - "Q11499147 'political activist'@en \n", - "Q1048835 'political territorial entity'@en \n", - "Q27096235 'artificial geographic entity'@en \n", - "Q48352 'head of state'@en \n", - "Q83307 'minister'@en " - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "native-british", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF = wordsimQNodesListWAbstractsLabelsDF.drop(columns=['id_labelsDF', 'label_labelsDF'])" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "popular-harmony", - "metadata": {}, - "outputs": [], - "source": [ - "temp123 = wordsimQNodesListWAbstractsLabelsDF.node2_labelsDF.apply(lambda p: type(p))" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "adolescent-panama", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: [index, id, label, node2, ignore, url, ignore2, abstract, node2_labelsDF]\n", - "Index: []" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF[temp123 != str]" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "twenty-purpose", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF.node2_labelsDF = wordsimQNodesListWAbstractsLabelsDF.node2_labelsDF.apply(lambda p: p[1:-4] if type(p) == str else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "beginning-department", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q11499147NaNNaNNaNNaNNaNNaNNaNNaNpolitical activist
Q1048835Political_divisionQ1048835-wikipedia_sitelink-a3aa16-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Political_divisionNaNNaNNaNNaNpolitical territorial entity
Q27096235NaNNaNNaNNaNNaNNaNNaNNaNartificial geographic entity
Q48352Head_of_stateQ48352-wikipedia_sitelink-0ba458-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Head_of_state5945.0<http://dbpedia.org/resource/Head_of_state><http://www.w3.org/2000/01/rdf-schema#comment>A head of state (or chief of state) is the pub...head of state
Q83307Minister_(government)Q83307-wikipedia_sitelink-519dcf-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Minister_(governm...243508.0<http://dbpedia.org/resource/Minister_(governm...<http://www.w3.org/2000/01/rdf-schema#comment>A minister is a politician who heads a ministr...minister
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 Political_division Q1048835-wikipedia_sitelink-a3aa16-0 \n", - "Q27096235 NaN NaN \n", - "Q48352 Head_of_state Q48352-wikipedia_sitelink-0ba458-0 \n", - "Q83307 Minister_(government) Q83307-wikipedia_sitelink-519dcf-0 \n", - "\n", - " label \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 wikipedia_sitelink \n", - "Q27096235 NaN \n", - "Q48352 wikipedia_sitelink \n", - "Q83307 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 http://en.wikipedia.org/wiki/Political_division NaN \n", - "Q27096235 NaN NaN \n", - "Q48352 http://en.wikipedia.org/wiki/Head_of_state 5945.0 \n", - "Q83307 http://en.wikipedia.org/wiki/Minister_(governm... 243508.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 NaN \n", - "Q27096235 NaN \n", - "Q48352 \n", - "Q83307 \n", - "Q83307 \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 NaN \n", - "Q27096235 NaN \n", - "Q48352 A head of state (or chief of state) is the pub... \n", - "Q83307 A minister is a politician who heads a ministr... \n", - "\n", - " node2_labelsDF \n", - "node1 \n", - "Q11499147 political activist \n", - "Q1048835 political territorial entity \n", - "Q27096235 artificial geographic entity \n", - "Q48352 head of state \n", - "Q83307 minister " - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "fifteen-patent", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1 = wordsimQNodesListWAbstractsLabelsDF[~wordsimQNodesListWAbstractsLabelsDF.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "structured-archive", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "22" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "shared-secretariat", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.abstract.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "fossil-courtesy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q48352Head_of_stateQ48352-wikipedia_sitelink-0ba458-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Head_of_state5945.0<http://dbpedia.org/resource/Head_of_state><http://www.w3.org/2000/01/rdf-schema#comment>A head of state (or chief of state) is the pub...head of state
Q83307Minister_(government)Q83307-wikipedia_sitelink-519dcf-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Minister_(governm...243508.0<http://dbpedia.org/resource/Minister_(governm...<http://www.w3.org/2000/01/rdf-schema#comment>A minister is a politician who heads a ministr...minister
Q702269ProfessionalQ702269-wikipedia_sitelink-e8b4b7-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Professional126325.0<http://dbpedia.org/resource/Professional><http://www.w3.org/2000/01/rdf-schema#comment>A professional is a member of a profession or ...professional
Q1414937CombatantQ1414937-wikipedia_sitelink-e5fcb2-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Combatant80578.0<http://dbpedia.org/resource/Combatant><http://www.w3.org/2000/01/rdf-schema#comment>Combatant is the legal status of an individual...combatant
Q189290Officer_(armed_forces)Q189290-wikipedia_sitelink-baaa26-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Officer_(armed_fo...3619863.0<http://dbpedia.org/resource/Officer_(armed_fo...<http://www.w3.org/2000/01/rdf-schema#comment>An officer is a member of an armed forces or u...military officer
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q48352 Head_of_state Q48352-wikipedia_sitelink-0ba458-0 \n", - "Q83307 Minister_(government) Q83307-wikipedia_sitelink-519dcf-0 \n", - "Q702269 Professional Q702269-wikipedia_sitelink-e8b4b7-0 \n", - "Q1414937 Combatant Q1414937-wikipedia_sitelink-e5fcb2-0 \n", - "Q189290 Officer_(armed_forces) Q189290-wikipedia_sitelink-baaa26-0 \n", - "\n", - " label \\\n", - "node1 \n", - "Q48352 wikipedia_sitelink \n", - "Q83307 wikipedia_sitelink \n", - "Q702269 wikipedia_sitelink \n", - "Q1414937 wikipedia_sitelink \n", - "Q189290 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q48352 http://en.wikipedia.org/wiki/Head_of_state 5945.0 \n", - "Q83307 http://en.wikipedia.org/wiki/Minister_(governm... 243508.0 \n", - "Q702269 http://en.wikipedia.org/wiki/Professional 126325.0 \n", - "Q1414937 http://en.wikipedia.org/wiki/Combatant 80578.0 \n", - "Q189290 http://en.wikipedia.org/wiki/Officer_(armed_fo... 3619863.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q48352 \n", - "Q83307 \n", - "Q1414937 \n", - "Q189290 \n", - "Q83307 \n", - "Q702269 \n", - "Q1414937 \n", - "Q189290 \n", - "\n", - " abstract node2_labelsDF \n", - "node1 \n", - "Q48352 A head of state (or chief of state) is the pub... head of state \n", - "Q83307 A minister is a politician who heads a ministr... minister \n", - "Q702269 A professional is a member of a profession or ... professional \n", - "Q1414937 Combatant is the legal status of an individual... combatant \n", - "Q189290 An officer is a member of an armed forces or u... military officer " - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "compatible-september", - "metadata": {}, - "outputs": [], - "source": [ - "# wordsimQNodesListWAbstractsLabelsDF1.to_csv('../data/wordsimQNodesListWAbstractsLabelsDF1.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "subject-access", - "metadata": {}, - "outputs": [], - "source": [ - "# wordsimQNodesListWAbstractsLabelsDF1 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF1.csv').set_index('node1')" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "silver-structure", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = wordsimQNodesListWAbstractsLabelsDF.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "dramatic-projection", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2['abstract'] = wordsimQNodesListWAbstractsLabelsDF2.apply(lambda row: row.node2_labelsDF if pd.isna(row.abstract) else row.abstract, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "accessible-trunk", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q11499147NaNNaNNaNNaNNaNNaNNaNpolitical activistpolitical activist
Q1048835Political_divisionQ1048835-wikipedia_sitelink-a3aa16-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Political_divisionNaNNaNNaNpolitical territorial entitypolitical territorial entity
Q27096235NaNNaNNaNNaNNaNNaNNaNartificial geographic entityartificial geographic entity
Q48352Head_of_stateQ48352-wikipedia_sitelink-0ba458-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Head_of_state5945.0<http://dbpedia.org/resource/Head_of_state><http://www.w3.org/2000/01/rdf-schema#comment>A head of state (or chief of state) is the pub...head of state
Q83307Minister_(government)Q83307-wikipedia_sitelink-519dcf-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Minister_(governm...243508.0<http://dbpedia.org/resource/Minister_(governm...<http://www.w3.org/2000/01/rdf-schema#comment>A minister is a politician who heads a ministr...minister
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 Political_division Q1048835-wikipedia_sitelink-a3aa16-0 \n", - "Q27096235 NaN NaN \n", - "Q48352 Head_of_state Q48352-wikipedia_sitelink-0ba458-0 \n", - "Q83307 Minister_(government) Q83307-wikipedia_sitelink-519dcf-0 \n", - "\n", - " label \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 wikipedia_sitelink \n", - "Q27096235 NaN \n", - "Q48352 wikipedia_sitelink \n", - "Q83307 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 http://en.wikipedia.org/wiki/Political_division NaN \n", - "Q27096235 NaN NaN \n", - "Q48352 http://en.wikipedia.org/wiki/Head_of_state 5945.0 \n", - "Q83307 http://en.wikipedia.org/wiki/Minister_(governm... 243508.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 NaN \n", - "Q27096235 NaN \n", - "Q48352 \n", - "Q83307 \n", - "Q83307 \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q11499147 political activist \n", - "Q1048835 political territorial entity \n", - "Q27096235 artificial geographic entity \n", - "Q48352 A head of state (or chief of state) is the pub... \n", - "Q83307 A minister is a politician who heads a ministr... \n", - "\n", - " node2_labelsDF \n", - "node1 \n", - "Q11499147 political activist \n", - "Q1048835 political territorial entity \n", - "Q27096235 artificial geographic entity \n", - "Q48352 head of state \n", - "Q83307 minister " - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "colored-imagination", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "31" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "labeled-eagle", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = wordsimQNodesListWAbstractsLabelsDF2[~wordsimQNodesListWAbstractsLabelsDF2.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "welcome-orleans", - "metadata": {}, - "outputs": [], - "source": [ - "# wordsimQNodesListWAbstractsLabelsDF2.to_csv('../data/wordsimQNodesListWAbstractsLabelsDF2.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "quick-chicken", - "metadata": {}, - "outputs": [], - "source": [ - "# wordsimQNodesListWAbstractsLabelsDF2 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF2.csv')" - ] - }, - { - "cell_type": "markdown", - "id": "potential-format", - "metadata": {}, - "source": [ - "# Fetch saved files" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "defined-harris", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF1.csv').set_index('node1')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "documented-replication", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF2.csv').set_index('node1')" - ] - }, - { - "cell_type": "markdown", - "id": "apart-divide", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Sentence Transformers" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "parental-craps", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "initial-coating", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def getEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "documented-alignment", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8.550719976425171 s\n" - ] - } - ], - "source": [ - "bertEnc = getEmbeddings('bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "id": "continuing-impression", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1.24G/1.24G [02:08<00:00, 9.68MB/s] \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.648171424865723 s\n" - ] - } - ], - "source": [ - "bertLargeEnc = getEmbeddings('bert-large-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "responsible-national", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0568156242370605 s\n" - ] - } - ], - "source": [ - "distilBertEnc = getEmbeddings('distilbert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "interracial-mitchell", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [], - "source": [ - "robertaBaseEnc = getEmbeddings('roberta-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "amended-powell", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.765424489974976 s\n" - ] - } - ], - "source": [ - "robertaEnc = getEmbeddings('roberta-large-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "divided-donna", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "characteristic-religious", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def getMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "quality-sponsorship", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertEncMap = getMap(bertEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "id": "electronic-parcel", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertLargeEncMap = getMap(bertLargeEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "confused-snake", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "distilBertMap = getMap(distilBertEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "id": "vanilla-subject", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaBaseEncMap = getMap(robertaBaseEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "familiar-soundtrack", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaEncMap = getMap(robertaEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "subjective-leeds", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "bronze-sally", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "detailed-imperial", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def checkSimilarity(row, encodingsMap):\n", - "# print(row)\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['g_qnode']]], [encodingsMap[row['p_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "funded-prototype", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertEncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "improving-nevada", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertLargeEncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLargeEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "conventional-white", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "distilBertSim = wordsimDF.apply(checkSimilarity, axis=1, args=(distilBertMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "related-garage", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaBaseBertSim = wordsimDF.apply(checkSimilarity, axis=1, args=(robertaBaseEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "portable-joint", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaBertSim = wordsimDF.apply(checkSimilarity, axis=1, args=(robertaEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "mental-forestry", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimDF1 = wordsimDF[['Human (Mean)']]" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "round-cornell", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertSim'] = bertEncSim\n" - ] - } - ], - "source": [ - "wordsimDF1['bertSim'] = bertEncSim" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "exotic-fundamental", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLargeSim'] = bertLargeEncSim\n" - ] - } - ], - "source": [ - "wordsimDF1['bertLargeSim'] = bertLargeEncSim" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "latter-cleanup", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['distilBertSim'] = distilBertSim\n" - ] - } - ], - "source": [ - "wordsimDF1['distilBertSim'] = distilBertSim" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "excellent-meeting", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBaseBertSim'] = robertaBaseBertSim\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBaseBertSim'] = robertaBaseBertSim" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "south-rwanda", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBertSim'] = robertaBertSim\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBertSim'] = robertaBertSim" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "proper-stations", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertSim'] = wordsimDF1.bertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['bertSim'] = wordsimDF1.bertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "legendary-campus", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLargeSim'] = wordsimDF1.bertLargeSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['bertLargeSim'] = wordsimDF1.bertLargeSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "ambient-victor", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['distilBertSim'] = wordsimDF1.distilBertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['distilBertSim'] = wordsimDF1.distilBertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "velvet-ethics", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBaseBertSim'] = wordsimDF1.robertaBaseBertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBaseBertSim'] = wordsimDF1.robertaBaseBertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "colonial-coordination", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBertSim'] = wordsimDF1.robertaBertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBertSim'] = wordsimDF1.robertaBertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "informational-fountain", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "numpy.float64" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(wordsimDF1.iloc[0][1])" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "japanese-order", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertSimdistilBertSimrobertaBertSim
05.53600.4268630.3602190.436207
14.12500.3399220.4331000.427664
26.62500.6865780.7069780.645407
32.06250.2961750.3736790.371295
47.18750.3408110.3905400.488393
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertSim distilBertSim robertaBertSim\n", - "0 5.5360 0.426863 0.360219 0.436207\n", - "1 4.1250 0.339922 0.433100 0.427664\n", - "2 6.6250 0.686578 0.706978 0.645407\n", - "3 2.0625 0.296175 0.373679 0.371295\n", - "4 7.1875 0.340811 0.390540 0.488393" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "id": "marine-general", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "wordsimDF1.bertLargeSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "living-condition", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "wordsimDF1.robertaBaseBertSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "hearing-adjustment", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "wordsimDF1.bertSim *= 10\n", - "wordsimDF1.distilBertSim *= 10\n", - "wordsimDF1.robertaBertSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "suspected-plumbing", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertSimdistilBertSimrobertaBertSimamanSimbertLargeSimrobertaBaseBertSim
05.53604.2686333.6021924.362067[[0.4949737852167514]]4.1961185.313815
14.12503.3992174.3310054.276645[[0.4818230866992358]]4.0459335.239753
26.62506.8657827.0697766.454071[[0.6407051485261465]]6.2152236.513252
32.06252.9617553.7367903.712948[[0.6186497481059658]]3.5818334.266170
47.18753.4081123.9053974.883926[[0.8556663921383962]]4.3223805.111274
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertSim distilBertSim robertaBertSim \\\n", - "0 5.5360 4.268633 3.602192 4.362067 \n", - "1 4.1250 3.399217 4.331005 4.276645 \n", - "2 6.6250 6.865782 7.069776 6.454071 \n", - "3 2.0625 2.961755 3.736790 3.712948 \n", - "4 7.1875 3.408112 3.905397 4.883926 \n", - "\n", - " amanSim bertLargeSim robertaBaseBertSim \n", - "0 [[0.4949737852167514]] 4.196118 5.313815 \n", - "1 [[0.4818230866992358]] 4.045933 5.239753 \n", - "2 [[0.6407051485261465]] 6.215223 6.513252 \n", - "3 [[0.6186497481059658]] 3.581833 4.266170 \n", - "4 [[0.8556663921383962]] 4.322380 5.111274 " - ] - }, - "execution_count": 137, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "incorporate-punishment", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 89, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "wordsimDF1.sort_values(by=['Human (Mean)']).plot.line()" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "prospective-international", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAADW9klEQVR4nOy9ebwkV102/pxzqqq77zJrJpnJnhACBMKuCAiCgCDwAvoqArIpuCAi4g8R9EV5X1cUEUUBAZWIyiabKGFfRAhLAoSQPWSSzL7fvbur6pzv74+zfU919Z07MzfLJPfrBye3u7rq1Pac5zzfTRAR1mzN1mzN1uzkM3lnD2DN1mzN1mzNjs/WAHzN1mzN1uwktTUAX7M1W7M1O0ltDcDXbM3WbM1OUlsD8DVbszVbs5PUsjvyYKeccgqde+65d+Qh12zN1mzNTnq74oorDhLRlubndyiAn3vuubj88svvyEOu2Zqt2Zqd9CaEuLXt8zUJZc3WbM3W7CS1NQBfszVbszU7SW0NwNdszdZszU5SWwPwNVuzNVuzk9TWAHzN1mzN1uwktaMCuBDiH4UQ+4UQ32efbRJCfFYIcaP7d+PtO8w1W7M1W7M1a9pKGPh7ADyl8dlrAXyeiO4N4PPu7zVbszVbszW7A+2oAE5E/w3gcOPjZwK4xP33JQCetbrDOj777zf9Io7suPqYfvP1v38Vdl/5ufD3rV//CL51ye+u9tDutrb36v/G197+G8tuc/Un/gZX/+db76ARrZ7N7LwWX37TL9zZw1izu4D9+xt+Hj/4zpfwxT95PozWAIDvvP+PcNMX//lOHdfxauCnEdEe9997AZw2bkMhxC8LIS4XQlx+4MCB4zzc0W371/4dW959Gb7+succ0+/W/9WnsPPFrwh/L7349zD1px9d7eHdbe3f/vo3sO5vPrvsNvK33w756rfdQSNaPbvi3b+PU9/9dey/8et39lDW7E6071/+Cdz//d/Gt173a9j6z1dg+9c+BACY/dt/xXV/++Y7dWwn7MQk2xFibFcIInonET2ciB6+ZctIJuiqWX92PwCgM6eP+bfT/dUezT3H+nUJRYCuqzt7KKtuuioBANXi3J08kjW7M22wOAsA6JUW5qrhIgBAakDoO7chzvEC+D4hxDYAcP/uX70hHZ8ZXQMASNzJA7mHmTT2X1OXd+5Abg9zS+W6Gt7JA1mzO9WMBenMPetUW6wRZP93Z9rxAvh/AHiR++8XAfj46gzn+E27i0prgZF3qPkH+O4I4GTsG6urwZ08kjW7M40cgCu3uDcmAjju5JaUKwkjfB+AywDcRwixUwjxEgB/BuBJQogbATzR/X2nmmfga3bHmvQAru+GAF7bN9aUawz8Hm3uGc88gDu5UCwrHt8xdtRqhET03DFfPWGVx3JC5j3Dx8LA1xo6n7h5AL87auBwDLyu1wD8nmzUkFA81pzMEspdzoxzOEEcgwi+BuAnbEEDN3c/ACdtT86saeD3bHOOSs/ASXMGfheXUE4WM5UDkGPB73pNdjlRixr43Q/AETTwu588tGbHYJQCuOYM3NxZg7J2twFw7XTKY5JQzBqAn6hFDfzuB+CBgd8NHbRrtnIjB9KRgZ9ETsyTxQKAH4OE4qMM1uz47e4M4GsMfM0AgByCKx9GyKJQ7uyo5bsdgB/LFdV3Q932jra7s4TiJ/g1Bn7PNv8chCgUJqHc2VEodxsAN6V7yeQxIfjtM5h7kMVEnrsfgPssu+BfWbN7pHlfWYxC4Yk8axLKqlgA8GNxYppjT7tfs9SChGLufizVh4/dLUMk12zF5hm3N3J/SwKw5sRcHYthhCv/DdEagJ+oRQ38bugQDhLKGoDfk40aAB4kFKxp4KtmpnQv2TFIKMuFEa4l+azM7s4auHAM/G7poF2zFZtpRKv5lfuaBr6KRiEO/BgAnMavf8yavLIiixLK3ZGBOwBfyxe4R1tTal3TwG8HM9Wxv2TLgfRaks/KTDYcO3cr02sSyprFmjjhbyetraXSr6Z5AD8Wp8IyAG7obghIt4P5B5jujgDu2FXbuX3j5kP40Td+AS+95Ft39KjW7A62Zr4I3YXCCI9azOqksVCjd+VXdFkGfncEpNvB7s5OzBBG2LIae/+3dmDnkT52HunDGII8lvDVNTuprIkFXlKRFFegd5bdfRh47ZY1x3BBlwsjXEuzX5mdaCbm2698O971vXet4ohWzyr3TJVlem6DSuOz1+yLf9dr/pK7szWJni+xIO8CDPzuA+BOQjkmAF+GNeo1DXxFJk5QA//qrq/isj2XreKIVs9MC4AfXixx39d/CgvDGo88fzMAYKlcA/C7tTUS/oh0iFJb08BXyxwL8qFfK7HlolBoLXRsReYZ+PEmRRky0HfRiJ+wumCT+YF5W7LhkedvxjMffDoAoL8G4HdrG41C0SFHYA3AV8tqX2nmGH6zTDErs5bksyILAD5mwjtawTBDBvoueq2l8U7MeA61O58XP/pcTHdzAGsMfJx9/rbP41t7T34n74ivzJjQL3WtGuHx2mAOuO3r4U+x2hr4moSyIgsdefSYaznuc2d3ZQYeI2zi+Gpf3F8KTBQK583uRv/rd00J6M623/zib+IXP/2Ld/YwTthGMzFNlFDujAExO3kB/Lv/BrznaYBrOCsDgB+DhLIcA1+rVLgiE8uE2gFHz2jVpO+yDDwsjzmA+/ZaSqJXKLzti29G57WvvBNGt2Z3lIkmThgmoaxFoRynVYuAqe3/EEO+jo2BLwPgd5OwuOv3zmN+cPtNRrGl2gkw8LsogAcJhT0n2kQGPlncfaJw12y8jcSBGxNjwe+MATE7aQH8K4s78PPbToN22qtn4PIYGPhyIN2sQHay2k+/7av4l6/fdrvtP8gMY8Iuj3YdNem7vISSMnBX3F8K9AoVPl+T3O6+1ny2yRho3pXnTrSTFsCvHx7C97odDLWXUFbAwPtH0r+XYX76OFLz72pGRFgsNRaHt9+5xK70YwD8KGnoRHSXZ+Dc2d3UwL3p+fk7dGyrYnuuBD78S8DdZLV5e1lTBiRjQt7DGoAfpxn45a3LijqahHLoB8Cfnw/s/k74aDknpr4bpNL75b65HT3lsZhV+7U8WpGru7QG7p8l3SKhKJkC+MzMHTiyVbL3/jRw1QeB2R2rtks9P4/Fr31t1fZ3V7CmEzONQrnjx8PtpAVw7WK4fbifctdznIRi5vfgo5M9VDM7w2dkRmfWsP3doIBRIJC340N2dAa+PICbpcPQ/cOrPaxVsRAiSTyMkDPwqIGflAC+dND+21yZnoDt+b3/g9t+8SWo9uxZtX3e6dbMxFxj4Cdu/qXyzE85CWVcbYJP7r0Mv79lM/5h1+fiPprskM20Y8PiGlbWd7IbehnzzJtuR5rgr/e41Yw+Sj/JTfuXsHF/f7WHtSomWxh4raMGXmTx9dGzs3fk0FbXlg6t2q48cNf79h1ly5PH2pyYawB+guYZuAdhdRQJZb5cAAAcKOOL1szE5EulldRCue3QEi76/U/hur1zKx/4HWgBwFf4kA2uvx7zX/ziMR3DP8Baa7z/m7fhsh+kYEBH6Sf5+ndW+IO/v2u2YwsvJ1vCLFQLmDj3rXj5f/9vPPlDPxE+P+kYeLkY/3vxwKrtVm3cAACoT7brsZy1rNSDdLsWRnh8Rg0JJWtIKEfe9z7s+JVfDdtnjoUmneibrJFHG6ygQNH++QFqQ9gzOzjm8d8RFjTwFWoo25/5LOx82a8d0zF4NcLXfuQq/Ma7LgUY69b1cMX7+uytn0W/vuuw8aYTk4zBma9/JR6xYwdOnzoL5/fOCtteffM3VuWYpixRH1k9SQMAMFwAjtyafnbg+vjfiwdX7VDZxo0AgOrwXVMWOyb7z1cBH3zhKE4QRQYePiLsmF89X8JK7YQAXAjxKiHE1UKI7wsh3ieE6K7WwI5mGh6cmhq4/Xfv//1/WPjyl8P2maOhNWPW1CxSwxn4Cjzz8f0+/nXUroVd+O7+7x7375ezO0IDDy3VjAZA+Fznt1F98x/jGFYY4fC9A9/Db33pt/DGb77xdhjl8VmTgdNggA0/2I5Xf8TgBff5ZfzJw38/bPuFqz++Ksc8fMkl2P5TP70q+wp2ydOBv35g+tn8XmgAe5SKWvgqmNrgAPzI6skyd6QRUZhAq4M3oDx442i+iDEwvvaSe0b+9dp/xVM/8lRcc+iaO3K4xw/gQogzAPwGgIcT0QMAKADPWa2BHc08A/eNiZW7xnIMWLUBuGl0fxgMGHNcQWyylyj0ChHy4LvehbnPfCb57CkffgpecOkLVvT7YzVznFEoK41pJiLWkUdDgrBeLGHPnl1sXytzBi9UVuLatbDrKFvecebPzSeJeS1KErChswGTdYxCOdtsXJVj1gcOoN6/f1X2FYxFXgUjjT/bvBE/cfYZmFtYPb1aTk4CAKpDqzcp3JE286EP4cZHPgqDG27AU7ETj5hYGMnuJkMgk2rg3zv4PQDAD2Z+cIeO90QllAxATwiRAZgAsPvEh7QyC1EoXgP3AD5Gk5Ja4/63GmgGKJxxf+PmQ3jcn3+BfbcCBh4AcmVjPvCXb8au37jj0q6jBn5sAG4WFla4f8PCCA0mc7ug3De7FLbRemX6tnCL0btSM+nwLFGUULxt7K2HWYrnObVKKhpVFWDMqiYGXVvkeP/0VONABv/uPptdWr0JwxOr+tDJycDnv/wlAEC5/RbsFQa1aHHQs/vjAXzjHOGXLtUoB4u4I+24AZyIdgF4E4DbAOwBMEtEn1n+V6tnIQ6ctGV/7kKOA/DJ7+3GH/ybwX0vi9ocd2Lunu0nfTX1sUgoJwA6P/Y9g1++9PaJg9Z0bBNM+N0KAVyTTpoaT+b2ceKrl5UycOGaUd+eETPHav7lFP50GIBv6KwHMQDvLK0O4HqnLw1X7js4mj37jG3441M2pR8ajdpd84X+KrJlJ0vqg4fw+n/T+JVP2trZH77hwyhXOJnfmXbIOXT3D+M1GY1CodBy0T8jD/nYtXjSdwkT//3dO2Sc3k5EQtkI4JkAzgNwOoBJIcTzW7b7ZSHE5UKIyw8cWD1vtwdNY3QIVTMYD+DiiAWlDfvYi8GARhtAsoSSlXSlP1YJpc0ecCvh4TfePqBFxznBmBVmFXIAJ6Mh4GWteLyVdnSX7lE0y9Rov6PNr+pCwS72IneXDsDsuREAYARBVas0CTsSYcrbF+z4870wmAGwMtnwqObunz58GBffSnjClYTP3PoZvOGyN+DR73s0Lr7kYixVS0fZyZ1n3mdTCXYtms+koeA/C6Ukpnr23yMzyab75wf48Td9Cbceun2Y+YlIKE8EsJ2IDhBRBeAjAB7V3IiI3klEDyeih2/ZsuUEDpdaTOQxqB2AV5nVJ9uKVNUOaWQVv+OJPMYQcg7gK4gDD5PICTDwTEcH7GqbPkaJR05M2N+tFMCNjk5MVmKTP/CGRaQsJ494Bj4OwM1ggIPvfBfodga2ZEzNMEI2/nVvfyDMh38dADDoYtUAPDDw8vZNJNsznAn/PV8tYKlawoPf+2D8w1X/sKLfH77kEtz8jGeOfO6BzbAolBk3QQxc2Yu58q4ZdgtEWbXi8cjNF4hMSPQLK9D1Vo4SM+m7s+PwEm4+uIibD971APw2AD8ihJgQ9u17AoBrV2dYRzdiqfS6igAOoLUCXu3olOSJNwywNREU8SiUo7+QuxdvwfT9XotbFxqeZ10BH3oxsP/ol6OoAXU7qQbHqoGLSQvgK9XANekkkSdIUgyEuZa7HLs+2hgP/M1bceDNb8bcpz61orGthvlzC+GE7JmoHvJSmAe+CAAw7ALZagN4dQITFRHw6d8D9l0z+rmzWwZR954H4ZKrLwEAfObWlamg5a23obytpUiau0Y0HwGrbpSlEHd6Db9lzE1AC2V8B0RT+jEUmHpg4BvWAQDU7EJzU/v97eTbOREN/BsA/h3AtwFc5fb1zlUa11GNp9LXLta4ckEBaUKOW9I5cPZFr+x28b+rqkbBHrSVSChXz9iGEt+f/Srmv/Ql7P/rv7ZfLOwDrv4ocOvRa0Lcngz8WCUU6Qai51bGkGpTszBCA+EBmpdfZZ16lqt54iOCxmngw+vsZCinp1c0ttUwz65EmJfYiu30x8Gc9nA7ti5BVe2TU/+qqzC4/oYVH9NPeCekgS8eBC77W+BfbDji+kXCvXdSUpdmwPIhFkD44g6bwHXxKReveJxtSVph9csm7rqRFOdXW3dF8+OfX5oJn4044olQVymAZ3nH/juTMm0f6HB7+eZPKAqFiP6AiO5LRA8gohcQ0ep5Xo52bBYHrsuUgRNPwvGMwF1wyWK/+QNt6gqZOTYnpg6SgcDOX30ZDr39HX5n7l82kYy5g3kdtdbVtmOWUBwrM/Mpi9ALi60gxKNQLAMfTd1PonlGmsMyQGSSGLddV16Gmd3bUd5mkyRktz3VwAyHWPp2S7jcMvbF6/cvWwohRqG0SEN9HaJQ+l2JrDbY25LQdcvPPhvbnzkqNYyzKKGcCAN343Ra8xv/UeOP36uTJDb+7M/LyJJX6oMgXQNaj65U/fvGALzyxyWCNLQiBv7tfd/GgaXj85kRET53zb7j8005AF9YjBJQE8DJEOpGKn0Gyx7zuVTfb0nmXVU7aTMxNYsDDxq4D8s1owzcOE1RMQZueJnQepho4Ms1PA6/J1/UPT6QH7jyvfH4nHmMceYVNSEzt88S61g1epm5azWThoDNfOD9uOU5zxkZY+LE1NGJyRm40e2gYcdlRv67ycDnfu4Xsf0pT0O1c6c7Tvt92f/nf4Fbn/c8LN5wfev3TdtxeAm/8E/fwueuHR8DnTVDU9l5LV5+DQbXWoliqSuhKsI7vpzGAB9Pev2qAHg9wJd6Pcy6673Jzce8Lg2/9gsivgsrdiL7lULjufYhdzx22oPd//4q4f1v1ED/6Nm2L/rUi/Csjz9rZWNp2Oev3Y+X/vPlI/djReYmoMXFmA2rm925iELxNgn37rrz7sylk/hq+MmWs5MWwClcGB1iu2vPwPUoA/fe/RTAGWBXAygmoaxEA48Pe7yMX7jyo4yB12Gs415IXwLgaJ1r2uz6w9fj2kPjdfZjrYXiV7b6cBoXrOfnQf1+AmCAXRrHin0UmR/XwBmAl1Ufr//q60OyTiuAtwy2W7LPxkhb5a02Vfxl711ZFuPAadbjOspzR7gHo4qVBTjwzvdi7j8+geHkOlS5QK5H99W/6iq3gxVIBvuusfHFqwDgS4MZ/MZpp+DjPZV8nqw4GVlZkDLIWysN4/Qr2hEZpWWCrfdfDQB40necnDm3Mif58To7Z/t2TD/YvzJfTmLuvi/1ZzG9RHjdBzTu880jjW0oLXZHFPxd3blUhCD+ftwOdtICOE+l98wiJMYxVuBfRKpGNXDN6zxXJbJjjEKJqwBAdKwGls8tjQD4zle8Atc/7OGt+yj8pkcp+tRmb77izfiLy/9i7PfH6kAhYWdAM9NYurrrNNLclQzLxLRRKNvzDCW4NBX/e9fsTnzspo+FTuU6ud4rW8KPC0tU66wTaXKFCTVe/tKGcPhf/hW3PPd56QbsOH6ZXDuisONhQ5z7/n/BuR/6EL7w22+GVgJ5bUvNUlVh7tJLMfPhj2DmIx8BAHTvd7/lB3PkVuDtjwR+8PnAaM3w+AG8P5wDCYF+Y96oqnhxQhlmCMxJGf5esYRStwN428q1HqSVGul2lsC7uQWC/vE4lt2zvjSYx4s/a/CQmwmdQXpOwlCSEAitQQM7WeQNX8ixkqhjtZO2qV+8MBHA9TIMXNRp2VkALv3b/3eJnPhyP+7ji9ftxy+851v4xu8+AaetixosZ+Bq/XrU+/ejmO2PaOALn/t86zkQUWDgdTWE6vVWdvLOSl2OOIi4HasGDpkDMNAzKeMI17MB4NyJSaRBpPGc07fiqeU+PC78ljuGKzee0eW692McjQFeuffb+OgHNuGymw/hstc9IQ59vQXwqYG9rkdzlPlro4mw74/+aOT7hIFT+ll/HaH3oIcCQsDsvh61tAxca42lyy/Hrlf9VrIvMbH8fT2wfw+2ALhu+y0oVoGBl5V1pJUNrdmUHMDtuawTORakGOuDGGcBwJvhji0MfFjb44bruKIjHL91XJnfwfEAuLvHg8EiLjgyZqSOgXvsICJAFfHr4RDSEbrbux7RScvAfdQCjwPXPgqFOTGbDDyv2jVwqobIkM6q3t77dbs8//6ulEkoF0vbHR6BWr/e/vf8kAH48qy6NjVj4Ct/Ya88cCX+6Ot/BENmWcA7Vv2NRG63n2/UtvaOqcbLqXXJnJgEQQZLUqKfMPB4DSq/UnLXhzPw2oHL0VYLOTJ85Du7RitAurTwycHKIohCsMSY1nn8GYqrDLttLbIgi2RKQGcui7QqsfvgdgDAnz87x6/9msJ1ZwI7Z5fvSXrtTpv1d/nNB0L44IkA+NABeNWYxOpqFMDXywILQoZrtuLVmh4noYxe+1JbWSEA+O2cyOMZ+GBMZNCy5p7x4XAJ0+OkemowcGNAMo9fs2eK1jTwduOZmF5+0JmP1+WRDykD7yWJmBzoKyjOCFsiSJqkbmLeOkm2zF8XALw3X7Y7MVtsqIeBgWsG4GZpCXOf/ezYl+lru76GD1z/AdSmXvaF8yC18mfHJdP0G550v6NGZI4xVUx2IQ206KhJR3f3Invw4Ne4nnPORNcd5vJdX8cnrv/3kREWUCOfAcBsZq/f1ICOKYu2t/3G1u/5ysFr4N5Bp0V8bXIlUUv7t6hKHJq3/oMHXPRj+JnHvgzU7aCs0slGLyxguH17/Lvq4+0b1kGLpeCrOZE48MDAGw+s5pPCfB8v/ZTGJlNgXkroOeeXwApBz43z0DvfiZmPfDR8THu+NzoeNzmH0qu3cyJPpuyRBisoCT1igfDVWLccgPOJyhhAMDEjwQ7377GPZEV28gI4q4XiZ0PTFgfuWaObjTtDxsp5tEQ1RM6dmPwmuH+b4U8eiAQkRGFn4ImFCjQcYOf/bMRgx/I1JgZ6EBg4B/DD//qv2PWK38DcJz855tyNO6Vq2SXvMTNwv85rgodn4E0npi5jIo82ADQmBpQwdc7AfWimZ9681Kw+YqNMjGuv9guf+yX87tf/7+g5HWlns4f6NnJmqg9oc3Tw8xp457abw2d8MuQRG5qA91/3/jDha/ayZlJA+848wzJE3fzkBU/Hyx/8chRZZ2T9vOOXfhk3/+RTw99XLl2Ft23cgC9m312VWiilY7hlg3BwCWXTF2/FT3yH8OgrKsxLGd4n05LF3GZeQpn54Aex53d/N37Rcn/qKmXgR5MTzBgitVLzt/F4GLhw9z0vNSbG3QKDUE4WcO8FOyeOP8dbUG6ldtIDuCEd0rWNS2lMHIK+c4aL95WIxZp0AvQlFNoB3EQET4wCW5FhyT21oDHctw/zO3tYumH5Mp2cgXMJRXatZrr339+Pr+/5+sjv/MOgSS8roehjBPBBYB/NuNd2DVzrMvoQyCby/M07NC68imXhMWegbkooSeMHB1xs/6Jt3FW7l9KzXCuhrLySpOCslB2v5veDgD/+xh/HpDAG4EoK1FKEfXkAlju/CXzvQyCYkXKk/e/YeHXjQHpQ2+tlhA6/P5FaKMMA4A0JhQF4NWHZzuZZg74UMH71tcJm3uOqJRKNQko9TGOmm71om5aEOFbHHkni34nj0cCFO68Ny2W+EyXkg+oqJTd6FDvWJBRm39s5w8rJxroEnoFzYAhFZ5jzcjhrWZ6mFMAzDtqcnVMFNXHzSPpBSOSBCLPuuiVguGDDpMxg+ZdwUC6FWONDv/v7OPSe99i9FdYhYi67HL/3ld8d+Z1/wGtTryg9faUOlJ3OiTvSoCJEoTQ87BzojUFGdtnZW2LXkTHw2iVEBIcZZ+duAjQMwtsKk5kxIQz++k8OKDhLlzPvxEzYEi9uxsbmE638xFAzAM+VhFb2NaJqCDriEo6+/lbgIy8FlXMQVYPKKfugGpfx6jXiDiQW+/az49XAiYgxcJF0RzJsHNW0XTFOzdn1nHGX1QxXFuLXLLccAWwUUnSVdq85mkzDn+nZ4Zheo9f9F9CfaR9bYODHDuCytMfeuMxlEIagG0mAfPJPVqBB6j3moazITjoAv3HfPJ7xt1/F0IMKk1DIAXjSUd4nFrCMu/6sS1ThgFRXyBIGHr/bIz+KiXPeidsW0yQRMhqPvtpAaBHCzqb7hMGifQnnl5Z31pT9OM1X370K+//MdqNJIjcWRqmAZxjLpabz01vp8s0D1VKzV2hg4OlLW/OJ0hCUqP0Ag3E/Q9N5yScAz2j4UFszVMctqR04TQ5aEi9azE++Sa0W3XgpG+OIEkrU4TMlUEv7t6yGIDcO+fjXAr9+OSAVROPt9U0P9Pw8qCzxjDd+GU/4rkEHgHa/p+MMI7zxMY/F5P/9TwCw5WJZTY+6jADuw3CnZmtoIeCvKq0QwNFw/mrXxabt17oBpLyERZtxAJ9hRbeCHbkVeP/zgI/88pjfHz8Dl+43GxfcPvKWjSgSDsBFV3HSw9n5mgYebaFcwJG+XQaee9MQf/pPNYyugmRCTkLRTELx0gaP/x7MzdjteBRKnToxORtbgmVV/Tp9PC+4ahav/A+DC644HICgUwH7Zq10smtp+Zdh2B+zPGQPRz7XHwHglTJwc4wMvOtoWN8Y6IUF3PDIR2HxG9+MDLwBRDzFmMiEcrxcMuAlCYzb3uuamjFC7Z13bP9tNWLGlqd1+1rXR5L9Oc7CqfCcATbZ8BouvGAXAFQyhozlUqJ2Grgoh4F9yQ2nA6fcG5ByRAryVR/N3ByqPXvQGdT4lUsNCoggqR0vA9cHDyJ30VKlEMAwOgyJrwTcBZiYqRwDdxLKcGUOxqaEUu3ZCwC4GaM3zThQjCGny8s0R2XgflKabe9BaQjITI0Hb//OMWvPvqaNz16dm2zZiCgNgKjrhrN+LQql1X7mEz+DT+/4EADgqf/Zx732AmaxD+21vRYJJTLweAHL+RkA6VKH6goZf7D4DXIPpZJp2PzEnAPtvg7A0iuBgZNQMFyeAYzr3sGBZGrJoGw45bgGvtxy9JhT6d12QyIMr70W+sgRHPibv0k0cCLCua/9L7z5M9cnjlcyBIVA+ePnbDLyerhn4Dwqwl8/rum3MfC2UsFABCfrxFxJMw4voXCJh0k67pmqZdq4GQAMd2IqgcoxcFENwupJZRbkSyI0F0q8bG+1Ozax6pmYF2DK43dieisFAMao0/tlr2N3MWXgZoVNqJsAXu+zAD7ZooFTE8DHlEPwlgB42QLg/j7J9ogkIsIP770Wr7nsPSi337LssZq/83kiXgOfbwFwYRqrNVODZx+X/XjN77LVCO8M27e0D0dcp4w4m5vw8noGzpe/fqaUmjDn8ikWZu0+kkgTU6XlZHk6uHu8M5ECuPDdR5QMQNAtgXLJ3n1xNADvj/GUsIdjeokwqJv1FRwD7x8BzTW62N30eeB9z7MswS/9V/js+Kp7ggAod651nWjgfl9/84WbkutMxkAhfVHtqYwWCIsSSgSL7PAiPvinNe5/fbxmrWV2x738Dniyxss1zkImJru2Sd0Wd25VFieSYWXjymoV19VKCtSKA7h73lx1OhKjztgA4HNzCYCfunsQJgt9ggAuDaGEAC0cjufEWT17KPKaoENLuxVGoeh2Bl60+Sgqwv/+H4MJd3g6ygTLpcG5wSyqvXuT78u6j589fSu+OaYOMxEwVVr5kgZHr7sSftcS+bM00X6AxHdSpxIKJQlTx7YKPlY7aQCciFCbOt7c4N01AQjIxX9yB5RndqoGFhyAz81YiSMJmdJ1CuBcXnHaeNZg4JIBuD+OBXD78MijAHg1aNfIOWud7gP9On0IPevWugI1GdOObwDX/xdA5tjrgbvNpCGIPHNjqRMNnLN5zY5NRHEFkzh0OICnEgpne5O3WQ31R74Tt291Yo4BZ966bSXg5x21ml1bw8DcyztaWVnsz/6pRvnmt9vPWNKGjQO310rV/bByU7ll4BbA02MHCWV+HtXuPeHzqUPsxR8McPElF+PVX371Uc+lzdYv2kQeMxdDWU3CwOMzduoMUPk6OCtVaxsaeABZsqsWbg+7ivBzX+HyZI1KG7zuI9/Dl64f7cfJx7bhc9/GTY97PPrfi/Hltxy8Bf/vzRL/8YN2idIQoeuetaPVNKp270Z5663QhvD6D1yRfDcsCFU+OiEJg6QMB+nUicmlwds7lf6kAfBQ7MglAYSkAB1T6YMTk2ngPnJA1oRhz17FBVfrIw39KZOWavy76YUhXvRZHQv7O/O6OikZsq8UAXrOA/jybGYcA+egt64PLNWNxJrDNgmkBo2GEYYkIn3MYYRJ/WuXrEJaJxq4HqNvw5jwlHLGmTgxmwycR0joUfaetb1749z5iQPy6AVRdK3x7Bs+DzXPGCpnVe4l7AiDqQFw/l4A19rELZ7RlUmB0jHwrBpEnwsDcDkGwPWclVB8BEjeZ+cwtBPLp2/59FHPpc02LlgNnOaPxHNukVAAYOsRwrpF4OnfMNi4326za6aPt3/pB2Mn/xENfMFp5yRQNgp0TC2m+yCt8ZbP3YD3fXMHLvnaLSP75hLYxI02wWhw9dXxWDvtquWJX22fzA0BPY8JR2npt/f//j/ses1rcOuhRXzq27cm35WdiCnpCaRhhEanDJw/13FM93AJxdcr7h6xkSAxplTH9GPviOHREZ6Ba6B2AN6fsy9tkkqva2Qt1fEA4MWfOYinXU6Y+u5VyZik86bXSqSZe66ouyqXB/B6DAP3LK5SVkIZYeALlrXUwKgCHlYoscXZSkOYQhNfAuAje+oqqYXCH0TTZOA+ioc9q7SMhMIBJfgc2G/bGPhYRsWdSMOjA3jxvSvwC9dcivt961ts3ywuPazq2LE9cI9kYlrEyup+0HdV1gm/aTJwv7ox81ZC2X+KqyXdZxPICs5hOds0TyiFQL0YWWrSYJpFgmw7DLzqYxov/ILBA66wz9ovXXI53vip67DjcLsE0cwVqBwZEYQRAO80FkREGp+7xj7DvLZQ+J5FEdU9OxFqVqO+WrL/XbewYyBl4G2p/VRVWPjKVwAA5c6dqHbvRq9QKBrO76oASLYwcEonwGYYYVq299hWwcdqJw2Ah8gFSkHC6DoAtr/Y/OH3M2VWA1Vue2Oe/sVrsfeP/ySVUEyVlJPl4WqZl0oabNczcAvgOiwd5Zx96NVRGHg9zolZayDPsdBzEkrVlFDccUGjD4aJAO5XeSud/QOAGwa8tQavhcIXIUm0B5kgQSUMnNc7qVMJhYNAs0ks0K6Bj3WAcQbUjLtusTZmpltiprOF+IqE85Lxs0wJlM5fkFfDcP3lMhKKPwfPwPdtljAAikEK4B/80xq/8fFjDIVzdH/jgpVF6qX4jJkxDHzbEQpVHH0E0WLpJ9sxDHyYko8gBxJrbehssgngWqN2xx+2NNTgEWB1z9XnYW3+KldPfByAEwFdRy7aopYOvfvd2PFLv4yF//kf1Pv2QR86DNIanQaA1znQ4pOFoFTKI0rfw2Rl6f36rSM9cTtpANwzcJ/AExvO6uCcIfdicQ++v9BKAyYjVAWw7lAfR9773lRCMRqSOy6TanSOyTZugzIewCVQ11h0ZCKfs+NR5fK3rV5GQhFKYa7XroF7R5NGy4MRanJHtrzSh8c7MSVFgKO6BvmECV2nEkpStpdiGCZn4AxwK/eCRAmFOUFbJJRjiQNPGdHRQ/DKlv20OTG9/LF/fdxOMFampEDlNPFcD4Baw4Br4GJkJeFXa2Z+DnpuDnM9YFA0AHxgEfVHrznGMLjCHmzzPOHeNwuUrDCZaRRgAoDBaVPYeni0fVyQKMcBeLMy5WDJ1u9uYeDNEr+kDWr3HA1b6pXw+1AGAI8ridrV6jFjATwy8Go4GlJ66FYbfvh373uVnRiMgT4yg42NGPi6EDBtDNxQ6iNrauDcBxdWwfdwBu7Zm3fghawuXYMaDLweMscUY+CkAM0C8xNm2pBQ2gBcNzz0Pj3fOMBbtKtmdObteLKyhSEzMy0SClWVjfxQEvMTol1C8ZmMokVCYQw89uM7VicmYsF+rQFXaIq0TplGwsAJsiUKJUlK8okwLVEobeGBrRLKOD2IM/AVJMHM6ZnRfevRSeB/HnIali4eYM/G+CKLhoRSurjwrC7tKkUC0lV2bGPgPs5fz80DVYWhMhgUQKfPjn+CUSg//TXCr34EmP/adXGfPD/CJ7tsnca2IxSutXDSii/HO+7JqRrAOzt/EI9+36Mxq6tRBt4AcEMav/CFf8SLrvlka0s7Qxo/9j2DMw9QAFDNGHgE8FH4OviOdyC//uqggQ8bAH75LYfx/ptuAgBs3h0JlD54ED++4woMCuCmbe6zQrQycFC6SjC6TiS8ZGUZgi1a9rMKdtLUA/cRDPsX3NPgNXDNUumlBGBQDZYCwH/iho/j1K0LOFsDpAQoJ3j4F/xFN3UAIGAMA2dv4p4/eAPOu3kYx6I1Fm1FU/Tma/c7gAYDmzrdosWJFqAxw6GVUJTCfA84ez+wpNvDCO2hR9bn/gSOuRZxYGHE9NK6Bhn3FNdVwsCTiBCi6ATmIVUMFIMT06yMgbc6MbVBa0FCroGvgIHXI6iaJiZ5ueG2U9dh06nrYL7KgIBLKFKgdBp4XlsJpVYxZ6BNA/fnqufnQHWNoSL0C6A7OLZJqNUIKAtC4SpZJaCdMHBHStZPYKoP1C7e2T/rXu4fN/k3J1ffQ1KTCXX5vWXNFYjROPPwTlBvE25uAXBtarz8v+zn173IrVZYRrJ2Egq1APiBt/w1zgCw8zTbRGPQuI4/OLAAuIzh8/cy1rxrJx6z60p89/45Ogs1AILpiBDZxk1QugKxAM7Gz4hN6N17T9fAfR0Nr53FpADNHkz7ZldMn/vsLZ/Ga//7dywY5BIbJGOELNWddI08KQMZ74hPcPGZm6Q1Zj7wAeRV2BjQBotdVyOaAY9ZXISQYy5zC8uifh+ka5BS2LkZ2HYE0Dt2pdvwcq3NHYQoFHPMUShBQmEaONWRXVBdJZpoogMagvIvP/g2PAplvITiSx1wsDtuBr6CUqxt2i4l4aduxSckDpjNIVLEDizOILmSMCJHpSwDh2fgKrfaaEsUis/+7M8cCgA+KIBun93X466FInDLhRrfP9sxVwZgSZ1qfx3zDJLGSyitxzAmOadBDsAxXWlia8Oxv9c1BBkoMhi2VAzkmZqX77LF3OZuuAZLV9gwPy8vmWI8fJ2mbfRNPWudpfv/+q9x5AMfRDdXmHQrv20xQAd6+3Z0TI1dW2ToK6AL0do9SBCleSKNRJ7kObq9xG9nJxGAey+LBwlrZHRsQ+VerLqMkoM0QO5JaSbRYU9eubTAttPYxJZpnNF5bbwzf4v9qt9cExrLwFsappvFxVC8qGmi5SU1w6HNeFQSn3uIhBHAhv/4aroNB9HG7xeu24cd/70pdInvVYNW9t86Hi+hEGLTWq1j+d1BP2V0PPIGBJ/PJ9igkhRj11pLH7LhePxBF75uxVGcmGPPpVEa+GjWFu+cdG13xzFCwpgODH9TGIBnSkBThioDMl0B2kALQMkclaZlGfiBmV2AMailQL8Q6DkGXsvjB3AQUCrg73/S+YP6zB/UwsCRKUjDATwdbOvc33AMLnUA4SYHSay14bghGgNpDJQxrRp4kknrSxPs3Itbf/75dugDd075+AOdrg8BANRh+6wdevs7sPcP/gCdTGGiZYInl0lqJIVgBCpkOwM3gEmyuHVyoZIw5rVUemvDaoj/8z6NB13nigV5ecCYAATGFRmqWfaVMkDun4dcweh4QyoG4GRqbJ2Zx6zLvEoy0sJNcMvSxdT5KIyBqDWWGIBXPiZ9cRGiAeAh+qXZjgp2VUC1BimBI9MC3z9HYPK6tOYDT59vPhbfu2knFnZ3QVUFrQ3e/bk34oev+vLIcdqMs7DEiel00R0vfyWOPDm2MWvWPQ49RZNEHraqWZqx2x7Z7vbNCkaxdGu/bFct9GUlDDyRCsaYbpFQ/IT0t1+4EQfn7T0mKGgqEgYuGhKKpgylAoq6AmkDLQEpFSpt3d5NBu4TVTpepVLWielXboMCo51ulrN9VwMffzlQlyACainChKOHXELhUVZuUHlmAZytvgBA+pDcFtxpRvAsdgHpolakGY1CGfm90ZBGQ5JujULhxKBZD4eMAblJSbRIKOF33s9g0sF0MolJBuAH1wvIyUmY/dbPUytGDjsSGBNGyJ3pxujkRTQtDPwen4k5rIa46DbC1gONO6prxsDt6WgmoUiKDBxFF1THG6KZE1HqGqfOzuOWU53zhl3x4DB1Hg2zNArgALDAAPyI08PN4uJILKnXaGULgG9/xjMx/7nPhd/MTQBqvhmFwiWU9MmY9VJTPYAxBpuG85heOAIaLkJ/64Mjx+P79EDDnZioaxzmGvz8PCbLPt7/yd9H79oo7QiisFJJsJEzcF8CwOuCTKuWQUKhEHHUVsxqbFA7u18fufUL+Oer/7l1s29uP4zv3HYk7ajid6FrDCqNN33mBmzfb1cLBhKamgycA7iEQYYyB3JdQhiCkYBShQVw2RKFUqcArhXQj/WxUKllJqo2+9pbge/8C3DVBwESqCXCeM2QySZJnXx3vbMMEizip6GBe+b43f3fxf6l/W78DQDvRMCUZM8naL8twyWjoVAiE/1WAK/ZSmiiEcllFhYAV6ZZNeCLvxc+R8M0HCbaECbKEv0C2Psj98Jf/GwOdcpmIAA4IfORyoUaq4GbZiYme/52H5nHN24+lIzpHp+JOSz7yMzostoycOccc57/BJiJSQOdiYSBg0khGw7PIdcGt5xm/+YMPOjtfqJolIn1BXAGhQhMbc4xedPvY7FMAV8PBjj4jr+HXGpf6pv5+TAZLfSAbGG8E3M0CsVFqNTDAMLSaBx80+/hhhf8Aaprv9X8hT/hsD+J+LJTXaNqgN1Fh2/B+nIJ2/4zJjaRYVEofLe8wl9Yyfgxxu9kFcHfhxu2hxGyF4e/Fey/v3PoOnx5Z/uq442fug5/9bkbR2p52F1XrMiVu9dQqE0nYeCyEQeuTYZhbhk4HAMXUqHUBoRRCcX3piw8A5eAzuNGVXZsAK633AdHpAS+/2HLwEV8DqlkK6CkDZhtRyJcDLtn/xNLhJv/1zOw9YiVFLzT+gWXvgA/9fGfGt0PgKWuQOZ6zQoXI+Av0cH1o+MlYyDFIvJiN87YfVPQtMPQGIPd0qhlZebngb5vENEAVzauULyukTdQG8JkVeH7Zytc96qnYfsWA9ntgXyTF0Uo/EKyo8bGgSfPoamT5+/yH+zHn33KRv/4SLB7vIRSukIzoslmtA4vm++UooepBh4AvJgAMQAXrOHCpoM2Ffg2x8DLqsbcIO0kEnThBoBL9+DwynWHph2Tr+uRFPyZD3wAB97yFlz4qZvHnq9vTjHfEyj6VVq3usWJScZg9hOfCA+uqasAwsJo7Pjc5QCAW69t7wHpH36vX4bCPsaMFGPq+JomXIMcw8CT+Gyfgenb4WkuocTfegY24vyzO2n7z0S7VSbWHm9apQ1qbRLnahgri3P3MgdBjgC4aDgxa+QY5kBeWYevkQCEQlmbVidm5WuGu7+1BAQH8GNk4J9dvBVPPut0LG3/MnwtEs/AiTFcaoQRkgSQpQC+6QhheOON2HbEpqvzqKM5V8aiKe8sdhBaA0qCDZ10J31w3eh4SddQxtZr+b1P/iV2vTqt90JsZbZlJr14en4ewstCTb2eXzP+HrDnt9YaE2WNfkeho1y2bJ4BLjSxVkDmfiu62dhMzKThi9YNCU+jchNHNnMY7/n0H6O7b9fIflbDThoA97Wzm2AIY8KS1DNw3vuvU0UNXEiF9feLOkfG9MFJF5rkmfMNe+bwZ5faWTS8gLqdgYd4cHY1v/AgB+BlNbKE5k2D9ejz4fblYtqn7Hj1bKQiaaVEa/3vXondv/0abLjVnruuhgH0pTGhO1Dd4rwD4sMfAJxHyDQK8Pd8lhvTIBMJhctPjAF5MKhDMwUG4F5CAVC5zNOjlZNNGDg7ZmZoLIBrQ9CGWnVyXVdxN6F0rEKFTrKsaNPAB7lA4So3aglAquDElJSOtWo4WWsFZCzWrsowXipqsQPVAvpSYhYASKCSIj5XyVK/wcAFgn/GA7gHL38vWzMxm07MbnzHpAEgYrWBg+tGH3Djolg86C98KV0t8ezJU2dtYtBNv/UsO565uVgkrjm25PycBDmcBc3EaoZmMMBEWaMsCB1f1z1TwMBXmqQouXYzLLQ0hRCGEg0cWmPIt6M6XPZN3/pvnNY/gjO/+J8j+1kNO2kAvHbLrCaAG2NTvQ2A2gM4Kwv58v8y+PN/cvqcVNjy1PvgXi/eAADIWebbpqHVrPqFixGHwcySBb0mA286MZWviSKBm88UuOICgb0u8YOqagSIeBLAsECraXdnRMe9SAzARU3YPJdqjB5wff0VXZXhRRBGQzjWlDdiyuMBUwbOr2FTAvBJEhzAiRDrgTNLGtR66cQzcPaiBtZDQOUSl1o18KRdVfy4Yi/Qr37S4AkfTQsTxZ8TiIDJpdHmu6Rrlvzk9icVBigaKaIsCkVK1JRbDbzWARghpNXAnZg8uOqq8NzoRhSElkCeMZZ4jAzcr2wGbpap8jySCVYHH7VGuXOXTYpxIY7CMXAvTXr914eEtmUQtjkx8xpuFQaQoMB62iQUYwyUiQDenBA4A1+/ZAG8f+q0/e3CQgTwxjVqK7NQVQPQX1wUjz07h4lSQxYligM32M/yLLwflYo+M9HJ2zMxqRFdpevk2JI9Rz4yThxHc+aV2AkBuBBigxDi34UQ1wkhrhVCPHK1Bta0yskiIx59rUFGw0igcg6LZhyw7y6tlILYfD6yoX25e8xB0neIOXSZmoIoMMbw7vrQshEJJTLwf3vBBN74MzIy2aoa0e15uczhGI/9kfIIttU1pHQv/cxM+O4+VyziL9+tbUpvkCPcJOUmkzd+8vt40yevcZ/p0A3nhtkbsFAuYKFcABHh0Hveg/rIkfBShnEvxs4sshGr2yahCCIInyXLN2cPdjFf4oN/WuPM7e468mgDBuB11cevfFLjVR9v6JcSabhgkr4cPz9tBti6q70IkyGCJgrdx7kR1UwD9/dIYkAFL0AIyTIxMyWgnYRS6BpC04iEAgC3/NxzMPPhjzT27cYuCTlj4OUxMnBNBqcfIgzm7cNUKQVDhf8ynp/W+METn4hbn/tcO9FIjERIefDydW3qVgCP468UMMwEJIDf/YDB5nmApJdQKEiJyXidhFK0L5KSEg2AJdPl0i32u7k5ZL7GUPMStdQyp7pOyLI8dACKgLogdJxvirJ4P4dZnMREJ2+NA5dNDVzXabAKxVovHsCbk9Rq2Yky8L8G8Ckiui+ABwG49sSH1G6+Q8pIcocxQK2hJVCTS1+u2i+WlArYcDaEWYQRhB5byWbufQ4ADoI2aXQGxjox/c0idKEAIdqlCD9kVuBpXMjVIpX4/w4dARX24HomMvDOksbE0EoM4XJ4AHenfu2uw1C+sJIxyB1ALvZn8fqvvh6/9z+/h/KWW7D/z96IhS98IVQfDONmy86sEQngJRTdZOBHiULZ6FKXf/jrPkQxXgfuBCsXZ/GEK0eBo1ZINXBD2PfGP0f/6qst8LOnWbVENwBMQmmRBoyuw+5Fg4EnL6iKNy1TAjV5J6aJGri0DNx4sCeCWbQyYLNHZiYAwRh4pcQxAfjGKw/iLe/UoP/aaH8vCDVZfVe406hlZM7DG2+KEopsfwC9hOKZpDAUfCFcfqqy+Aw/eLv73ksoEpiZGt231hpyGQDnVSEBu0IZKJe8892PRwBfTkJxlu85hLnbeuHviR22LK0uCIWXybI4ie0v4iSm8xx6RQycrbwACK3Dc6Q9A19Bk5HjseMGcCHEegCPBfAPAEBEJRHNrNK4RqwatksoZAxIWwbuJZRxMbRSSmDqNAhhKxP22HOSVwLDjEkXRDCuiUQsnDVGAw/1I2AbHINJEc2kH6QMvFIjXwOwoVgPKEuQl1AYA/cMl0szTQYuSYe4bGl0APDBYB4H+gdwsH8wNKKlqgrL1hC/zp63ZlncXmCvTOtOnJj283LHDpz57dhxxsdee42cA0EioXz5stZrUitgUJdQU87D31/C4X/6Jyx84YsQoGQyHAfgxunRpmW5bXjDCp9AohQGyCHYrCQZa82lRG0K68SsdWTgAKqG78ATC9FgY4Uk6B5j4DmOCcDzGe/gt89eX2hosrnxSls/S62Q9FoVztko83YA9xKK18Df+yaN3/yYGxMbf6laSIh3YkpgZmIUAG0iT/oZj0RpMnCtgMrRYv39zyAv0+eI77dp675+HfZ/J+o4D/jO39rjFYTO9z5g/5sRkZpJKEaqWELYfy8dQeGJOw4jwjvPneEBwI8hLPQY7EQY+HkADgD4JyHEd4QQ7xZCjHSQE0L8shDiciHE5QcOHDjug/mO2qOV3SLrqXxpl5bsLgBQUgHTWwFYAO8ynC/KyL4By8BrQxhW/Vhm1UsoIxq48T8KceYhm6ulpROtgIFrKaz0st668bkG7h8eyRm4e3g9gOeokXkGTjH1uT9YRKlLDPWQAXgdnHY6SD9cn07H5iWU5DoTQSJl4Dt+5VdRLLFOOSKOG0ilhOBoJkDfsL31mtQK2FnOoXfGe+3+luy1NYM+hEknw2UZuJucm2YMr+DoolBENsLAOWuVUkCLHIMcyGsDaBNCz8rahGbBQGTAorEq68Bg8XSNN/6MxD8+SWJmEiMRFstaAxxKQaj658WvpSMmTSemjGGETZNMQiGyoXWPvI5c6Yr4QFTZaPVBzsCX2rKTq2oEeKo9sTNRM8RTS6CiAURmYCqJ3K3WVsLAR2zehcfmhI7X+ZlTWivgz35W4QsPFBj0OjCNOPBaeQbOa6HYTEz/zgutA4B7Bj6uiuaJ2okAeAbgoQDeTkQPAbAI4LXNjYjonUT0cCJ6+JYtW477YGbYLqEQmeD5jwA+5uWFAKYcgDech5mxzMcvgyQRjCEM+geZhOKWlYsNCcUzcAmQo/DLMXDD6C0HnRf8fwr9aTswI4BdFzwfanoaWjQZuD0el1BCJ5jghKqDpCHZwzMYLqEyVQrgdazoGMMIxzcUmHAdb0QC4IBoaJDNlVAAcP+zEOnBdEdCUvuZmw/TFFIDIGgXzUP9ASSlDDyr2wHQSiiNJbCPmeblcv33KsOQ8kQXEs1ltShcIg9B6riU5k5Mv39/jhz0eoJQgHDFvSU+9XBpAfBYALzxvBsBVEsXxL89gDcmXAhAZDnaTHkN11DiiF78+tdZ1JeTUJqrSAEIQRCSsHsz8IkfTq+XaYnsqPfsQbV3L5Yuv3zEh6UlYPQQKifoUsbM6gaAr8TxWw5d1I0gFH6VIeL7WEvg5m0C73iaQmVGGbiWDoOSMMIaoLh6h2G+FPes3BWdmDsB7CSib7i//x0W0G8X85770bRkY6NQBFDCofIYBn7zoT4wdSoAoMpHX5BhhuC0sBo4oVw6xBodLC+hQAgosm9mAPA2Bt7QEMPxc0A7h4qWwK7zno2u6mCxlwK4Z2eKAFZX147FDUWRDgCuGKMZlH1UpkKpS9SHPYBXQQMPEsoy1fAmKw/g/IWJEoqfZPPTT09+Zxrf+1jsMosPoiCAFtIVjrda8QncwCx6Bj6w0kvCwNsB0Lji+zzT1t8DY3TEBHc9RYhCYTtpdEMn2cHA1abOBlWQUMoGgO88Yp3nwojEed0VBpLFoJI4xiV3g3lOqy5MvSlMTEY65siB01igl2MAPIQRGkpKNwyvvyE8v4engdmJNgmFICQghQ2jfO8TVNLdvbWZxsICbnrST+DW57+glYHregCZG9QDBlnNiLQV6MyLbpmtJKHjWbJgHYDYra21GolC0U5C4aG8RttcCf9bYTTLJ3Cf3dU0cCLaC2CHEOI+7qMnALhmVUbVYmachGIsAzcSqFwij9DtL29ZG6AzDeQTqFue22HOANxFKwz7DMDrGIWSn302bnAV31QAcEC4HlwkbTYcOQb+T0+UeNvTZHIuQKPwjxDQmatBIQGDDB2ZY6EL6DkWRuiuAZdQmiFUknSQUCZZ559B1UelUwZuO883olCWqUc95eK0k+gUQpBQvDTeBPCgK/ufuevJgVcAoMYKx1ut2AQuNPRS7DwuGgw8bwC4NoTFYY26xYkZztkwBu71fJmNALhoArhj4ACQ9yumgacAPrtoQ1UFpXJdRxhUzukIWGA9JgbeeN43ZBMAqZhOLxzwlGn5XxKAUGMA3N3EEYev0UED/8efkHjzT6sguwVzGrhgbItHc7QGGdQ14FZsptEZR0ugrIdQBaHu8+SxdBcrAfCqtBclk4yBI5IV/j4Oa5VIYICVWGTDiWkZOIXrIIxhvhTv97jrMXAAeAWAfxVCfA/AgwH8yQmPaIz5rjttiTzQNqusouUBPM8y62mcOjWpWeyXvBzAASuhlOV8qGfsowfM0hLUxg14689l6BeM7QlAUNyxlpGBl0wrXFyMYNys3FY7zU1LgChDVxVY6iDpCehf7okhUPgIkcYSLSMdolDWDWKnkWE5RGlKlLpMNHDtWHXtGAcNxjPwdbXd32IZgVYQKyfrhiQnU5eIZ5VeQvEaOAdeQcD2/T9oPS5n4Ao1jEu+Mv0BhEmvZVNC+efLbsGT3vxlJwlQcr28dmlYz88gBykL4ByAZEM3FrJjS6oCyMvYBMBGoYxKKNKkEkoXhJKiWGybQMTxH3n/B8K5tlmTrQspQaTCc+01cM7Afc2WsQw8tDCkUP7XnoOBdkA7NyEwOykgG3GyJASEBG8dmqSkmxYAT7JEG2CnJVDq0jLwPkseazLwFYTqGeejymTUwGtifho2zn4lRxi4kaMAbrOV43MkjI7hl77mzO0koZxQQwci+i6Ah6/OUJa30OJqGSemcQy8NQEEQObilmlqK0hER9lSB5gaAMNcpBIKEYbVUshS8y+KWVyEnJiAFhb8owYuAFb9rFYAeZCRcaKYX5qBf12bxe81A/CaMnRVB0sdAc1aSnkG/lfvsgPb3/9rmNm5ZD8KMQplmgE4tMFStYTa1KiPHLbXo66DRBWkn2UY+IRn4BwkmQYewKfx0PqJNdzDMQA+MebQmpUqyESF33zPZXgDgD2HbwFACRNsNoPYOzvA3rkB1vVyG4nCXsBwzqaGrmp86D//Dxa22tAzITMMqcnAU96TqSww6rxEZOA1gTiK1XEFUjLc7ArCYeoCsJMoIX3O977hDRhc/X1s+8M/HHNhGoRFKAByhIHnJZdQXJboOA081MCnNCrEaNSln+zd4Rq6ZiXsjeKfJ8XAWoC23BVTzWk4qoGXpoTMCHrIZ4XlJZQyGw1V9GpJJhiAo31FPNQS1OC4/hnkgQjBickYeFjJ+UYlKyzpfKx20nTkoXJMgSNjLJsQCGxHjWHg/pqW3VMABuCLXQvgZR5XZd6JWdaDCAaGSSibNsGAUgAXAkTxhdAKgTlpyR5iVoWwufwMYCIBA4Wu6qLfAWoO4I0H99Db3wG15ZTkM0k6OKImquiQzGtgqbbMmTsxtY/tdmyKWnoJevP1lHmnFcEklFj8K31oZUNCCQycSygOwBc7aTNcA6fZut9mog59D3cd3I4OGgzcWEYmXaahIYIhQGsnobDJJUTeaA0zcwRT9QBTO+01U14DZ2AkG7HTmcgDgCsTScDQFbMKVtcgYyCQNj3owqCkCQQAb0keGd7UvioBWvRyqQCSgU1qac8xYeBkWbG/Pk3zqzdtCJo3gqg16so/K/5w3Blj38POdN2QUAQQMnBHwWx4bWz9Ro3iVloClakgc5Mcp5nIwwHcwFZ45AA+yGMBsYI5MevD1wGOUvFnaFBmIQ7cAPjsQwU2lAYPul40WgtaJyYH8Cdf/2XMf05FAB9T2uFE7aRIpf/+rlnMzFvQadPAhdPAtVunyTGTXe1Od27Lw5KXxPey5E5MwC4fKz2MqbWegS8tQfZ60LBAq5gTEyYCeK1iGKFmDJwvF0cAnL10hhS6WQdLBWwVNmdt+miTtXAGzi1nk9v8/l1hPF5C8UtGy8DbJ8LCF+rhuydiDNx9ZDS0FEH79xq4agJ4CwOfaQSkGhmXr/b8KnRd5Eynts9FczXDOzN5jCu11Sd5Mk0I+TRmxEEtstwCOLdG9mKmVKJpRwaeauBCm8A++Vg70qDGdPi7DcD14cP4xs2H8Jefub7lyyaAS6uBMyemloBkAC5rJ9Vk7bUcuAbOW82R0aGaop8gsgYDJylw2kPncNZjjrDP2AYtDHz4AzZBDdIlmFYCpalHy04sw8CHRSqHAHal7fHjsNiAy5/+eQAuccofi0sotQz3r1bAPzxZYdD1YYRcA9c2byTkkGi85Dsfxc5ff0VMsLudGPhJAeB/+ZnrsfewL2YFJFMvkVsOIlQjHMfAfdDETfd6ERZldBotuVZonIELItSaUDEGHjTwQR+y10Mt7HE5gBsmoVQyhhFyCYVWwsAFoJGhm/XQ7wDEY89bALxuNEhWjIFz46BbBQmlCvqhr4JIZQWZtV/Htn2BAF6NkIgAbdCfyrBnkz1xOSKhmOScAcucu9VoBp8RKQPPRR0yQjsVWjvBVCwCyGvbpXbNnnkcL5NQRgBcKVRIy4o2Y6czqTBkHdJ96FilDQx/xbQOk5Zh17YHwia9NTnXptUzM/i5d34db/3CTSPfjfh8vITiAVy4yY8lZOWla/eWR1TkT4v0zzoRKg64gwVUTl7zYKeaGjiAfrYu/YwrHy1hhHo+SoC6EXqrBTAkjX/dlD4UC0bj0e97NA72D9rtmPNzmI8C+DC+8iCh0JebAMQVYC0BXjNhsRSBgUvG0UYkFGMAstevlkgzbf2kck8G8E6mWFo4kDBDJ6GQRGi4ME4Drxy1ObQ4TJhRYODMiSlh3MMbGbiXAKg/gOh1LQNvALg28YWoVYyn5hKKYEtSwx7+juqgcn8bBVRaoJP1sNQBsLCEa+97P8xdeil0W4hcY1mqSCOjUabjl5RZTUFrNmUZJJSaAbho7WkWjQM4q18EaedU29tTigAMzQxS0jUM0klsyr27M5OjziOSCP1JJaogoRSVi8hpToYDzsDd8p1cdiEvssUklGapYCVzACJl0g0JpWgwcO7ETH5XtwP4BDQquRmZjx1uAXDDE7ma1ogDH2hYJyZfzclYshewzm8SAtfuj5McXxX4ybg2FJyWAEDXfwa6AeBZc1ksgPc+8pN4wODdcfwMaaoWeY4YaOtG6K2WQCUE+p30wiyRwVw5hy/u+KLdBwPJQQuAc9mKkGFY2Q0CgDcJgClCkk+IRBPUUg/cMnA4ktFl7/fBI9+3+6rjamQ17aQA8G4uQ0icMkiSKsgY+KwyLdLSmE2rCPjObUdwaKFMWE6fAbj/fO/kIcx1PhWKaAEIjNEMBpDdnnViyjhhCCGgdXyTKxUZeMiGQxrOxTs+9bIeKoeCRhAqEuhmk8mDO/PvHx6piQ6MRudIGBQtupu/NtPstI587b9x6Fdeb4/rJZSqPioDz5PdxzhwkANM7Wtjp2MME6z7vq1oflNCIWH/FzRwWYeMUM/Am514q0EfRIRv33YkbcZMSBhRqJ1NejRJy9fJYNEIzSiUTIlWAC81xVoo7nz9cYmBRQGgzKbxsZ178PzZuVYAb5oZDnHTk34Cc5/+zMiKbN9CBVB0YpJn4Iz5FkOCEYR//iYrdcDG5KNQjCHUnIGXgxGHd9EoV0kCmJpajwXY2sxPP//pSV3tNg2cR9mMMHAFlCLtWrTk3BJnHCSs+5dLQZQ6WwdFw3GKFKCNyDCoDDqyQNmbSL73E6mmPDihQ2SVsB2WkpLOWgMUr/NUn3Waus05Z814n9KJ2EkC4CpUR1MNBk7MiamdT7atmzkAHF7S+Km3fQ1fvuFA8pL4mPAyEwEEBAGLk/+JmmUkSkNWv65ryBYGTkKgppSBhw7aIk4OPCbUKMJnHyzwlfsLdLNuAHCSQGWAbj5hGbgztWFDYKHLmSKNvIWBe9DlAK72HIzj8S99WSeg1H4M9gchVCO0DNylXfPzdtcpOD+NzaBtA6yZqQYD9wDuo1CaGjiN7qce9vHt247gp9/2NVy9KzJYY1IN3DN3rTVoMc0C9ZmKxCJPZEMD37a+lwK4G0czjFAwCQV8chQ5RFbgnLrGqw/PtEooAPD/XfE+XPox2/yguu02VDt2oP/tK0YkFNtGTI5o4AkDHxKMFCF3AmgAOItCqZk0YbKJ6MT0l6RH+KtnxetDQmDTpH0P/u0JX8Gf/OifpFE8bXIC753qNPDakxkJlEKEUE3AArQwNhLr7A9ehnr/ftsZx1mbhGKYVq9FgaVSo8g6KIuOO579Lg8AXoQJ3O9K+P/mz4/RoQ66kcA0C8E9d8ZKQ+qeLaFIZIY5wBgFvfBjO3HOLTVIIoT8tLbiQoxS2T3TT1NkeYxqCCO0plkEhzAmFt3pdmFc66rA+IVEpdsB/OGdTXily6bk0QCkgHf9pMJbn6HQm92NyqX1krAA0M0nsMSYh1q/fuwExU0ag7zBwPus0tr0UvskEF5ibXDTxMqDlARFhi0CA7dOzCBLNbXaY2DgRjgJxcswLAqlqP1z0dj9oI+5gb0G/l/A6eFcQnHHH5RV6muAl1CwLAP/u+c9tF1CaToxa1ZHhM1+RF1kTouWaJ/QAOCJO66w4zeE8rbbAADlzl2xfZg/PxeFEnwuwk5SqorbFaX9XIMDeDwwLyfLma3Oe6Euj2esPSJcdj+JmQl/ogIThf1yUBsbnSXT67Cc+RwEL3nUEpiTEgNGZAYFcN+d8XyqXbuSPqdVG4DzLEuRoV/W6KgOhll0VAJg8eE5RNbQVTwVb8SB+8QoI4DpfpzwznIAXujxeRUnYicFgHdzFRxy0gBgzNJXyiMhUDsJZRzAeYDvZDJhOZ51KucMBeJ9qnljA23iUq9rnybDWCGERGniU2ajUOzve0Jiwjv5qtHlOwD0dIXK1f800maOdvOpIPEAgFy/bqTBQptJaOSNKJQyj5PNOqcU1CMsJV4Y7phbiQlEAOcMPIRmNu+L9gx89IRGnJhOirlgL/DqD2soUbOqiEC3xAiA18N+KIdaMp1Yj2Hg/WEJNBpWhzBEt5Q2wEgmZpHJRH7zYFU2nJiCSSg8+UWjAyos+onR0xgxbQzKW24FYIFrpMmJZ+B+NeU1cDaBFpUDcBHPxSQSSnRiJgBOCuILX8NNW6PzvxdqX/sfAz0P4O5ZTybpo5QJ8BFVocSBBPZmWSKh9AtggmFitWtXkoJftwC4JydGAFAdLJUaHdWxK29EAH/y4hJ+7cgMaupC5U0Ad/+ORKHY77QEphiAezI5koC4SnZSAHgnj07MzABKjOpJvQGBnLCYjQNw9xL6Vlfhc/fCKcOjUOy/miW0SEMhMYc6rvtPcgUltI5oq6UIN1rKSOIk71PIXuQuEUrvUJPAsDbodqawxDRw4Vp0Hc0kEbKG7lYWFCSUdW4eGmG6jIWVR5FQvPn6EH7ZLQi4+A2fwdKgtAx7DAMnYwKzblrTiek1cAD44RsIypTo1vHejANw77wsm518eC2LwMBrYD51FmYqZeBGAko0XmoA56+7f5C6UidmqoF7CYXvokYPZWdz+PuoAF7XgYFXO3eOSCjaNzZxh/ZRKE0j6cHe/S5jq4xQCwWJE7PccRjy5h344oPiDnu+ql9g/ALdzAO4CccK53e0tHLn5OQMvBIi1JvxRbS4Vbt2JWGEdU4tDFyE/UF0sFRpFKrA0Etobvvzyhovm5lDTRlUnr4E0t0dHntPZCAQGXi3GgWgcaHNJ2onBYB3c5kwcEWjAL75iGVJy83tng1V3rnmzOubykSQuHAXYethQl3GaV4YCpIIdSIDj6ZQsZRo7jQRgiDdrJCUOmXb9EwsSQlhWWOnmE4YOJXliiQUhVENvCpsHPjL/kvjJZ+xO5kdibeOJ9T0yo+zWgG8FoqfYPYeWQzaNdBg4MbYjLUxEsoFqtGpnO0HALpUxrK2sJM2NaBPDwchfLBKAJwSx59/sQdlBcE6EQEILccogBNsY5CG/f7D3oGBY4iBgdepE1OyOHByxdRqCQxpElVnIzvoyO7T8yprlLdaBm4WFtBbTB8IAwUlWWd6mUY7eSOIZHx88pZkkE1djc8ffGvCwOt99vrccEbcthfah/kfC3Rdje3AwLlk2ewU37z/DQD3+20LNgg/2bEjSaU3WfzdpQ8T+NpbngXj2HStACEL9B0DH3pg94k4jsZVyJA1E50CGeFRKCbEYIbkKQHMxT4SY6tjnqidFABuwwidA0zbJI6m5bUFaP+itWEcB3D+QM1P2s9nJqNe+0M3Ev7m73XSv1DqyMBN4ZbWiX4uUTsAlyy1FrAMXLljpgw8btNjNYW9hNIrphMnpinLlUkoxiBrTHR1bhn4/W+1O1jojtZyTgB8hU9HlQkIihmiQSasdcKckwYU9RC+dnab5vvHcweTv01ju44pgwYe9tlcMg8HASsqd83/JHsXXoP3JKVv/e+GVQU0nJh5AHDh/m0H8EyKoNGSBL63cwYf/vbOEQklJIA4QNUSWBKTGBTHAuAlqttuC7VmNhwxYeUG2HyIQslk0mmyUT/OmjkxOYALo9E76724fvHzaXGpejR2v9tg4EJY2RMA+h7A+b4bYY/NlZ4cusJqjIEDCBOkLfsc93d4CvjqFR9NqnzqPJb1ne8JTG0+LYyhVoAUXSyVtWXg/jjunCr/nmYdqAaA+2uUsVUEaRMkFI8H8z2sqLzxidpJAeBNBp63MHAAMKQigLecWQRwSsDgqgsLvOWZEp/8ITECJpol3XAGbpzGlzABkaE0FsB7DQAXIEhln0Be6tQ0GHg4vrDL/k5nOnFiUlWNpNK3mSQzcp0os1mOpziVoKhTxxWApIVU20vfZnWGBMC9DkW1bkgo7DeDOauBtyzvjaDR7D6MAvhEPYTm2zUrxw0GIXywcgTgedkX8WJ5aaphesZc1RjOpxNH5jMVvYQiXGOQhikpQqYgSeCj37HhY+un4opMaBMr8flluwL6cgJCRhQTR5mh67KCnp1F9yLbrFdSCoJaZMiY89hIjMTIA3ZSMkzL4SBbEQsv5GGEDnz5s9Hz7dfC6lEEAA/d2tmtaUaheAD1GrdwDFxnKbP3USjDPN3f3o3AlhlKJ5osrgRrBazvbkwAHKqLa/fMY2kgsFum7QRvlGfZXRSdkaxbT7hy3qWKtB2OYJPGRDrJKZPGqa+WnRwAzhi4BJCb0WpH739mB4SUdTTN65FlI7xLQeJrF9nKY83fbfi+zVa0abgUnJg+9DABcKlQGbtuSuQQAGLuNsgwezMHVsJkTAyQFMCw1lD5JDSrXT5Yml+hhGKgmIRSS0AowpmH4k0vaoAaD6hudCdZiWklANZSzb84pOskfFIx2aJenIfQBloB1ADrMseIzt+MVunoEr16iKUexpoZLEI7oK4ay3Y+CXowKssa5eJMsp30AC4igDedmICNBS+dRktKYLZf4YwNPdx32/p4TG1CCJ5wjppa2pA2JVf+KlJVwvT7yFiDFL6SMlC261DDiTmyH5Fq4IZnk1J05pZVKmcBDQA3KQOHlExC8Ro4Y+BcfkBkqh7ApSu6pRvM2DPwYYYEwHdvFtgyC5T9OGbKTAxEUEC/nAhkpVaAUl3cdngJ1+0uA4D7czoibVkDmRUjTZ9NyztMtnluwsAXO6MEiMrVj0Q5KQC8wxg4ADxy1w3J91deKHDbWXkiobRmswmvTaYSimIlYJvc5z5fmcF/XyxwyzbnxHQMfFEOR44jhMKQuhBE6JJJZ2AByMqGfvBEI854u8SiYNw4kXXRAfC+52/GMAO+u/vyFTkxRYOB1wqQLT8sG+t13l5qJRKKgXUWCaROTMA+2Bw4+HnXi7PIBhqDYvReVUXiGrDHaWjgualQmDpp2TVSu3nQDxKKx+vBTIbhbJZGoQTNWsMszif78BqoB6BxEooSIrJgKTDXr7Gulycx41IbVM7x6rNcawVoWUDxa30UCeXIwVnAGMz24v3kAK5FjpqtMm0YYYsGLkUShcK7s2c8q7EcLWXL76t2kVc8CqUpoSQ96XR67T3QeQBXQ5+tmh5LK4FSudUG292uzbb94ODW7eGzhc0RwCsFXPK1wygR/Q5S2Zl/sP+pLBPTO0mdozIrRlZbnsUXXAZ15WQJLCS1EKMRXoPRifBE7aQAcM7AAeDlV3wp+b6WAIyAFFlS/6Fpnm3YBAv/GaDc+vKxdBp+9YEvG/ndty6yNZ6FIRjXh3EesUysN6FyVMjxG0dm8bSFpYYGbqAeNbpv7vnvNcIYh7UBsg66ZHDF+YQD6wFU9criwMkkqfRNAF/oAp98uAj1v8N4OAOX7dcx2V7ZpbglIG6V5A5T1IvIqc8YePxd3Z9H1q9tnZdmCnM++mByJg9YBq5Ipw7eBoAbFkbobfunTsXNl54KXgjJT1q1roF+molZ5O4ADAzHSSiVB3AhMDeosK6bJXVThKbAwJXMLPuWgJY5ZHIflr/ob/ywjQf/8L5Ph88SCQUKtYm9OY0Yvcb+XDgDJzaLTOnoCxi2ADhnl0tmOvlMSIlcSesXCGGEYxi4xCiAOwZumJ8AAJ6ysIhB4SWUuL/H/Ohz7XbbrWP3Nb+gcORsk0gos/2JQJa0AlRmAZzKLXhIZ1PYDgBqL/llHUg3we3ZCNxvWGKju6h5FeUSIq+BR8fxsBgNArjHMnAbBz6edtqZTiHL8qj7tbwDmjkxwZxSC2QL72wrzsIvXfwrI7/dv8llsmkKDRpe9e0/HDmOkDmGKPDS2Tk8cDhMAXzdNsjzf2xkTNxx1KP4UEgSDsC76BJhXg9RZTYRZ0VOTKKkGmGtInuYmQR+8VUZ3vMklQA2AGj2Ems1HsBDswDFaqg3GPjp1W0wgkJlu2TlsTiPbKDR744y8Log7JeN/qkNBl7oCpkxWOyyZX9jP8Q08Ka1MXAyBopl0RkBKMegiUko7U5MidpPxgqY61dY38uhGIBLJqFIpaAkYTNpGFkgkwJ9n8Xbcs05mytnrBNjlslHnIHXcDXP/TMuRauEAoFQAA5IGTgnCWW1PIAvOgDnEgpg31svoSSJUAzApYwr1WFhCVXm9GUv6RQgvHB2Ds9YWES/A5t4w65RdqZtkyhvs42RjQS6hhIAXyynYxihAmQWL95kUYTPgZSBS6nwuhcpvOnnBf7xnBfgoLFdporahGvQ5sRsq8VCw1Hp90TtJAFweVQAJ1LIZRYkkDYJ5ZH3tqBQaUoYwfb6bADAzKYfhmSzqLelCQQG7iUUn3nniUAtgVzmqByjUUhnYJl3IHNGF501nUEhYoO8hNKxAG5K1BLINK1MAycTYucBv1S3B7v2rHiCIwychZXVY7RTIAKGVjYcjXgceEiVt/vP3V3hDFwvLSD3EkrjGHUh8NzJd+Oas1iIW0MDL0wNSQaLzMHbvG9mOIiF9ZvGNXD3Yl8ktmNqKdVnM5VKKEYASjRCdwAoJYKWK43AXL+yEgrL5JucrzDziy+32+c5lCR0hYGRBZQQmIWL6Wx5djnDLlyRrsVujLYaJgw8jZCyNTpaJBSRhhFyAOckoWph4Dz5ak5vsMfz5MPtpptLDOpRCSWpXy5ivHYt7TX0AO6VzY2k8duHZzBhCHs2CuzbaPMhvE1+488w1wOKHQfDOCYoSigkCUtVN0zUtQQW2Iw36d7LMI4QhVJACoUfnC6wMCFQ/ehr0JdWs+tULM7c2J6YBIQ+pIM8ff/3bpEjTvbVsJMCwDuZWjaTyQO4VNmyGvh5W2LNZf9ACQDkmE+hCsgWZ5KCZTDSIBSn8vffP5e1ApSw4tznt74Uf1X9bKqB5x2oopvsd7EDLLGElS6TUKQHcCHQI4EatudjVq8MwAVMSIcG7DXqzdpz++758ZgcsAEkUQnLMXCvG2oJQFjxxDNwjxWGJBYygTNdFEOigfcXkQ8MBp02Bi4wqAz+8PkTeLOrsTGigesayhgs8Ap1TQmlHMbehA3jTkzv3KbaJA0ASABF6FgTV2xKtTFwERh4UQGzLQycm1KZ69wOkCogpcAl9ZPtMVoe3qQF29A666bXnxKAfcikuAp5GKv/d6yEwjOK2GSTMvDRHqU9mFD06YixEkQANM7Ay1EA5wwcTEKplXVo5i7l32R+BWG/7xDhT58t8Z4nyWSSWzecx+7NQLYU/VIdEyehTAL9ykQAV8AMa4486d5Ln6dR6ifj/1YvAIpJKPZ+5JmEcfc+r5mTmFwGoIhjHRSRGOzZCLzzhZMozjpr5DqeqJ0UAL4SBm4og2IA3gY8XI8MGXIE+CYMuSwgxCigKLKOFuvE7KPMIiNT3jGigMyFgn3mlBfhKn1BsuyVWQcqj8u2a84CfuG3Mgw68aVJJRTgmj1zuORrt6AH/+AJqBVLKKMauHAnxgG8bsgB/O+ki1DDqgYDFyRCMauQxUoSC0riHAfgnIFfcdvlyIcGw85oFIoubAKIRFpRj2vcuamhyIRSwMBoDDsNh2MZOG+K4VcmVT+9FkYAuQdw5sQULZmYigF4XgGLpca6bj4SR+wty3LbN1IQjLISytv1/8KFg0vSCobOkibIrkLmpg3bArBXCQP3AB4BsNnbEfAORO5ljud1zo4KH/zTGp2SULYw8AnEtmtzegueNzsPP4dIwQC8jYGza09SRO1ZWWKQuz6v5KNinKxXkF05K6TPwjpjMN+LfxsBbK2jBk7KFeVS8T2aL+P2U66MQS4J337GJzGQP4R/0j+JTiZDxBEBKJQM70enimzb98TkuMGdmFq256Wshp0kAK7GNmkAXOMEypCp2IWkjYHzVljC3UwJBAAvZAEhRACgxQ7wOy9WUCRCKVPTH4S41Z6JkkctASUskx/WGpWZSGKsZdHF5TuiYyhGn3ANHAkDB4A/+I+r0XO3qVaOga8okYdGJJSrfrSL9zyTcGSaMfDGiqNm7HJQjMpJ3hIAd9dMugnDX7+SBLQAzqlG2+F97ftfccfAiGRgCmkBXKiURbLtOi6emleoGxlfWa5MQnEvpVlKrwUJFoXiNXBpHZBNU0KgcoCTOQa5vpdBjev6nhWucztAquOcmAIl8talNmfgEw5Qs95kYOD8+0o0GbhIolD8ttaJySSUZt0PAKcfAup6NHqix9yfB8wmvO7wEXT9BO4jNZSMNWgSBs4BXIZ3wTNwP6Ig6bjvu2GFF6PNtADWk0mkyNcePozHL1ZRQlH+3sX36JVPvDhsP1lYYlUqQLnJFLAr/0xEAM+VQOVyOTITVw5kKAC4X8ENc1Z7RQI0prvVidpJAeCdbHkGrgMDjy9LG4BnjGEktVBc8k03szOxXz5+7JES27cJK6GoGAfu2dC0iWFytQJyd/xhbUCmm0ooRRe/87HY9y88cEzY7Wa91rTznogPnlqhBi5gUiemBPrdDm66V4PtNp2YDJz6xcokFIJ0k0oaB65hVy7nMgnFCLvV2fvtRpaBp/vWHYFBbSBFOiHz7bpunxWTDvg9rZT1+o+VUHhMul8WtwC4lMriKdPAsxYJRamUgQPAut4yDLzo2J6RkgDVCaDRZrWMyS4AMOmcimpiMvFFhO1dC7hwvWRaDdBPeiRFWu62WXkPwLo+oXLH4yvKSTKhoOIRY4MAgjPbMWYlRWykwQGcN0OQae9OPhGJFgYOAAMzEQFcAlMmBfApMgBUzAj2QOrOVUvChWdsxv952v0AANOF9T0MlYDIcig31iKToXmHDTIR0Flc8nEJRTinsa81NGBRKJaB35MBPFdjS8QCcP0wcxTZ8mGESScV/sL0T0d/5/NwwboH26/cx/4GSMMZeD+wnmkTE4K0shIM4OLMTTd54FXRS0K24gPHGHg+GfbHb8yEc5pVytZRWWkqvWLp4rUCaipCqcx/Mqfh0h27kIm0XkrN5IGSpSM3rY2BNyUUIazv4ByX4pwZ+4LOTAFnH3B6Y4sGPnNGBm0IUqQ1rbkVjoFznZ4DeK0AKquxhe8EEQ5PAW97msTuLZaBTbkFki/wZSNOpMtqZBp4CwPPpEBZuG3cZ+u6OVQ+TkIprIQiAWQFpGifiPw4uBPTA3je7cUWfCwJp4aXffz+0kxMvy+CCKsPYAyALyICOAOkaTLwIQO7yUUMuSFk7sBSCoRmVSy6KWXgKkw+tUodf+SSgTyA+2cXpJIVUY5UhpPShlL6j3w2RO3ICkkAMg+T5rSaRKWAobKhwL7kRSeTCQMHkAB46sS019mXax7mccLTArcTfJ8sAJ4J9IbLaOAKMMiQZemSu2kJG+IdQiBRzz8QRePF9DfIa7HKEHR/iTFwCoBbS6BQ9uaW2gA6ZeCy00scRgGQ2ECLfCqyGAY8XRnDnJSmZSczb/PFAoyKSSlaARV1UBBBEuH+5z0V2yqDQqbp9n75DQDIl9HA/cusAEC6VPqUgfsuJT7VWmm7v4PrgLMP2E3KggJT3H4a8IpfVTh8gauNzeL6eTceAOg4bbWW8UXhk02tAOh6LAPPtA1f+9IDJYybIDcuAGVGIbachI1plkJERyfGJPJIgRvPzfGhRwtc8Xi7kls/kUNl7RKKKnoQGdmysqoTWB8wGoRiJELJUwCYqq1TMb/m/XEZz52YTsoLE4EUSWprYPMiZeBtEsqmBYQmxhzAJ4kCA5/Bejxy8FZU7hpl7iFWAjEOn50fX02TyuL9UykD9wBOIwAenwstATzm1eALSUk2ZNg/L7EKYSRbUAWU2++U6uHfHifx5QdIC+wqArgMGrjbRxYDEeIqOkooCQP30tw9nYEffM1rcOaB8ahlBFCbHFm2fBRK1ubERLw5srGMDQBOPpEHqPbsxpxzmHAGbp2Y9s0fVnYJx5eNqjOZFs93+xbsdc07k62fd500UytADgYrYuD9bACSMXqglgID6qFLhIIIprMBB7ABqqHHaF6TYwUM3JYfkC6EkAE4kQNwCg+ZMvZeHVonAlOpWBihEcC+jSKUa1VCJU5MxQZTuAQRLaN8QELgL14I/OnP2mU51fVYDbwo47nlTtfctAAsTqbhd1LYyn6JBt4SWZJLCSElPvRYhdI5ptd18+SZ45blXWx96Cy2PHAOyFIJpcnAtWxn4B3JYpEZw63QiCeXIpGfhkFCQeIwvfnIqNa9aZ5Cv1Qum00ZAwUKjsw92ByO4RlsJiVqL5fwjkacgWdZlH9ko0ysm1AsexdBQiHKktIG6ExZOcrvRhrUyGI0VJC//IQAQOXI3edTahL/9cMSN26TgEollMxLKCGkpRucl1EDd2GEHMDzyPiNBOp7MoD3Ljh92e+1FNDIkyiUtljaJAolAWvHHMYCuGXgRQ1UN9yE61wcdc/EJJZaAYVbXg0dO9zo8PMLDxR433cOpSF6LRJKXkzjUw8T+NyDBb750Hhrei72tFKArPUKMzEpae5cK2DgGHhOgFEF9tHGkYa0FWOXKm+fCO1YIpuJk2HcVyYRmk37y+odPwfXsf2wVHoPqNPkAVwm3/EwRA7gdQBcgd2nAt+5wOmqtR4P4FX0X0x147K4P8nDC13CjRAJYLRlYkopIByCHVqwq5qNEzkU6/rOLev00NtcobuhBrLOspmYRjQ0cOdU7MiYUYw8BfAik/EZFyJ50z2AGyFg2LEGLZdq03x0YiYSijHIqNFWz12jnrs+UiLWDOPdfnTKwGP4YXyuALYiEAJQOTLYukUglUprxVQIAfSbGxE18OAkZYDKgbor7YopIwKkSpyYTQYuZBEm0zDxBCemCE7MQS4CA9cSqFfCuo7DTgoA3zj5NQDA3GT7RdASqKhAzpxLbcyR1/blPQ593O04Bi5Yg1gQ4fvnuBtvVALgHWWBdug879+7V4Gr7gX86+MlZkuV1J1oc2LKfArDQuCdP6lgugqPv4/VFjuO2dcKkBorA3DTSF1XwIC66BAhB8GIHPtpI/JGpXm//AaAbBkADy+zAiBUZN3OcuFkoMbvjQAOsSgYzsClAF596Ah+mtYDsEDJa1rzCanjMvy0YgwcImR9Wgaux0ooBUuFXjfBarizcyY4CaWhgTdbqnmT7nUSEHjBj5yDU9d1IWW7hJIVMaR0emJiWSfmpx8mRhi4AdCVLJmEaeC/8cSL8Pnf+rFEQuGVBn2nJXITU2SUoxPTxgWCdp2PmgxcUgoggYF7CUWKkAkrOAPnEkrWiROwajBwV/ETSgBuldSRBWBYxrWEjddmDFwh1cC9hKKZpAFVBKmEZI7XHzyMf9l1IDn3IpPB3+H3LmURrkPAGHLTINPAB0XMsdBSQN+TAVxMrMOL/j+JS5/SjlxGAjWNSigff0T6Ukge0sW1P4cyDz5zQ7K9r5Vsw5b8ejvHTW5BsFFniYRSOH3Mh04dWN/BX/yMxPyEwBCdZLkapZJos2UEEiUknnrxNgBA4QrvVJldfq6sIw+QJZEWwAAdTBljvfaqwD7aMKKB10wDz7JlolASJ6Z0xXzi8bpS2EgPgYQdaQl8+4K407pgqyEBvGhuHsI5ezORxTR3IZIJqfAALpnkISMj1E4DH8fAO1VMxLj3aRvC50KkRaCUFLY5gmdvAmFZ3TQZJmOB5z3CZveOjwOPAL5x/XTixOTP5h8+R+KDj5GhNjYATFZDDAugCwrskmd8PurC03HWpon4dsuUgft7x2UhIA0h9bZ5HqGpccrACRIiBXDvgHeXXEkZrz+TeJK68HknMlmRlmCmjhtoZhk4AJtt3XBiWgYefycEoeZRKD7QIEgoZBm9u6daKDx7fgHnufjz2o25k8kg5/mnSKhumEx9fZ4QRsjeZl6vxQigup0iwU8YwIUQSgjxHSHEf67GgNqs35lEv5CYEO31dH2EBQdwCOBff1zhP3+ILd2ydgnlKRdvw4df9ihsnEyXuzUcoJLC7q0Ce7YIZL/3y9BK4LcPHcET53uBddRSoJP7OHAXjWE6GLiHZEhd6zRy+w4PLaO4tYjtcRRiRbfCSSi1Y6ErcWJKkzJ1LYEl6uFXZubwpv0HcdWeJeyjjShkIwqFuAZ+dCemkQLwy1XOwKV7qCUCK7bbA3s3CfzVsyT+5yIBqLRuNYDQEkzJ1CmtEgmFAbhDbRIRUGoJiNqktVDYf3MGXvC2WQLJMaUQbqkt4zjGATgL+8h9nsEYCSWfjFnBm9dPJ05MPq3XyrFk1sV+sioxzHxii/1MKRmY9GTHPbehh59MNHAPkqE8QHiGR2/25nngjFtseI6fRDwDF9Ro7+cOp9zBlEAE8DFOTGRFIDNGITnP/rYu3v0TEgfO6wQGnosCoGyEgXMkk05C4b1q7bjdPZRIolBq97x5wubHXGQytNSLAF6kcfQCloETEjY2KIBMMplv/ALrhGw1GPgrAVy7CvsZa3OuVsHUmFnMCCehZKOJPFwCSBxKjA2/4X9djIeds3FkvzXscQVJbD9H4q9f2IV5xH0BAKfXNSpMJhJKnqUSSqUjIA/J7isw1zCuOI4BxU6+kgQ6mdfmrUYX4oxXUBfeMvDIoGsF9KmLrVrjfmWFD333APZiE1Rjaeez+ABLeo7GwG2CjZdQ4ve518BFusroCOBNUxfjsvtJ/M0zFRSN3isP4JlM7ycH8JwBeHCCQiYSCrROqhFKFlbZYU5MvjKzmbh+QnAAzrqqG4GkRCw3LqF4dtesHV6v7+Elr1TIN20On52yIQVw7sQMWm+W3ogyB3JW8xsqxlN3Cl9B0eu2IgHQAOCsPAAwCuB7N9qqlY/+ho1mGpFQGgx87+l2g/KUrhtSjAPn14ETEJHnUUKRkYEbACrL8ZmHSchcBQAvZO6iUDyrBlBMJWGEAgQNFeqH+2QlHerawEah+KgUF1zggVwHBq5GJRTVCdchJJexRB5vOiOsV3biMxLQd0UnphDiTABPA/Du1RlOu81nHsDdEkcCz/kdlXiDLYBnAS3aUuolC+lKyluOKaZfkys5SVEi8JXZCiIsiokYH6oIeREzMQFgRseXdOD2tehWzv7F46/lgomAL4RExzHwTFkAr9pxo9WksYDn2UKtLAP31tcS+2kjmlnbFaJDr8NS2ZsWdUABITPbiZ5935EEYezLIn7yz8PnJATO7p0a/laIAByAhPzElYYR8he/45e7iv1eRkaoLf1L4sB5XHynis9GppZj4HBRKJGB5+OyKx0AECHoq7IRRniE+pifEMjzOFmfun5dCuDsqQjXpEH6h7l9BiOAx4qDnU6j0to4AG9IKE0NfKELXH326O+MBKYMufcifn/dAzK84lcU+uesc4cV0QfR6PzkTWRF9GFICvHq1vntnKFCBgnl4Rsehnrxwli0TgIoJhIkU8LKIm/5mRzvfbzEwoRj2J6BK+uszJWXUDyAu3+ZhBKKmfnhqyKULSgz4MB6YMv1h62DncuyGSWhm9VdlIG/BcBrsEyqvxDil4UQlwshLj9w4MC4zZa1OSd9TJOP/RUwUjAvM1BSB0Wm4o1tYeBJRAADbTHmMtRw2rMUELBp5VXtkiiIsIheDFGSQOYmGq+BVya+pJ6BL7nyp0HrY2vbI6aHjm8dxxi4klPpb1ZgkizgcQDvMwBf1Ar7aGMLA49IkePoqfQkADgA52pFIayTS0gJdZ8nh8+NBLLuhvC3IgYkbiyeCd1n40XYlFupgSSSlmwpA4+MOQQGCILQJnFiZqy0gKQIXCph4JSQACUFpIyRNrzEbNM8AyeIAA4qa8hy7qfrJ+LkPj01MTaM0D+/81PpvbAAzhzArGRs7pOHmITCH3FfmZB3rQdG6+KUWfrMhcgjaav97TKnYo6tGpWQ2LcphoFmSgQwbHa28SbzPIbjySgtahmjfTIhAwN/zpnPQ3XkkYGBGwEg6yYFgqSwDPzwBoFP/IiEfyo8UJMEEKQxoPalKhoM3DoxUw1cZnl49vdsEviXx0tMH+ijW6ZYQ8iCZCPpLhiFIoR4OoD9RHTFctsR0TuJ6OFE9PAtrAXUsdicuxDTbp6onU7mB6+VBfA8i2FnTSYONJgWB/CW4kFABPBSEAQJGFAobp8DWEBM6TUKyPOYSg8gpOgDETwXuw4IwiHjAA9WnZCsoCADgAtlX5JjZeCZjvHDtQIWGYAvaYV9tCE4GPfbwI8EwAsabTHnLSRcCJu91pRQui7Dk6RIZQQBZN31cZzMQRz8Ce7O/vqDXo2nrf9h+x2iE7OWseYEl1CISSgk4Rg4i06glGeERhMMZHkxM1u4ykooHjB8ck+beQZuhAiALBtsXUvgIzv3oNOJsZQi7411YvrRX3k/hZf/WryOnoEHDdxEAC8Kn4npZRwJ8GeHXS8gXr+qcV6VEgmAc3DNCLj3tlOgWTcrT4R8MSspBEvkae7bfZx30tZvLMIj7icycC+vJRp41knOT7rtQi6FO8HQwNlNYH6V5Jm3bmPgDQkFKg/hrHs2CVx3Jr9vwNX3cpuRiAXECKiFgKHVd2SeCAN/NIBnCCFuAfB+AD8uhPiXVRlVw+bcKNdRzL7jpoVj4Gq0pRpnLdkYJ+Y4ADcuIaIUdlFLIAxcFtyV9b1xqXpcAB8tgazhsCIdAbwMDFyG7ZOBAtgziKnuErExrHDOzWNh4IosgPu6F96J6W3RSBzBtNVHAXzgMRLPfl0GYhp4gZjK/qFHC3zr3nw57RmQgBCZK2YVj9/xlRBlGn9vVyqs0S+JEQmlch/0chVC9kgCffezuQl2okKEl36ik4UoFJKAqClxYvLyuvx4vtm0G1Cc/GELMsmGhNIWBw5EANMAMsfAk33DRSsRAXmUy3hImz3uKANXUuDQuljhbpgJ5KwFX8ZyEpSPSPElk6VMJBQR3hGvI/tVYUOvbzBwHoWiQOhmOThy+knIl2DlYYRNv4FnsaIoWM0WCk5Mfp0VJODCMSs2SQIewLvJw5cJy7aluyDk8grKIsMgB/pTDsB9FEpwYnoGboG2yORI0pbMO9hkXQLYsykNeyQh8G/PAJ77GlcAz19/N7TapAEDq2HHDeBE9DoiOpOIzgXwHABfIKLnr9rImM25+W+dm8GaQGYkQJTZ5IXAwFMHDQBkPNrgGAC8kpbbGQClS2r4WP1juFGclzDwogngjIF7ttMEcH7sPUsqALhgDJxck9VjklAM0K1sM2b/2yHTt0vKAAgMfYy5l0TYC5khgsJ3z5f42CPjWMNYhABJ68TkAD7hK1BIJOyLpAiZj/ZrkS6HAdTuhevmMrz4JIBPPLGDv3+KxPUJ62HdZpSKlewkUJU1/vPK2F1dmTRk0j8C00WUAYRgbEsAeSZcLZQI4G2p9HZ7By6IUSjNRB4tPYC75Cxhqw9OdZh/hp1e0OmZXAgA/Y5NLY+x185ZxldMIgI4f8T9qivIf+4aV43zqlRTQolj0MUmZHnaTkk2GDh3YjYZeC3dtcxzBuBOn4bLeA0ZuVFC8f6RJJEn6yTnJ0AwUGEaJPebYVbgZS9X2H4BhfEBcVIIGriOTsxmFEpJEpvn7H/v3dh4J4X9n1YCimS4vv69KPU9tKXaHCxzmtbRccVNSzvLdrJRBp5o4Ekm5tEllB+VtnpgJazH3YAw9HUhqIAhSphAlhdJJVCqWcqhe4gGecogJLsFu5ZkZOBCBCemFscB4GQddUsdz65EYCIAULpwwXkXonjRxGlYuOnVNk3ZmUIMP5OUrma4VGVaALzjQj6FaEgoMvoK7H5HJZTS/Uc3U5G9C2DQFfj8Q2RasU7EF0XImMgDaWvGzA0i68mRAvgkGfz7rj24YPpMtr/UqZq5WiiGA/gYPVeEbSiwu2YtlFpZ/wlkjgoZtIu73zDBAJyXePWs2v3tZYylrm01Fr53gJFUdvTXRckUQBurv/gMj8ocbQzcSGDx7Cchl3kyVulLUngAFxHApUr3baQdnyw60YfBnZgikglDIkgoFbykwQia6ljfBfy1sGnzXkIJpIQUFnsiFOHKg4Ti3zN/PBZG2NDAF6p4Hgc38IxqACI60SVbWYbmyg0CsRq2KgBORF8ioqevxr7abM5UmNYGG2Ffxu1b02HbiyiD4whwLxoDWMC+TP5PkQB4+wv5GPEDAIDRU8GJ6Rm4dgDOZTaRZcg526yi1hsA3GWXdSsP1HH7/cOMSSiRgVdiChnRMWngeW3DDX3X9lqlE5V/ERacnFEUPVB1SlIfWpEMS3bu9AP4BClA0koX3E9TwEsoAmAATlIgU00Jxd8UN1YSQbqQbMLz9zLJ1hOSvUS2rK1w90VyryqAHA0GJID7lBXANHDZcGIWStooFAYYbV2bAP4cUYwDz1oYOAhGZChJwbhCZRt6HMBHJRTPwP39WOpYJv/d+9svjpw74Wqb8EvjNXCVZBl7Bs5TzWsZpQRvTQmFM/Dq3CciV1nihI+atWPOnIE3Jj0tAVISquiwFRRC5yAjYkmCA/NVCwNnk37WSZBMwOrZAcAdKfEExncSCgycxmvg3j/iScZCJfDRxwM3bXMZnkLEuv8sD4EzcH/l77kM3JRYZwwmJgzO+fGDuPU+j8Xb9+4P32sJgFQioZCwJ5cwcBlLRRID7XEM/Hxd4vF4Gm7b/RLLwkAoXWGfkjq2cWxYhpItBs+0TMMB3L0cA+dgmnD9TSUk/mvHbnxix24soIfCP+8MwAeYwFv3HcDptPIZvOeeFd+xppZptE3pHtaD01YXrzdYTdaQxF89U+J3X6iQQeAfnybx6YcKXHdmg4H7/xACJBS2HgZOPxQB8/kP3epPMHl5SQDfuCU2tuBlCqKEIqME4Rk4u0VlQ3f0rFSSzeG0oYmUFE0CgNyMAjgAoNMuoRCshMIzMUkgVLFrmmAONt+zsQngtRIoCFjUAjUUyAHTul6e7Cmen/3XF42KzUasBr7rDMKzX5dheEoXQk4FGcce3OvwKiXgHm98tT4hXFZhCwNnH8VwQ4FiYiNefP8XwxyKEUb++fIauJQxjLAZhaIlYNZ3kZ12anSqCgoAzsMItQb2uV6lVcOJaXcuEkKmQNBCBQ3ckA/vtP/6K+1XSU0G7iedbi5HQkbnKoGvPozwuy/OQjeu0JhcIAFwD/qhwUnz+VsFOykAfF4PsM45FiZOLZFlEj/aj5XTAoAnTky7nOE3WmR5ZCKq5Ylu2FAUEPn/BswEBGzfx1Jb5K2pA20oOAFJAjLL0ow6Yv2+HHMQkxYwJ9zwpZQ4u65xbl1jiDy+qJDBiblAHfxof4D1x+DFnnDldzkDly0M/MjmLfjlVyh0zrH9+ogkLrtI4qYzBBQkZtYJ/MOTVdLZnJc4ISFCiO+Zh+Lxz1ln9y+ETBi4EcA/XhZ1aSt6RHAE7AtV+BBKr0GKWI+kGiOhKA1IVyGP5GjGalNCMVICL/w4sO2B4bMmA8+Vk1CC8wxpxAizMEGyr0cAXFoJZb60k6gH8G7OJ7k2ALf/dtzCxjJwIPOleqVErdajZrVsRJBQVADDcI6IwGIcc68bK1FbnzuOhUehFFkHDz3tociGsbNNYOA+/I8xcJpKG3obARz4vSdh3YteFHMiFNPAhSUTADDX17hip+0DetNB++KEIlweJBsNmY2IUSiGFE5f3w1Sil/NeLL1F5+zK+2mBl4olUauAZivRLgXIWRVRQzwcfG5yaAdxvgrWOm7qIRye9uz7/s8vGRmNvydIY0msE5M2cLA03KokhVrTySUttKFAG6iM7FYRa06AXDTQVmbOMsrgszyRMbh5h0pG06xungvMPDUC+ILAUlY55kUwKKbCChLGeVy5hn+3ITd3yBvZ+DnmYvxO0uH8NRNj7bnwaMKGqnS3HEU0vSlwFnXXj5yfFM6ttGQbkgKaMNeCpLJCwDYKJQ8RHHERAovLZRjJBRlrNSjYB10zS5OvEeo3yfOf1xDTkv9J7myDR2CFLccgIeJikVENKJQtLLjm62kBYwsBTb7a7aKc/+5v3dvADF80ksofstMKGR5lobHBgYuw3MFIPgJEgYuRWCgvL46l1BCiJ8EOq4RcM4AXgUGbjeUwsaB75rpo3PfM/GqX1JhRWgkIHpddHvdqMIICjMVCeDWQwP3sbT+AhL4i8/c6L5PZbeUgcNV/rRfbpmexMd//UeDlBIZuP1+ZugnjTSVPs+ElYmYzZcIzNsDuWmRUDKjwoqmpw3+efdebOudgtW2kwLAH3vWY/HkpdhYtQngnoF32CxMwsIyNQE8MOajA/ghbMLAlS313WG8jlVSgbKObaWEsGxxfFU5xzKnJt0xEfabbuXYpJAQQqCTKSzoDOhtgknJwLLmJ4g9G4E/ebbE1+8rkmN51jvbOQdPX1xCWWwCEJebdiwxqqNjTArgHqOEwM2PeOLI8akchu/BOuuQiEzHfiADmwphhEYGBi5zD+AiXDTe3ACsZrgyTrFx0lazauOIhMITXcI5RzHfAriwUoAvaiTQqFvCd+euHX/mWN2UW7cAH3qsBPIJHNJTqEhBtAE4v09uX0uUTgSDDiDyybhklxJbN01heiLuz8sWMstYTEZMiiSK0ShGxFohodyDjEk/drv4eddVU8xVlPr8xMY18MVhjUf/2Rdw5Xc13jbYE0ahpZ3YeeBB0L/cscoQUiNQIQtSBxA18HCuGX9uUw1ciBydXIZnO3Of+1BPH/UUaqKYqJE3JZQfuWBrYPD+2gcNnwO4zgKAFwQ8ZFiiN8bXdiJ2UgB4034p+6/kb1uRTaGbqwYDb5FQwmQ56nxp2lAUEcBdFErlALyiLkrNgpWkZYuBOTbfcUcz5s/fhg89WuAdT3VspeEQC15sd2s6ucRQE/BrX4eYWoeVmmfgwxz47r0kqlw02L613VMPwP8a/hFmNtqlMA8jlCZmuxYsCkXLWOmQpMDVP/1SXHlRul9T2eskpLA6ebgMAhXy4EgSJAOA8jjwwmcy+hdonAYOGXRTZQQUETK4OuQGmKgGeOE1lyLXFgK4hWeDA3gLA28m8oydo90LyrGFl5797Zdm2HmqBDaei5lBhQoZ5FEYuL9utUlno7JD0MV0YNOZUDY6hq0AvYSiVArgIVLH3QMthHVk+igMNlFzzOESimfgRSYxUXjGnWrgSgr4RdBtR0qcX9Xh2mppt89YqVspKDQYsWTJ3wiJilQC4M2EvQTAiWwxKw/gMkMn4wBuLRazytwx7b/322ajvrq5GllB/dFPXxx+749YUpzwveNcmRzGY4G/ifdUCcVblVn2ukEsJp9bBu40Y3Zjm6FvGWPgyYM+Zkk8kF30K23TqSGhAVx+6wEbEeIWYpzlqawTdDWvaZ7V+SH7pY9tLibxoceq0BleNmblGIplP+9k0nb4mT4NprNyCu4Z+IDViVYtDKBTKFxF52NQOzbGogoExSBHXnfDCKAwcemRZRLDBg55CcUCOJO2pGU6eYgQkWE15PdfEmPgKjLwNg0cQsWSqoYiAxeWkb/0+5/Ac2/4PB6x9xrkTSdwugq3+2AaOGBfciUFDKKUM+558VEovKyuFOkSPCOyAL5kAVzlXTStrZhVZdJVZ1VYAPcTrBIKyLIkZNNr0RbAR4Hdo6t3YtYyR5khtJQzAkl4np+5LIBbBl4oiYnClV2GB/LIwL1pd3zes1a4VeYtZwh89iEC85sJ3RBSCNQOwAkSJbLgt0mukedPDQbONXCI3PrH4CUUkYyvCk5M+/3f/fxD8aFffaTtqNToadrJVJgMIwOPEkoYg4kMXPhn/R4N4L9/BJc97n2tX7XHgVv3mH/8jLA6WZuEMs6WRAf9StuQNveQa6qRE6F0AB4b+BJkHhm4B/CHdF+BhZt+G36+7rCkESCyFW/SPeF+MdbNVSiOFQrcr8D8XgcJgRgFnp4bpz8GDyNMAJz5E7QEcj9xCWlbZ+Xpvqn2iTwNABd2OeyXoeefsm6EgX+r+6hwHUN2q4jjT6NQMtx0gd12/znr3SqcQm3wBx50oaBCBg08RFaEYk/xnK+kC0IqvwdrKQXqhszTZv5eEgO9ZjVCRQbYeB5m+xUqKKiCSR4e3JoxcYjZgd7qAtD5OiahKIgsS4jJVM9eu+mJTrLK9Fq3BxYjFIwQGKoCv/2Lypb5hZPKuBOEga+veJgriUnXQi4yb/83m4gas6WWcYLpTwi86ykKQhI6jIHH+G2Jf9VPxO9XvxD313xvmhKKyODfAikK22A7hBHa7fKRKBT7YK3r5vihc62k6PvccuMALnhBMSEwDHJejJEPV+GeGkYIAJBy5GXwZpwG3s3TYlYC8YUzwsoSXqcTY7qqcOuLLgalRpH5wpmEB6obbRlP/3CQ19mALO+EpX/XMcj+UICqzWGfnbwB4I1zaoZidTKJYW1gDGG+ji+xXgZI+HdDRtqlVDhSbEu29RPNwBWH4k5MQTKc35MWl/C4vi0jYAQws9Fe6dnNtn1XVaQDigxcWgkl3AeBCiokU2ye6GHdpCu1KyV+btuncIs6m2ngLgpFxn2k6csS+7YKPPt1GWZOm4IkQsbCO89YPAjASikewBc96W2RUA5ifSz87xdrwiYr8c/aLEzGCaVvrLAIjoGXeD+eAvXwF4fvpjue5cfxhNDKFgCv8+nwAkshIZRKy7Y6DVxlWdB9AVbvxstgZgu0mYSBxJ7NItbnFiIFcGckY4LSyx53L/zio89zY/ASkmPijIH7lV1QE2TcLnTwQWwsRCKG/REkbqCz8B/mUXEMYUJ1YMoSppSTUIKbxslwz3iQbbKR+5T/MYk83Np6mmYeQ+DYfgBwYODnKVOEwIXQoPweDeCwWlabRQlFshAw4ZZS/m/7kHsGPq4gEbclUVgGntmsLg2BSgA5X1V6OVHYF6aTpwx8YZjqrtlk6oluyhphQvAaeKYwqDR2zfSxMIwHrpaZf3jkwJAXYBQSf3efS/AY/fbwWZOBE5NQyESnzJMXl/ALc/MA7AN7/X0Ir32xwq0XTiGTAlWTgTsN3E+YXFeuKdYsyWWO9Q7Ajcvcq2oKE2HGJBRvnIEbkUXNWFitPmcp5t6msRu07koAsbwAWpa+WmTh71iHRIYJe0UAzq1xfzMQsOk8zCxV+ELvJ4D7/1QcY9d3G44HCaGVDQkFOaHKp+C9C0pIIGto4MyPIKFw2ynAFfcSAcCFC0HUyCzgeSD10SkSabXKUHmTAig+6yFn4EkXnea+Thl41iKh8CJUIezQOxXJVR6EXSX5ay78u82MGIgCsKsP/9/wUSj+A3vDn3jRmf7SJeOLAD4qUXZaGnJ4Bi6cSBOjaASGQc4rAhkKI79HSyjA2JKUljGkTkwIJEXWw3I4hBEeXY5YEt0goQi4KBQhUHCNMwC4DfvzwOMZZBPAO8VE8neTgfuH2etqnoEPa5O82G1ZmV4a4ADui1kJskvavpzAPrMxfO9fDM/ANZdQTJRQFBGkiCVcezC4eZuAco7bEQnFM3CVMi/rxMwCA89kHpa/RgCVIQy1Qe6bWfgXSCIAawrgEghsTOKls7N4w8HDUed1tnHyfyA6ewEwAA/4Hbetwdry+XOXdmLTYnkAL1zBpR6fPZpLfQIweQpm+xXWdVPA+D9Pux+6uUzkARJ2mU6NHIBMkGXg3uktbNmBlIE7bTqzjZlf/UsZ3vhsFfw3vrhXDRtCGLb34XEiTZcIE5sEwHp9ruvleMjZG7CuW4SxAKkGHiON7M5rJWK9b7/qBAVC40kZYNn7Tz3kTPzmE+8d9ucLcPl7qFidIxtGmEWQd9mumf/XTxihoYPX51vYdtYC4GHigYs5d19IkTBwfx8NKby0+yZgw9kj+zpRO7kAfAwDt8tlgW5SD1wkUSihdGhbIs8Y66OLQWVQZDI4MSshbDEiZ96JSU5f98CdKQvo84MUwItGk9tRALe/1+4h6+aWgQ9rHbqeA8A37yPw3fNSNPGsnIN7yYI4rA6IpEKfXykMK6+Bs8qBRoaXWYAlLkig5+s8C4VcCdRZej2TKBTwidRJKOQBPAuZmkYCtTaoahMmQt8kQ8gYyeLDCA1gM2opIDHOr2o8bDhEt5Ne14lBZJaLriZ7WzgJB3CwZ8b4jNFlAPzeOBOvPXQYPz3HVllS4RM/LPAXPx1BClkP84Ma63rp8/yTF2/DdX/4kyNOTAkgqVMA61Qus+kwHCWsBs6jMfwqU2U5Mp4D4JJ9lGP1FWyUzUThP7fb2Zrc8bgkOYDH/eVK4qO/9mhsdklqPA48nEcjycn7pIC46lQEkCsgVwue2q8w3c3CuwW0ODEZubMMPAvvkHClG3xEiZdA4gQjUJIKGjg31dKU2l9LCaBLtpmL3Y1A3+9TF0HDJxK4TtwrFDBbTTu6EHwXsrEMXNhIgYz1V4TwNzLdNty0FUgoffcwFUpCCJsaWwnBIijie0WwbbQ6WXTg5EqOMPBuo7hRJhVeVP4OHnP+euAmuHRsE3Tsbq5waLHEsDZJ4aDL7isw3xN48Pa4tK4U0EOsLDjImUZIFq+MoaRGto8gWCzbJBTpVgQEAwHlGbgAuqGehESmJOrmEreyy0XPwGP0QerEzGQeIk2MtEkUtSEUDqRV3oEBkOeska17YbQCHn3+qdi1Zzds0yp2sxvgPDGMwNQPfqkWAGeSjH+WOpnCknaOteUkFCnx83ML+HKXM3CF9z6BsWIAyLuYH1Y4dbr9haYGr3KjAQB86WKB8/YSCiJUWYwDl0Ji80t+EfXMTPhdx4UodrNeItUdnpgEcBhHNjgJgWyxrsmOY9AhwachoTSkpaY1MzE5RwoSiv+baeCetGQgaNEDsGirFbK8+qlOFt4tO4ZU/moCOAmJObkewEwA8E3dDXjh7Bwe48o885XXDjoVB7OtI+fUVicpY7+b0qyglQD6nvWbAkO3Kji0QSbNTlbTTioA515tbgQZAJxr4AoikVAAJnuuxInpyq96DRwABkIkGnh8vu0kEpowCMvGRxh4NsrAv2wehF5nK4C9IdzLA3ivcAy8MhAsycZI5jxx1mTgA+7ABEJmHLezN1lJ59ZDNjSTFzTSTELRIi7XjAR6oWqibU1VjQFwX/jJ8meB9chRMydmpvIE5CttUOmogauiwDt/QmLDhROAsPvULNEkl3nwF5AQwPmPB27+4kj1u8lhBCYvoaiWl6pCkawWAOCibevwxRtttMHRANxek1HQ8yYJQNbFXL/Gvba0P4M8CsUIL2nYfb7t6fb+PKJfY5hFJ6aSCr0HPzjZz4UTW7AbwFmTm3HDfBzHpac9CDc8dxf2bDoX2AUc7K5HritMdDpxjPAMnJ+Ku09juI9yDDaUgeXOYVoPTfF91CpKLUE7J6CmCRgsQkuBycEGvPLwDHYtbcRUJwuymr0ujetapO8Vl1AyNy6pCvz24RlgOnXkA8CTyr/Ao6a24EXNc2ppn2clFA0JgQkD1P7B4vkCpoMj01384XMkJtZ1QcPbB8FPKgnFFNOtn2tpEwIyKZnWOhqFAkQGLlYiobjstyKTIXb0yk4Hm3TamgsAuh27xAs1PKRn4KnjotdI3PAdP/ohYSgF8IlcYamsrZORVQfUcrRbjte+/b+JAxPCAXiqpZ69aQK9XOH6fa4BK2fgOgI4wequgJdQfA0OK6FUecpUfBih12QnHeBPUYEKijmScogsgxZAndkJptKGJUQpfOZhEoub48n4lG4L4FlkUkIAL/wY8IZZCJbiPVtMYmKA0EnFp3NnLfX1a/bie3vI2RtAzgdCYvyL6CerpP1jY18ZCMg6mB9UmO6OkQQbGrjNDk3vW0GEUk2FUMBmvDnAWKnKo6xBhMXBj+KaLT+Cw7PPAwD8/cXPxP97xC+EsMOggcvGQsZH54x5dTzzDho4++236D74keHfhWvrE3kAxBR8ECqaRp251RgyvHR2DoIKTHUzdNg72wxLbDZesFKgXyW66+Al2BZns4Ec8ZvYTVtkFSah9IxE5ZeT/F6bLgxluOo8CZ3FhKbVtpMKwNGZxrmDfxv5WDv9WbmsPwDwaa3NLvVBl1uBE3MAH+sq8JjhBO5dliiI8LpDR8I2/r1Szgse+lgKgUKJ4Bz09sAtF+MU/WQ8zpXKzNxL5gHcO0i8k6ZXKPRLjbI2IFKxJrMYlYeuOVvgq/cT2L/efrEFNZ43ayNHJNlLUzcq9CklcK9TJ3HjPrsdz8TUOoYRaojYCEAAHa9bCmXjwLMGgJcewN2EGSZSW7zKs99MFZBZhj97tsRlD5SoNaGsTZgI/QukRLy3KQPPUgbujDPww911mBxQACZfI101AjsAoBb5SF/VB5yxHoCy13sZBu4BvPlSfWrHLvy/A7bSlySAVMdq4N32xKxHXRCbPvtw2Cg+WDtFawzUJNPAR1/l7vnbMLltgOKMLYlu28sngAM/B6otIapUhmFWYMozcB6FwnfbKPvbtAnnJOxlsSt9NIED2JAQKhGcgU5CIaDGepSZ/d6vBjUkpjtZiPCy18Vr6o5l500GrkIWiGfgISJoTOZ1pc3ohy04kTFZpaclQolw7rQ13eBPyoCkN+tq2kkF4KEJaYMCaKGCR3lcKn0MCfMMfCUSimfgCmfUJT60ay8u3bkb59SRugUnXyP6REokSz5vRaZwFp6NrY6YBwbuNGj/onlw7hUK/UoHDdxHYLRJKLs3Cfz1s1RwXIqMQtq0cAy8+ZAqIXDvU6exVHo0YyxHS7xgtoMLhyXuV5axqYAEej6bTXknZuN6umvUlDL8xOT3lasCSma48nyJxQmJ2hiU2rDr6ELe+LicPl4rIJcFWDhJ2IazqcPdaUwyDXxpGQZuELN5/TPTzRU2T3XHSgfeAoA3AO6MWmO9X7GAMKACtaEYNtgwXs/ECH+tUgDYVtcYqqmogbcATb55Pc7+scNQU1OQ0keeEHqFQqVN7FfpbLJrgfcDj5W47L4C/3ORSByRJKOzuc0eOXEG3r53P86fsGGFzTIRQLymNpHHTc7uDBUIpdyESnkAd2QGElPdLMhq9rq499ifP5MmP6V/CNdNPBSjDDwF/aY1yY3d1v52mr03GZuou1qh9FJ9I5rJ9wtVRLcbAz+pNHD/MPXRwTRicasaaiTeWDSKWY0A+JiIFm59VwWwUBJdPQ8F4PP1I/B1c7+wzWDSxSm75XARlv6itTJh7uQe/7r5OGfPwM/XXQDzOEdsBGDjtCtNWBzWAKmgc7cx8NAc1l+D6RgUaCWUUZYhJXDBqSy5iMcgQ+KCKseHd9vwuz5b/ha+NKewYYTNJAgqK5vo4Jfxnnn5LDYuoTBGFBg4k1AAyzBD5x4fhSKBQvK4bc7AmdOusw73mY2M2yfyZC0MXINJKOz6FlmOvRuBw+tHfxOO6WOAW/DBlwlWEJh3ju1xEkqzYYQg//+iba01KhEnr9aa9gG4FKBchAiAiTzDnnqQ1K4HgOleB5gFZqYE/uqn/P1l2/hxjSkGk8nMlnkO8eCj2wQnphqVXAwp9LNTULk+ESG8D9aJWbJENmpKKCxe+7XVS/EjnfNArjxE7t91z4LHMfA2lBUSb917ABdWMQlHCQWQfadykwUAB4CXzMziE1OTqEkFBp66b1fXTioG7p+bPlIdWYsMZQOYSFon5jgJRWSjjKVpnoF3MomithrxO+un4V/0k8I233rCVrzjJyWOnBuL+wBRA+djl8K+5JmMRaJ8uUrPwB9UT+Ezt+3CQ5RNOvCFgmb7FYhk0hVlBMDd32ccdKx7WxmrJVK7E1MKgW3reTQEWwYiw1cnHh/+9o5HG9rmgFVJBwQNDbLpxPTMyzNwd0Myx8Dt8RA08FgLxZUs4MXHPAOXlsFHds6igxg4He6uw0QJZJ6BewBvY+BCjTwzgGVxr39hhi8/YvQ3fBugEbnhvwv/itDmbTyAs1BOp4EP9z0dWydilMTWukYJFSJWTJuu4SdVmQHK1hGSBHQLhboRjZQrgcmiLeaZM/DlNfAwYbCu9KNjsv8kmZju34oK6GwyMHCfYLNt4yTO3zKVRKGIyNQApPHaBiIh2dkKAbweI6E8rt/H6XWc7U93bQjnBaHQecxchcBvHpnF53fsRg0FY3ymKdY0cCCy536jtGYlVGCW8aVbnoGPbUzLrM808K62URqzmEy20Z0MX3iwDN5q/pB5EOpk0lU2c1qfEkFbzh1T9FUPhVTYpnUALB+nfWSpAlG2rITigeecA/bffGsZMvWEe6jbJJQikXrik68h8d/TTwdeb9PRJaxz1dbI8Nl2rv6Li5CZcZcnxIH7GO/Sga6XXtwxMtVJyrAOaw1DiE5M9/JJpoEXwi5bQxRKWE6z+HzGwGc7k5AETA7s9yEKZQwDD6ozQ4GQ5LIMk5It4wjf+RUHgPmBndzGaeA8GcdLgXrxQnz6py4Nn2+rtSvuNKr/sx25fxVE7gAcwKQjBZXmAC7RawFwmchS/litw2Ya82giDz8fwEU1NVqwlVSAiklcdj+Bb99LBAb+iifcF+t7eRoH3tgvz6cw8GF7LNcAAHwy1BgA12MYeNMuVtZ3sFsCGQNw/mtbv9ze3wy0poED8WFaajBwI/K4vAqALSB5GGHYh9tsBQx86DLWisx2pAeAeUozKX14oe/c4R+yWhMKxwInOxbkcnfwTMoAk/53S6W2Yws1N+y/PtV9tl+CmISS6VEG7h+kjz5SYK4HFBOxsomPQqkaOp9k2aP+jML+IJFnCr6hrISfOETUL2Vmi/pThme/VuFPf9YBdmVZpq/HkU3bK7iw3l4/GRh4J5lMvdM3ODGZo8vfu56QqDIn5TAGLlikBtfeZ1zLtC2z9u9F58SUYxh4M5EHQKgLPQ677LXwDuzR7/zqRa6EgTda0L3i8Cw6mUw+36o1hpTFxr9tA2MSinCVPBXFVR23IpOY6LYBeLyOYWIZV0+3wcA5gPtjcgklMnB7bYfUgSmm8VP3OoBXbtkbs4LdfjmAewbuJ2+fZQk4AHf/Z79z41p/pl2N/PjrW4ff6sRsmRjvn0Ud7ScuPCu8dzxQqIaCDhmvGPE3rJadtBo4NzKdsESxTIRsQX+Mj0JZiRPTv65FJvGmU/4Qp+z4LA5jurGFf2mzsC1giw95FjnhYrn9fJlJzsDtTe5X2lZTDD3/4m8B4MhiBYIKEkpetzBw9/f7HqfwvscBn7mNYrVEH0bYZOBSoJO3T2YaMqlnIeCcSwJO9ijRyW0XIrKtd0KYXTOR59QnDjFRz+GrvUcBfQbgWRFC4PgjHjvyuMlDCBS5AkqgJ+xKRCugozI8td6CnbQHj5q8IPyeg90t62zc7/l77RF8Io+sR18qw7X25Dr5MLzWS2W3d5l2pZoc+S7MCRQZ+DgnJq8h/j+37kCWKfxJoRIw6RKhggqJV8tLKAqimAJq6yjsFaPPvq0q2AhxJS+buKWKL4swjvYFBu5WWQ0AXyp14sT0E4K/tiUVEJ0pPMCVYQg5Cay0crAgobihsXht7Rg4OdqV+2zKYgL4fdb3r2FNeXGcTWW98N/r88kA4EXiL8hReydmUmB4de2kYuD+gViihga+eH74b86elo1CWcaJedbjDuHMx8QbXSiFW8SZeJt+JpoczC+XsyCheACnBMBzxRr1yqjaFk3JxYcRuoe36wB8xjHwQ+ucA0/Eyck7UXTjbkZ+ZhmLlVAaYYQiZeDveP7Dwn9ryBFHrJduurm9B1umejb+3sRsSgAgF4USdOEukHUNSnf4AOCy0ypnBQ3cJ2EIicdP2L6dZ6luYOB51sEmdPHePfuwUcTnQrHrumP6FNQSOMsqQSHBqdn0GLDRDc0wQiA6m5d7YQ6c9hj8efVz+OxZr0y/+Nn3YNfWx7mdAr/+b98BgJFUem9cA5fCOux8xuyzZxfxADcBlKxtV6usEZyxCjKzqxAFwkTLhF0oiamGhKIIoZkzwBj4mCiOxGmKVD/vedbvPuLFrHy6eo0C1IlNS0K0mRsDZ+Ay6Nn+OYoATg0RKxuTwd201igUb9xJr3K8ed8B/Omwh/X5VHjvplkkVp7nQUJRhNstE/MkA3D7bx9pCnK9cNHoxq5w1VgNfBkJZWrrENNnDMPfRSZDrZBRc9q1SJd5OgHwzNVG8Rp4jK/mqfW2KXP0vAMIL9tsv4ahDO98isS7nixx4xnxnA6uB971ZIlvXpi+WBnFCWZcIo+U6Ytx+oZ4bYdUJD0PATdxyPjC2C5EAkS++bDdzifyeDY5Wc8AAA5p31LOHjPPOsGJyXmKT9oQIVJB4iUbLsZXbt2Js9Ukysw6MTuqAAK4xnPjmqjc8lXs2mT/rmWskS5OHU1lN0KGmh/c2jLympZnGd6mn4m6aHROuv9PYfL0C90B4sdjGTgbu4Bl1x4AX3V4Ce/dvQ8AUFK2PANnCSzSJcEpYmDKx65EqOvtLQMSDTg4hscycJn8yxn4ZBEbYgA+kccDvf2uNjlUN0ZEhYxUmUZ4ATEoZ1AbzA2qFgZO8GuofAURZwBGAiGCPesdwMu/Ef/ubcSTlvp4eiUwzQCcr85e/dT743H3tSs/taaBW/N615/Wz01C+czgdL6R/fcoUShyBRKK31WhhK0G2LYNea03RqwAlun6eh6egfuwrUzGLpxdxnqKTMaXzlWK8y/bzFIJDYV+V+CzD5Wwabvu/AXw2YdKLPaaAE4xCgUCUrYzcL405U6r7bQ1OF69kXAvn4pp07mSMG656Me08/BOu7/Gcv2bta0oFyWUTsI4veW+FkqQUCSkVNhgDLqysMkeTgMPTjPWK1UyNiR7O3DLqXYbLYFhIfD65ytMPjdWt/OmhRypNQ1ER9hyTkwPWG3x/z4uXYKDWjuJkAyMpLDg7KW0GgqZE1tLqFCytHVUTEKRHavbKlCrBp4riYnGuLOkhBnXwFuHvawG3mtq4DLKmL6xQoUCWTdKlPUyEoq/u4YI2w8sJq3PooTS0MCPYq1RKADw4OcCp7BnZattP4iDN6JTMABnHO8BZ52CrdPTbqy0xsCBuCS7mU7Hc8rX41WP/XX87QOfBX4aUUJxUSj+iwYDb1YBbDN/0YtMJjGoyTaegTdYQq1NwsALJVmN66iBF1kWxlRkkYGTY8oTAcCrIFN4Cy3OxtzFGKNgGa8UYuQ8eP0WIF0d30hnBgZuXvYNXFI/KUg3ftkrpEKmBIxj4B7AJxach3AqZbnXkiupyZ2YLQWDCrfsFdJlB3Y3BmAoVI6ZSYH5CWGdV6EoEmPgfIVFCrs229923LCuP0tgYqKNgQsmPcTPc5fpt5wG7q9V3ubk8+fjfv+yx91rbGu2pDCTAIhEcGbzWjVDykLpg3YNPDoBlZMmFFmnetN6hUJ33anJZ4qQCN6hmNw4J2YjCkW2ODFjnZVYTrZw962kPNHnb6HTcHPvYmDrAwCkEV7+kSUhsFjWUJLLP37daf9/oUads222rITCzQM4aeR5L7x/SfMilYfIJZvIs+bEHAlLum7Tubhu07nJZ7xRbRKF0mDgWQtoBPupvwfKBWz+VIFDi6WVUMYAuGd9IYwwjxJKwTRwC3Kcgdv/7mQ5lBDQsJILueWkMBZpfBhhv9Iw7MWzjVvtf7dGIMAy8GYmJpdQLFalYYScgd9CW/FI70w87b74inkgLpRXuyy6HNA+CkWCGgx8wyKw0I0lBrzVIblBAjDIsl5g4FxC8WDowUyeej9gYMfSlR285X/ZM7sk76AKDsZxAC5xeOPo/eu2yCJGyDFx4EePQuES2YiFol4C3Vzid55y37H7kUzP9RKKB0AO4CWp8Dd/Bqqqws6dOzEw5wBP/Rgw00VneivectFbkBEwkffxrmc0OjNlEnt3HMZbLnpLPGcAkxcJVI+w9+WxUxmqh9d4TA+49tprRweu7gc8+YPAXA+49lpsqHQ4Ti+XePFF27DxyX+LygBP6QBzi5tw7bXX4on3+XU8EhW698mRdwa49skfBAD8JW3B3s7fYbi3D+y9FkQU9jdtXofq2TXOywC5uBez04+F+buHAgDe1duIbi7xfPw+CBrr8nXt4wWS6yDFmPNqGpE9TwDU3YTHv+StqJ4PnNZVuFZa6dXsn8G5Wx6At2x6CyaNwI+YDSvad7fbxZlnnhkIw9HspAJwOW7mTyyyJyFEKArlocG/W8t25HnQcwAAT9/9fVxy2a04uFDGvpQN6xUAyvjSeeZYmdiUYLLjZAaHIVYD9+NxjZZ1qoEHCYU5nAyrRphhZQw8SijSZWJGkPQrmnEAXiELoGR3IiMDVwVQIVQjDAzcbT41AHZvjBPl/9z7Nfj7q3kUgQO7RAOPFp2Y7F/PwLMC8xNu7KqDvi9yxgA5KW5EEns3jjKgTsskzhtE8OVIkR3diRkkspY4wgunrMz3yAWBb4+J+vHm5R+DyMC9E9MDdkUKlQHutTSFb04v4P5T54Tf79y5E9PT0zj33HMDy19cWkKxtB0FETZN3Bs7j/STY67v5Th9QwFxJI49B7CxUpg6ZMnE4W0TGAyXsCETOPvU+2HElg4DM8rKDcUkFgYV1EGbP3HeKZPYfnAR5y3sRFYDh6aBU7eeg6IzjX0HcxzEEFNVD1PTZ2DznKtTbs7D5qkOzthgoz6ICPWuWQDAafoA1s0P0e8KyNPvjUkzg1u2HoARwGnVGZju5ljCTgA1Tuudg1Mmp0bHC6DaORP+WwiB+52xTKott93OR7bhHOzevxsbF4ByOsf63LYd1KfeF/NLc9hV7sHmGjhQn4n7nbn8vokIhw4dws6dO3HeeeetaBgnlYSyEvyOjFsuG4WiVuCZfsEjzwUA3PvUqbFJF37ZrlrjwKOEkssYhZJJgYv7Ai+ZmcVZE6eGUL08k3EZGiSUCETeUQi4CIGjMHCByBgn8mykFoqfEPnStHmNEyemkDYDlGngUubIlEBt7NhmWATd3AQCOF9/zvPwFfNAuxsR43gz1W2NCPLXzq9UOIB3VJQ+OlmBa85/Cd5U/Sx2nv+z8fow5zBBYe/G0euTtxTrN0LEMEJ26lmIhR+/FPaTXd5CDs6eOA3f2X4bfmRBonuUHIQg7wXyEZ2YtVuhVcgwqDTOWdyEb96yAxdNx24vg8EAmzdvTiQaIRWEU/fbMiTbSjULiGRWFRAYFAJjo1BGdhC3m+pkeOCZG+L+RDzBUCTNrRJvMqfjBnOG/S7ZHTsf9rk2BCGEdWy3XNrWjFBn3DFKxyJznHIhsPkC8IbdyVGEsH4bUGvZ4jYTQmDz5s0YDAYrHsZxA7gQ4iwhxBeFENcIIa4WQrzy6L86MRtXD7zNhBTLSihtumvTLjh1Cle94SfwMw87E5f84g/jRY88J/n+4jPWQzupQ8jRMEIPzBOFwsbJHBsmfGsniWkt8ZtHZqFkFoG0hYFzfdoYFiYHxsCXuSy+R9G6buHiwJdn4E1dlocRGki8//9v77zjrCjPvv+9Z07ZylK2sBRZXJG6y4rAoigBiYCIEKwQC1iwBZIHy2MhKvGxRWyxvZEkCkkQNZigJGpsEBVQmqsgqCCgAioIIixsO+fc7x9Tzpw5c8r2kvnx4bPnzNwzc819Zq655ne1nyi8foKCR+/WrSoqXkUhqGfH1ngFP+q5TofThJkmbX0QtEvx4guppIRCqHWwwP2esAL3qn6EN5XHg5MRlg7iHm+kBV4RGXmqwcEPolEo0Ra4116sywHxLHAULx40B5vfG/+2M/pNmg9oC4ViOC2DwsN3h6o4Kr1abXZ7/RT7vWJGk0hHhaYoIiJph/Boyz4i/jgILiIGiohVkVtJywAjdPCITEURWqJepV7GItYtb10ckmDPmLRGoYjYEnN850z65reLuT4mfOngz4w8rvVhJwSK8NCrugZPyJt0JHgsv0gs1McCDwDXSyn7AcOAXwghHOL5Gg5+jxrxg/76zL6svPm0iDHWTh1WBW5PLrDXD46FzBQtVbt7xzTTIgd4eeZwXrjqJKSM5MCtYYRG67I0n4d7JhfxwHkDAe0GDxfjUSwWuDCVitFwVlHCDiwZocDDlmK8KnnCpGq0ubNy4Kbz1FazxQqrMqoKQWVhNT9NP2SpUaJVIwxayhvs0++HQ2nhCAArFZOV6mXIjxk8881ehDUKxXJss6aM2ek8PDcRCtzjtzimwzvwRPDbgqBTHW8HhRURhWJZ7vVE1sp2gvmG5cSBq2EKJKEFrtpCMi0WuFE0LKR42XOwIlxWIoFBYhR30yxwh2MqAlVR8YW6kxYy3n4soXzEV4TGiESIUOpGWQXjfBFRNGkshRbUH4LVXkFIyriyxVOKihC1Mgwddm5a/UaRNX0FIdXP16HO7JY52vpGcGTWWYFLKb+RUm7QPx8GtgBdG0owJ2SlefnzZUMZX6QV9WmX6jX5MVMuU2E7OzHVWljgdlityJ7Z6aT6VIKdCrX9tdesc58ZRhgyrd1Ur0KnDD85mZoC9lj6O6KoEYrUSKE3LHAIh2AFZaQFDnptkrgWuH4YoUSl0hv3ivW87NaZ3QJ/+tu9XHvwR9R22k+tZuajKpEKfL9ej9xKoVgfBO1SPfhCPi3jTvGYcc9OmZiqopKTmkN+er75EParqZZxfnPfVr1pWOBBAUIECAlYMlyrl24iBgdub9cF4DOiUKK2sBzTpFCcLHA91hk1oQVulEa1loFI80Zy4FLx8c2PlRwNGbWDE1j1IlxAzdECN+8LxfwhBMJRgce83HxpkJJFRsdc/Zja4pdeeJaZM2dGDLXSU2HLX0TJFku3Br0qO3MFlSmKpsDjKGHrGiklp512GocOHdL3L7jkkovN9YFAgJycHCZMmBBzf5E7VziaopVyrsmwGA0603SYVDNCaOrUqWzdujW5/SaJBuHAhRAFwAnABw7rrhRCrBNCrNu3b1+9j3VqrxzTgnF8clriwAfgo7tek8OkUExrrfanHmHhGYV9srTsQCWtE2ChUILStHbtccGqIsKvpkIJxw+rSrjEplWB6xb4lkA4FlU1Y5XDtZGdYHC2qlCj2oCaWamW7e03kDX6xtqtR9EVuMjsrDmLLfy8USzqUJoIlxiwaNd2KV69EBOgei1RF2EVbqVQ/n3uv5lUOClMoXgjFbhZHsFafEq3mA9kAnpkwAsjVH73M4vSdurMEiMT06fvL56tZsynowWubxmUyXDgkRE9lfjCFIrxRuLx8mNFjUk1JGpQYiU3nIIBzAQ3G88ckgrfdtAUlEN0pW0nPuh4bNQxIyAtf8zfzSKnCEdMaftwPlpI8RJSoEZ69Dojse9n63XxyiuvMHDgQNq1014T09PT2bRpE5UVmlP3jTfeoGvXWtihQovsr/RFyuok9dVXX83999+f/L6TQL2jUIQQGcCLwP9IKQ/Z10sp5wPzAQYPHtwg7xBGTKXxu/y89BiOzbbVn1AEs0RHPj68AyydQAyln0wcuB0R5WH1j0Fd0RpWhJVCqTbqEdtuaK+qWFpCqah6VSWfR6G4a0f4EgYfE/ZYd+uQyu6DFRyRGWYlFkV4UGW1Y1VCK8xol/RclIORl5VTtTghYE7pHDZ/5efPW+BQRbglnDXW2GwQoCuUQChsgVdZriqPgwWeleqlxoioUbxmiF4EB26ZM9PZmJ4Dqh9/asfw/lWv+TC1PtC9fj+PjlfY1EMglHBWbQQC0c6iYAwL3OtJ7MQ0fmd79ioAuq8kGQ7c2pzg4ZpzWBY6icvMRB7deaw/UMy6QDHeKH+z7BM27zmElJLKwFEE4PeWc9TebNurvQlWBYJIWYXWPkQgpEpQaGO9wkONDNAn18+88+Oego7oebjq1jmcOeInDD9/DAJBRkYGu/fvZs3KNTxx3x/onJ1N2ccfM37iZAYWF7Ng/pNUVlaydOlSCgsLWfHGq/zh0QcJBato1yGDex9/nMKuXfjN3ffx8fZP2fXlLr7ZtY/LrvoFF1x5VpQUixYt4sorr4yQafz48Wx8fzlTLzifBxYvZurUqbz77rsAHDlyhFmzZrFp0yZqamqYO3cukyZNYufOnVx88cUcKS+nKljFLffdyhknn8KKVeuY+9BTZHcp4OONG+nVr5h7Hp2PEIJTTj2VSy+9lEAggCcJn0oyqJcFLoTwoinvRVLKvzeIREnAuIWMp/Q9k4u44lTtyR+++RSMZB7tu75NLRJ57LAWdjKURUjnqs24btVQaKGwBa5GK04nDjzD7zFf1X0WsrVfF8PJYlEoaM2VnRo7PPjdPp7f/Y12vsYxvWlRr5mxnFlT+kxhQMfBQKQCD1oul9yUTihCITs1Wztfwgr8kB7iFxIWBW7jwM0sO9XrSKEYdFMEep8J/7MRf3o44USoXmcOXPGwfKDCvvZxFHh1edSiSAolvNwoeRCPAz+mYxqn9cnlhO4doleGtAd9EDUi6scJhgIPCfhd8By2yy5RFrihwCtlchQKegxKKCIX1HmcFU6nm4gxrqiooKSkhGFDTuT8safy5IP3RG0rLd/8qh+kyuebP+GxJ55k2fI1vLTkefbu2snatWu54ooreOyxxwCYNHY0q1ev5t/vLmfcz8bxzBNPEdRryO/YtoP5L8xn0bK3eOyBe6kxmzCEJV65ciUnnhiu9wMwZcoUXn3p7yihAB9//DGlpeGi73fffTennXYaa9asYfny5dx4440cOXKE3Nxc3njjDTas/YCH/zCPe2+919zmw02f8cgjj7CubCO7vvqSD9e+D4CiKBx33HF89NFHCWYwedT5MSA0bfAnYIuU8qEGkygJGEXDHJkDY5miRS0YY8JhhMbf2j+7rK/GhrIwHBPGA8GwwEMyXJ4y2gIXYWvWknySm+mHoVfCvs9g+C/N5f0cvOTnyFxyDm3VXiVt85AfCNJP70lpHFnjwCPHOVngxqKsVE0x/GhR4NJyIxzX7hjenfIu7fS6HzWWS2lZqcAXELxVIrjYIQolK9VGoVgcjjmZfuadW2wmMEUKp0BmHn5LNTgs7fSsDyRrcSPUGGFZ1UeiFoVE+LfxWguNeRNn86X6VJ6ePsR5pW6BB5KxwBUvQSIpnDSbE9Pj0x5wYQrFeZ93nNUf0K7Fzw5sBanSP6eQjXo8tYHjcjNI83nY/cNRqqu/4qgaJAOVmqosqvwHAMj1ZLE38CMdY5Yj1JCamkpZWRmVNUE+/+4wL73wLN9t3xw9UD+/FE8KoZqO9B84iC5d8jm6t5xjCnoyZswYAIqKili+fDkAh/Z/x4zpF/HV7l1UVVXQpXsPQlJSFQgx4qcj8Pl9dOjYiU7ZORz8NkR219SIVPoDBw6QmRlZUbS4uJidO3eyePFixo8fH7Hu9ddf5+WXX+aBBx7Q5ruykq+++oouXbowc+ZMyso+JCAD7Nz+JSDY78mluOQEunXrRnlVgN79BrBn11cMGnoSSMjNzWXPnj1RD5G6oj52/HDgYmCjEKJMX3arlPKVekuVAAaF4tzxw8KHqn4zqdaMQjEplNqfulUJGdasQaEYFrg1JM9wGHpsN5eqhCMdkCFTSeZk+iElC875Y8T4sAUeRgFpDKmBz0V0eU+lSwnsXKN9tjxg7PMVz5k1QE9oGDsg3AUmIl1b8ZrKG6DacilV+QTPjtL9FCaFYuHAU73UEKZQrJmHa+f8NEomO3xWBa6oqEbWpkU8awGj2lrghjXrsfyWhgKvu9c/bIEn4sAVNVqBGynmRpsur67A14b68EWXsyjMcUissUD7WbUMYCeHX9i5b11nc2LaX2cTwGmUx+MhFAppvpuQpLo63KrM6/NptA0CRVHwG02WFYWAXt1y1qxZXHfddQwZdQqvvf0ST/52PiG92p/PH37IKqpKMKASqs6JOF/j+Pa2dRMnTuSGG25gxYoV7N8frkQqpeTFF1+kd+/eEePnzp1LXl4eH334IZ/v+4QB3Qdr1T6FD8WXZp6/JkfYn1VZWUlqamTgRX1QnyiU96SUQkpZLKUs0f83uvIGGNxDe0Xtaee9LRCKAqNvQynWyTo7haJ6uO9chVumJU+l2BUxWCxwWxeS0/rkMrRA42oLsiObQHitYYRIfjhqKPDo2hwAvXIzo5YpioJQPI4UijLhEfi15jCuvQWuLevaPpWtd5/BeSd2M9dZKRRsD8AAzvNo8NvWyIwMv8fRiZmsg8QaRohQ6ZSu3bgd08M3sNUCF4pmgd+5bz/rd3wV3rYqBoXiEPDs0xVmnW+YXmN4v9047qiZRkoiC9wWBw5EUyiqn8wUDwdox5qSe7QIkDgQCAh5weJstiLSoR12LoYsv6sZkx/3SJZjOmjwY7p04cPNm5HAP5f9k5qayDdFI3ojFn788Ue6du2KIgQvP/cyoBl0UYUSYlxMvXv3Zvv27VHLL7vsMu644w6Kiooilo8dO5bHHnvMvM8//PBDU478/HwU1cPSvy0jGIw05Jwggc8//5wBAwbEPsFaokGiUJoa008u4N3/HWVaiVYY/KVQFOhchMjRIjfMVHrDAldVNvRS+KJLctYERHLgBuxOTIAPbh3NkxcO4vJTevLu/46iT+dIC1oR4booVgrFkfdFs+pX33IaD50/0Fx2OGcwYsC5EU5MxXBwKR7QOVI1JcuUz255xaNQQKN+rNvIOArcSqGkWWLNPQ4WeFaql38Hh3Bk2GwQIqlSrRFyW4sTKSrF3drzzo2j6JUXftBZq9MJVbPAU6TEB1zf/WwW7vkuhgUuHBN5UnSnk6hrLK/Hz5Lut/ItnRJy4KotjBDCkUghPaoHRaW3fr5O16UdQkCopgNKqL3jerMhc0TeTqQFblJVSZW00PZgx6XnnMO769dz5unnsPr9D0hP14wwI1RWCCMSxRlz587lvPPOY8ypo2jfSTuXUChGtT8HqvXMM89kxYoVUUO7devGL3/5y6jlt912GzU1NRQXF9O/f39uu03r5nPttdeycOFCBpaUsGPrDlLTUrXzjTM13333LampqXTu3Dn2oFqiVdVCMWAk1jjBdEAZFoWq5SLWpSemHU4XrpFhZVXgee3CFqKTnMGQjM2Bx0B+VioZlmJW5fmnoAwoISReNC21FI+Po4FAWOletwXluzWw6jYtjNAmvpOlEy/tONICj5y/aulh6a49ZAVDZIdCTDy+mB01B82WaNYolDOKOpOf9XPSj9VCL4VDMau4sB5b/3xMJ9tbjkOavEe/y6f3ngjvPAK+aAUeJOzEtD68/PW1wAmHmCZrgVtnw1BwX3t7MLRqFbTrSq/MTNZ9+QPltogSJwiHv9b9Kw4UikCE8xIsWydS3+Xl5RHjJp3/cy2NHsjLzuY/ixaxpyMU5PVm3jyNWz7vrHGcNe50vd2gYPFLr5lv2CNHjmTkyJHaviZNYtKkSRyqOsTXh78mRelIZaVk1vX/S5VvrynDK++soSYYoiYYWafxiiuu4JJLLuGKK66IkNUK6/FSU1N56qmnosb06tWLjz/+GIDt+zbxyzuuRwAnnzKCASeeZI679a555ufFixdz1VVXJZi92qFVWuBxYXViYlHUNgol2RrBiRDUowvUWiQGVQdDFg48fBvFssANWPl1VWgXekgJv2ob7dlMWdp1QfFpRXyMRB4rnOLo4ynwSA7cboGrFNYEyNat7xRdcVfq1Rqt9UH8HpVSXXlDmGaJUY05GtZjx5h3jxLtdPQaU53SXvub1ilqTEhYQzwtFnh9OXDCNWcSW+DasZycmC9mTWe0+gxMfNT0jew9HIPjt0DLxAxbiMbv3KV9KgWdwlSkIkRU/ZPw5+hP8Q8af6V136oizDK3QjhnizpBe5uFWKW87YLk5+czY8YMM5GnIRAlagzZs7KymDZtWoMdF1qpBR4PYetJTwc2bnaD+66HE9MJRhihUx2JWKixKnDL3eIYeWGBz6MgQ16EUmNSIkaHHACfYtSPCF9BZtsqEe3EdIwDj3Ma8TjwGtulNCylM1uqD5CpN9N1rA9i7CrJes2WDZw/W+DzeHn0u328mp7GqxmaDF5jrlM7wNl/hILhUdsFFUs9Gsv8pOgOteQJt2gYlnciC1xVvYSwKXA9E1NVBIeVdqB6OX9wN3b9cJQrTz3WeUc2GEkygNZgIijxe5SIzkDaKRuWtpa8Y38vqjuBQjiRR8QaAF2yUhyvzYh9W94YpJQREVKJcP75SQWxJ43wgyh+sYHp0y+NkeRVd7Q5BW5eFUY1OzUyxrihLfDrB19PVbCK0vzSxIN11ARCfCnzgI3gzwL2JtoE0Jx/hgL3qAqKUHjjBIXduiFp0AaKRdGG+w6qUZRJvCgUJ8i4Fnjk91+1G8CkzW/SfahWB8IxucXYlUMxq7iwHjvWg1iojDpaQZklMsGgUBAKFJ/nuJm1GmGkBa4r8HrUswhb4AkUuPDoGbbhZQaFoghhctF+j8otZ8SPPrHC4Je1/TiPUSy5E0KIiGvGTsPUBZFmi/OeMmJU/nSCcb3G+1XqI28yCM8XOg2eHNXUEGh7Cty4Mk0LPJJCMcOlkmx0mggFWQXMHzO/VtsEQpJ7Axfh6/1TLug+hJ+XboyIt46FThl+M4rA4ApfOimsDNK8Gg+cYonSqK0FHs/wibDAbcXAnr7sZHjWsloGKawJmBayUwSPeUwHzjcukqBQjDF+y05NCiXOa8bx+Vl0+V7n0y3z5fN5EVLWj0IxLfDEYYRShC1wjxJuuqEq0QWfkoWVtAinqtuObVPYThRK4qJW+rh4w0Ty+4mHsAK378viUWlkTWrt/ZWZEk4ssx+3MXrytDkFHv7RdA7crOxmUCfaak+S1QgbA8OO7UQVPgqGa69y90wuSrCFhk7pPi0UDI0iskeV/LTHT5l94mw6p4e93NZyrPb73kkR1JUDH358nm2w7lhzcGLaodaaQrFa4DFUqpFYZbGYvcbnOG9fz109nBVP/FUfZ1FeQkGlfrog7MRMVAtFS84yFLi1CbEikos6cYJmgYepB3NhxBgr/SbiK+FEx0sQUlefnZuVDJWwAm8fCuKV8K2+/1SvyuGgY7O5BoX1NLJSvWYSXFOgzSlwQ2EYPGa4j5/2JydTi5/1J9myqDEwoGsWO+87s9bbpXhVs3WZlMGoGyTVk8qIbiMilkVY4LYb30mnxrunrMWsYlIX5mA9ecHMxIxTbKiWceAoHp76dq/ZV9R5pzpdYVHgHiwUSsx9qwizbZPVHNVmuz4WuKG4E1EoihJpgadFKPD6WOC2133AHn/nVSOtdOuRak0NNAGHYM2o7qonzHwLIOGYjqlU1PgbnHe2I2yBNwVpEok2F4VidscwejkqkTG15wzqxoobRuJrRgu8XtAplCBVUY5Tp0gYY5ljFEqtLfBaKPCgTgkZfSLjKB3DAk8+CkXl5IpKBlXGCZ9TohV4mEKJbQELVQm327M/8GRtXGXRSNoCNygU/bu1K1OnDD/Z6fGjlWLBymmHa/lEjvF5VPOBEStrM1HTgZ07dzJgwIC4cyVF7BKwS5cuZfPmcOr9+++/T2lpKSUlJfTt25e5c+cCsPy15Tz24O+0/TkcTVWUiNDbpkaURI3AobRSLRYHJidms8D15R5Vq839/Q8Nw4E3NWRQS8MNykD4NVJKgsK5o0okB25fVzsFHsGBJwqbNCkUnQOPYwXVPgrFSCuPb0mDXYEnplBQVdNvYlcwAszSBHVBsk5MwwI3nJjWvqi/PrNv8t3TbYiwpvUvTt3Srfx4pAUevZ+GRiAQYOnSpUyYMIF+/bT+MNOmTeOFF15g4MCBBINBPvvsM4QQjBo3iq4ZXfnqe2cF3lQQeqiOPY/BsQtRA6PtKXD9h5RmIk90txcgflPjFozKPefh7fgefTsWmxeIJwkFnsgCz0zxcLgyEN9qMuOjldjcswFDgSvRxayiZKxtSGcyCryOFIpQwhZ4VOYqDRNG6E/IgXtiUijptbUoX70Zvt0IQLeagFaL0KvSORCkU1BqMtl+y3aBClJkCJ+ikhbyEkIrRZCi+igMVuHN7Qc/+39xDxsIBLjoootYvWYdhcf34aW/LWbLli38z1VXUX70KOl5Hfjbs0vIz89n5MiRlJSU8N577zF58mRefvll/vOf/3DXXXfx4osvsnfvXvLzte7xqqrSr18/jtQcYenipezcvJNZc+bx69nX0iW1hg83fcqu/Ye59+EnufefS1i9ejWlpaUsWLCgdvNWCxiGlF1Bp3hVenRMozoo+ebHCocR9UebU+DS9AAbNSN0zjjKgdc6Tz3D04HD+87Ap8uvSIkHqMKZQrEq8Hip9C/9Yjgrt30fl19dcPkwWAQ4ZDkCkD9QK+j/yT+inZimUozezEzkSVY7mg0P4lngeiMJiwJPj1vG0hBGtUQuRe5fyPpxjicVduJXo3tRnKA7uaKoMZ2Y9YE1gcjnURBCJoy31iUCBEKopEgJnsTFmD777DP+9Kc/cdNv+3P79TN54okn+Mc//sFzDz1ETseO/H7Va8yZM4enn34agOrqatatWwfA1q1bmTBhAueeey4As2fPpnfv3owcOZJx48ZpyTBmcFlY/h9+PMTqZQt59LVPuWbaFFavWskf//hHhgwZQllZGSUlJUnNU20RS4EDZKX5OHCk2mFNw6B1arF4sKfS6zey3eFXl5ZqLQHt070crgqET5NwfHNcCkWJpFC0bLfwgmNzMjg2JyPusft37aDvNMZlc9U78OMuTYEbpVot5WSvOKUnEwZ2idrMaOKbtIGin1MoRgEtTUZtXTs9M/Rnh8tpH0rMsgshYnLgCvULI0zzeZh9+vEJxylCiSj/kFYfBX7GfeZHe1J8LOLq8A/b+SZYQVdvJgdrOnGosoY0n8pxDkXVYqF79+4MHz6cj3cd5Myzz+f5PzzKpk2bmKA3U6gUQQq69zTHX3DBBTH3dfvtt3PhhRfy+uuv8+yzz7J48WJeeSO6bt5Zp49ACEGvPv3IzskxC1P179+fnTt3Np4Cj0GhmOv1vy6FkgSy0jQHT6cMzUowlENUCeNWqsA7pPn4+kAFhywOPI/RdcfJAseZQvGqSpLWlwVmhmKcyyY9FxBwaLc+Nswn/3qCc89rRY9bl8k6loUggGr2h3Qeo60bVFnFC3sP0efIweT2jeWhb3cSU79EnqSPL4SNQmna29SJK68teWR/28vMzKR///68/Yc/APBlLvTJDVflM4paxUJhYSHXXHMNM2bMICcnJ6Lka9f2qXhVBb9Pz0RWFLN6JBBRjrYxYFrgsS6NRtTgrZMIjgMzVMunZyWarYts1lQDZWI2Na7+SSGgdX8BUCR0CQQ4//jzGZo/NGq8UffYIzzhHCehlXeN57B0hKnA48ydxwcZuXDw68ht4sCguQbkDEwwMowgagIKRafQgL5HDtZK/cSywDsEg3RIwopvCFjLBDcUhVJbCCHiJmDFw1dffcXq1asBWP6vvzNs2DD27dvHB2VlANQEavjkk08ct83MzOTw4cPm93/9619mOdetW7eiqirt27c313fK8JOR0oy2aBLZoI2FNmeBmw4ZPfpEsdVCCQ+r26lnpXqTyppsLIwvyo+IIRdIPEhuO+k2x/HWMELDKlKFQFUEtQ6PTcYCB2jXBfZ8qI9NrHy8ipdnxz9LQVZB0qIEhZpUFEpdoBhcse0B90zJDaTmNVwt53iIsMATOD0bGuFoE2E2y6gtevfuzRNPPMH69evp168fs2bNYuzYscy8/HIOlZdzVAS56fqb6N+/f9S2U6ZMYcaMGTz66KMsWbKEv/zlL8yePZu0tDQ8Hg+LFi0ye5Q2RDZnfSFMBe5SKPWGMMvF6tSB0SDWHoVSRwrlg1tH11m2xoDmXooNM9TQkkqvKIYCr+XFbyjFhAq8a1iBJ1nkqygnuWxUAyHUcNEpJ9TDSW1SKDbrs8OQGXXeZ20RKwqlKSEIx++H7AHjcVBQUMCnn34atbykpIQ3Fi4EYGdn6JutPQzt9bmHDx8eEQf+3HPPOR7nV1f9inSvRr0sWLDAvOa6dj+Gt1evM8c1ZgQKJH6IZKR46JWXGVFNtKHQ5hS4/TVfMcMIbTG9dXw1TJSE0dTQYpNjr49M5DGWCVQlOqww8cGMt5skFLi5TePMVxAlKQ68LhBWrqmZYCTyKEJrQdeUsFrghgIPNjD33xCWc4bP2el+fCMpy1gwfCWxZsijKDSWOG1OgZtJCKpdgdvHtQ36X3hSUDr0ibk+IgrF0r1dVZwzMeMfLFkL3BJp0ki+hpBIZIHXg0IxnZjNrMAFLLh0KAP1ZghNDSHCb2mBWljgyaAx+eKmNrLaqSl8V1NOe0/8tnaNgTanwE3L24h+MEqV2m5GpY34bxXVj5LWMfb6iDhwbZmqaM4pp4YOcZE0B974Fnhaih+/N048cj0UuPHwb85kL8OJOeL4nCY/tjXj0iwW1cAWeNO4gpsGPsVL/+pqSG/6+kptToELe/y33t0kXtW11gwRIwPTgFM5WVURzDi1Z8K47+idJanAs4+zCli7YyQJv88Hvjgp+PWiUAzHd/MpcCsH3vQH1/4I6uAnSYCQT0GpbiT1nd270d744sK8/5r+B2tzCjzcSi2ynKywR6G0FQpFOBccMuBUTlYRgunDe8bcJv4BlcQ3SX5J5PjGgOKJL4d9nScVAhXJ7Vp1jgNvSlgTeZoaqUKhXSiET3ga/CEWzPbzVaCyQfdpwtf0FAYQNlKa4fdqG1rMArOVmh7/bXY8t0ehtIDwo4aAov+LhSx/FmmeNLpmdLVY4PU4oFATW+BCwM9fgM7FkJEXf2xdkVCB22RMz05+1yaF0nzXSEg0T1wxgFcodA8EUIVIujdlslCEMFsAthk044O+rU2lhULRb8JYUSj/JRRKpi+TVVNXMSx/GEeqtHrJHdJqWf0v4oBKciF6x4+Fq99tPKtI8cSnSezrUuLXH4nYNEbuQFOiWSkUI7rDm9og98ncuXN54IEHuP3221mxYlXMcfYysrfffjtvvvkmACNHjjRrpRQUFFBUVERJSQlFRUW89NJLtZbpkUce4ejRo+b3p59+mqKiIoqLixkwYIC5T6sMMeFSKA2HcDNj3ZlpcuDNJVHjQhBfgYMWgQLQPk17G/nNxOjkiaShqLGLWTUlFDWBBW6bE3/8Oh6pJSVU6FmCLcGJqZWTbaaLNq2jNl9q+HeudcipA+68804qf9jJF8EjjuvtZWTvvPPOmPtavnw52dnZfPbZZ4wZM4ZJkyYlLUcwGOSRRx7hoosuIi0tjV27dnH33XezYcMGsrKyKC8vZ9++fQllMOFNg/bHgL+WPqUGQJtT4CYHrlMoZqGkNsJ526Fx28md25UjjmVSSRd6dIpfdyIukuHAmwKKJ/6bgH1dAgXe49lFZjELk0Jpxno5oQaywH+75rd8eiA6qaY2MHtBa1Vp6dOxDzcNvSnuNnfffTcLFy4kNzeX7t27c+KJJzJ9+nTGjSql6MwRPHznw6x6cxUej4cxY8Zw9tlnR5WR/b//+7+IqoROOHToEB06dDC///Wvf+XRRx+lurqa0tJSnnzySVRVJSMjg6uuuoo333yTc845hz179jBq1Ciys7N58MEHyczMJCNDU8AZGRnm5+nTp5syFBQUMHXqVF599VU8Hg/z58/nlltuYdu2bdx4441cffXV9ZjluqHNKXCzlrMZBx7Z1LitIRkL3ECKV62f8obkOPCmgOKJ/1C2K19/O7jsdTj8jfNwi7VtdHFqzkQempNCsaG207B+/Xqee+45ysrKCAQCDBo0iBNPPBEABcHBAwd565W32L51O0IIDh48SPv27Zk4cWJChW1g1KhRSCnZvn07L7zwAgBbtmzh+eefZ+XKlXi9Xq699loWLVrEJZdcwpEjRygtLeXBBx8ENMrEsOKDwSB5eXn07NmT0aNHc/bZZ3PWWWc5HveYY46hrKyM2bNnM336dFauXEllZSUDBgxofQpcCDEO+B1aobY/SinvS7BJ48OMQglz3yFBs/KZjQkhRNM6ZIVoGQq84FTwxGkt5mSBH1Oa1K6FR2v9IJrxTaOhnJiJLOXGwLvvvsvkyZNJS9P8HxMnTjTXCdVLRrsMfCk+Lr/8ciZMmMCECRNqfQxD+X7xxReMHj2akSNH8tZbb7F+/XqGDBkCQEVFBbm5uYDWCOKcc85x3Jeqqrz22musXbuWt956i9mzZ7N+/XqzdZsVxrkUFRVRXl5OZmYmmZmZ+P1+80HUlKjznSi098sngNOBXcBaIcTLUsrN8bdsXJgcuCXdOyTajtPSjtpQKA1zwBZigf/0jvjr7co3AYUSsamiEtQ+1FqshkKzOjEbEcKXjsfj4bl/P8c3H33DkiVLePzxx3n77bfrtL/CwkLy8vLYvHkzUkqmTZvGvffeGzUuJSUFVY39QBZCMHToUIYOHcrpp5/OpZde6qjA/X7NaFAUxfxsfG/MkrWxUJ8rdCiwTUq5XUpZDTwHJO9JaCQo9hoo6DdCG1XgtaFQGuaALYQDTwT7nKS2T3pTw/Hd/E7MZjt8vTBixAiWLl1KRUUFhw8fZtmyZeGVioej5Uc5fOgw48eP5+GHH+ajjz4CosvIJoO9e/eyY8cOevTowejRo1myZAl79+4F4MCBA3z55ZeO21mPtWfPHjZs2GCuKysro0ePHrWSo7lQH1OqK/C15fsuIOodVQhxJXAlaPxRY6NzyansznmfQb2Hmct29/CQ2Td2vZDWDI/iwdOUFrFQIqITWiysc3LidBh6VdKb5h5fyrocQZeS4Q0vV5I42CMNJSNx67KWiEGDBnHBBRcwcOBAcnNzTUrDwJHyI8y6ZBYiIJBS8tBDDwHRZWTjYdSoUaiqSk1NDffddx95eXnk5eVx1113MWbMGEKhEF6vlyeeeMJRGV955ZWMGzeOLl26sGDBAm644Qb27NlDSkoKOTk5/P73v2+4CWlEiLrWOBBCnAuMk1JeoX+/GCiVUs6Mtc3gwYOlEcvZElC0UCthunHaxmaWpO5YtXsVOWk59OrQq2kO+GBfKBgO5/yxaY5XV1QfgXu6aIr89v2Jx7chbNmyhb59+za3GDHxyfdaI4f+2fUIZ23DcPr9hBDrpZSD7WPrY7rtBrpbvnfTl7loQpzc9eSmPaDiaRlx4Alh1A1oAXy9CxeNhPpc3WuBXkKInmiKewrw8waRykXLxdi7oH0r4Ae9qTD4MhjoXpIu2i7qrMCllAEhxEzg32hhhE9LKZ2b3LloO+jX7H7q5CAETHi4uaVw4YDj2h9HqE0VlG0+1Ov9Ukr5CvBKA8niwoWL/wL448Xvu6gV2mZ+uQsXLlz8F8BV4C5cuHDRSuEqcBcuXDQ5VqxYUacUeisWLFjAnj17Eo6bPn06PXv2pKSkhD59+vCb3/ym1seyl7p9//33KS0tpaSkhL59+5pZmy+//DL33dd0FUVcBe7ChYtGg5SSUKjhHZbBYDBpBQ4wb948ysrKKCsrY+HChezYsSPpYwUCgSgFPm3aNObPn09ZWRmbNm3i/PPPB7RaKTfffHPtTqYecINkXbhow/j2nnuo2lK/crJ2+Pv2ofOtt8Zcv3PnTsaOHUtpaSnr169n6NChrF27FiEEv/71r7ngggsArRTsmWeeybZt2xg1ahRPPvkkiqLw+uuvc8cdd1BVVUVhYSHPPPMMGRkZFBQUcMEFF/DGG29w3XXXsW7dOi688EJSU1NZvXo18+bNY9myZVRUVHDyySfz1FNPRdVAqqzU2rmlp2tVOdevX891111HeXk52dnZLFiwgPz8fEaOHElJSQnvvfcekydPjip1u3fvXvLz8wGtGJZRw3zBggWsW7eOxx9/nOnTp5OamsqHH37I3r17efrpp/nzn//M6tWrKS0tZcGCBfX+LVwL3IULFw2OrVu3cu2113LnnXeya9cuPvroI958801uvPFGvvlGK+m7Zs0aHnvsMTZv3swXX3zB3//+d77//nvuuusu3nzzTTZs2MDgwYPNVHuATp06sWHDBi666CIGDx7MokWLKCsrIzU1lZkzZ7J27Vo2bdpERUUF//znP83tbrzxRkpKSujWrRtTpkwhNzeXmpoaZs2axZIlS1i/fj2XXXYZc+bMMbeprq5m3bp1zJkzh4kTJ5pWfGFhIbNnz6Z3795MnjyZp556ynww2PHDDz+wevVqHn74YSZOnMjs2bP55JNP2LhxI2V6A5H6wLXAXbhow4hnKTcmevTowbBhw5g9ezZTp05FVVXy8vL4yU9+wtq1a2nXrh1Dhw7l2GOPBWDq1Km89957pKSksHnzZoYP1+rQVFdXc9JJJ5n7Nax3Jyxfvpz777+fo0ePcuDAAfr372/W9Z43bx7nnnsu5eXljB49mlWrVtGuXTs2bdrE6aefDmi0jGFVJzrW7bffzoUXXsjrr7/Os88+y+LFi1mxYkXUuLPOOgshBEVFReTl5VFUpJXv6N+/Pzt37qSkpCS5CY0BV4G7cOGiwWFQFPFgpzeE0IpbnX766SxevLhW+62srOTaa69l3bp1dO/enblz5zpaxRkZGYwcOZL33nuPM844g/79+7N69eo6nUNhYSHXXHMNM2bMICcnh/37o2vuNHb5WZdCceHCRaPh1FNP5fnnnycYDLJv3z7eeecdhg4dCmgUyo4dOwiFQjz//POccsopDBs2jJUrV7Jt2zYAjhw5wueff+64b2tJWENZZ2dnU15eHrOaYSAQ4IMPPqCwsJDevXuzb98+U4HX1NTwySfOyeT2Urf/+te/MAoBbt26FVVVm7yZA7gK3IULF42IyZMnU1xczMCBAznttNO4//776dy5MwBDhgxh5syZ9O3bl549ezJ58mRycnJYsGABU6dOpbi4mJNOOolPP3V2wk6fPp2rr76akpIS/H4/M2bMYMCAAYwdOzaqhK3BgRcXF1NUVMTZZ5+Nz+djyZIl3HTTTQwcOJCSkhJWrVrleKwpU6Ywb948TjjhBL744gv+8pe/0Lt3b0pKSrj44otZtGhR3IYRjYU6l5OtC1paOdllXywjLy2PoflDm1sUFy4aDC29nKyL+GiqcrKtHmcVOjcudeHChYvWAJdCceHChYtWCleBu3DRBtGU1KiLhkNtfzdXgbtw0caQkpLC/v37XSXeyiClZP/+/aSkpCS9zX81B+7CRVtEt27d2LVrF/v27WtuUVzUEikpKXTr1i3p8a4Cd+GijcHr9dKzZ8/mFsNFE8ClUFy4cOGilcJV4C5cuHDRSuEqcBcuXLhopWjSTEwhxD7gyzpung1834DiNDZceRsPrUlWcOVtTLQmWaHu8vaQUubYFzapAq8PhBDrnFJJWypceRsPrUlWcOVtTLQmWaHh5XUpFBcuXLhopXAVuAsXLly0UrQmBT6/uQWoJVx5Gw+tSVZw5W1MtCZZoYHlbTUcuAsXLly4iERrssBduHDhwoUFrgJ34cKFi1aKVqHAhRDjhBCfCSG2CSFubm557BBC7BRCbBRClAkh1unLOgoh3hBCbNX/dmhG+Z4WQuwVQmyyLHOUT2h4VJ/rj4UQg1qIvHOFELv1OS4TQoy3rLtFl/czIcTYJpa1uxBiuRBisxDiEyHEr/TlLXJ+48jbUuc3RQixRgjxkS7vb/TlPYUQH+hyPS+E8OnL/fr3bfr6ghYg6wIhxA7L3Jboy+t/LUgpW/R/QAW+AI4FfMBHQL/mlssm404g27bsfuBm/fPNwG+bUb4RwCBgUyL5gPHAq4AAhgEftBB55wI3OIztp18TfqCnfq2oTShrPjBI/5wJfK7L1CLnN468LXV+BZChf/YCH+jz9gIwRV/+e+Aa/fO1wO/1z1OA51uArAuAcx3G1/taaA0W+FBgm5Ryu5SyGngOmNTMMiWDScBC/fNC4GfNJYiU8h3ggG1xLPkmAX+WGt4H2gsh8ptEUB0x5I2FScBzUsoqKeUOYBvaNdMkkFJ+I6XcoH8+DGwButJC5zeOvLHQ3PMrpZTl+lev/l8CpwFG63n7/BrzvgQYLYQQzSxrLNT7WmgNCrwr8LXl+y7iX3DNAQm8LoRYL4S4Ul+WJ6X8Rv/8LZDXPKLFRCz5WvJ8z9RfNZ+2UFItRl79df0ENMurxc+vTV5oofMrhFCFEGXAXuANtLeAg1LKgINMprz6+h+BTs0lq5TSmNu79bl9WAjht8uqo9Zz2xoUeGvAKVLKQcAZwC+EECOsK6X2vtRi4zVbunw6/h9QCJQA3wAPNqs0NgghMoAXgf+RUh6yrmuJ8+sgb4udXyllUEpZAnRDs/77NK9EsWGXVQgxALgFTeYhQEfgpoY6XmtQ4LuB7pbv3fRlLQZSyt36373AP9Ausu+M1yH9797mk9ARseRrkfMtpfxOvzlCwB8Iv8Y3u7xCCC+aMlwkpfy7vrjFzq+TvC15fg1IKQ8Cy4GT0OgGoyGNVSZTXn19FrC/aSWNkHWcTltJKWUV8AwNOLetQYGvBXrpXmcfmmPi5WaWyYQQIl0IkWl8BsYAm9BknKYPmwa81DwSxkQs+V4GLtE95MOAHy1UQLPBxg1ORptj0OSdokcf9AR6AWuaUC4B/AnYIqV8yLKqRc5vLHlb8PzmCCHa659TgdPRePvlwLn6MPv8GvN+LvC2/gbUXLJ+anmQCzSu3jq39bsWmspDW5//aN7az9G4rznNLY9NtmPRvPQfAZ8Y8qHxbm8BW4E3gY7NKONitNfiGjSe7fJY8qF5xJ/Q53ojMLiFyPsXXZ6P9Qs/3zJ+ji7vZ8AZTSzrKWj0yMdAmf5/fEud3zjyttT5LQY+1OXaBNyuLz8W7UGyDfgb4NeXp+jft+nrj20Bsr6tz+0m4K+EI1XqfS24qfQuXLhw0UrRGigUFy5cuHDhAFeBu3DhwkUrhavAXbhw4aKVwlXgLly4cNFK4SpwFy5cuGilcBW4CxcuXLRSuArchQsXLlop/j+bObxeOWf4gAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "wordsimDF1.plot.line()" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "id": "appointed-tablet", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# cosine_similarity([encodingsMap['Q847337']], [encodingsMap['Q551800']])" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "adaptive-bride", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "beautiful-wages", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37975882843235137, pvalue=5.235465664921023e-26)" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "equivalent-wireless", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37556037504702056, pvalue=1.7903693658447951e-25)" - ] - }, - "execution_count": 126, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLargeSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "informal-error", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3529686820781901, pvalue=1.0899920454225404e-22)" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['distilBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "allied-vulnerability", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3156122362936971, pvalue=1.8520533516011967e-18)" - ] - }, - "execution_count": 139, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBaseBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "victorian-seeking", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3583059753020537, pvalue=2.481962318957373e-23)" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fallen-action", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "smart-musician", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5388523544692222, pvalue=1.1269721214604893e-27)" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "stock-agent", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5316995237579449, pvalue=7.350680368606645e-27)" - ] - }, - "execution_count": 127, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLargeSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "wrapped-batman", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5043971026064306, pvalue=6.35665360448366e-24)" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['distilBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "fallen-professor", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4564962071637959, pvalue=2.286865863469491e-19)" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBaseBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "fewer-stock", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5120576203985243, pvalue=1.0133475563672188e-24)" - ] - }, - "execution_count": 98, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBertSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "attractive-dressing", - "metadata": {}, - "source": [ - "# Version 1 - Embeddings of Labels" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "royal-bahrain", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "threatened-roman", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "31" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "flexible-metropolitan", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1 = wordsimDF.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "superb-machinery", - "metadata": {}, - "outputs": [], - "source": [ - "def getV1Embeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.node2_labelsDF.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['g_qnode']]], [encodingsMap[row['p_qnode']]])\n", - " else:\n", - " return 0\n", - "\n", - "def getCoverage(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return 1\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "excess-sight", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.568063735961914 s\n" - ] - } - ], - "source": [ - "bertLabelsEnc = getV1Embeddings('bert-base-nli-mean-tokens')\n", - "bertLabelsEncMap = getMap(bertLabelsEnc)\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertLabelsSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "metropolitan-sunglasses", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(118, 118, 1.0)" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertLabelsEncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "entire-branch", - "metadata": {}, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'Human (Mean)'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3079\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3080\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3081\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'Human (Mean)'", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mstats\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkendalltau\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwordsimDF1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Human (Mean)'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_list\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwordsimDF1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'bertLabelsSim'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3022\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlevels\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3023\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3024\u001b[0;31m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3025\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3026\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3080\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3081\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3082\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3083\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3084\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtolerance\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'Human (Mean)'" - ] - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "positive-clone", - "metadata": {}, - "outputs": [], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "choice-alfred", - "metadata": {}, - "source": [ - "# Amandeep's file generation" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "attached-persian", - "metadata": {}, - "outputs": [], - "source": [ - "# q1 = \"kgtk query -i ../data/wikidataos.for.text-embedding.tsv.gz --match '(node1)-[]->(node2)' --where 'node1 in [\" + \",\".join(['\"'+word1+'\"' for word1 in wordsimQNodesListWAbstractsLabelsDF2.index.to_list()]) + \"]' -o ../data/wikidataos.for.text-embedding.subset2.tsv\"\n" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "fleet-finder", - "metadata": {}, - "outputs": [], - "source": [ - "# import os\n", - "# os.system(\"screen -dm \"+q1)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "fancy-personality", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataOSDF = pd.read_csv('../data/wikidataos.for.text-embedding.subset2.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "broke-grave", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2ranknode2;wikidatatype
0Q104021-P1245-868aab-b3f18d7b-0Q104021P12451412normalexternal-id
1Q104021-P1296-7a59c3-5f49b5a7-0Q104021P12960108342normalexternal-id
2Q104021-P1343-Q19180675-e305e6f3-0Q104021P1343Q19180675normalwikibase-item
3Q104021-P1343-Q2657718-2d01d189-0Q104021P1343Q2657718normalwikibase-item
4Q104021-P1343-Q4091875-50bd890f-0Q104021P1343Q4091875normalwikibase-item
\n", - "
" - ], - "text/plain": [ - " id node1 label node2 rank \\\n", - "0 Q104021-P1245-868aab-b3f18d7b-0 Q104021 P1245 1412 normal \n", - "1 Q104021-P1296-7a59c3-5f49b5a7-0 Q104021 P1296 0108342 normal \n", - "2 Q104021-P1343-Q19180675-e305e6f3-0 Q104021 P1343 Q19180675 normal \n", - "3 Q104021-P1343-Q2657718-2d01d189-0 Q104021 P1343 Q2657718 normal \n", - "4 Q104021-P1343-Q4091875-50bd890f-0 Q104021 P1343 Q4091875 normal \n", - "\n", - " node2;wikidatatype \n", - "0 external-id \n", - "1 external-id \n", - "2 wikibase-item \n", - "3 wikibase-item \n", - "4 wikibase-item " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikidataOSDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "behavioral-layout", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk query -i ../data/wikidataos.for.text-embedding.subset2.tsv \\\n", - "# --match '(node1)-[]->()' \\\n", - "# --return 'count(distinct node1)'" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "resistant-jungle", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk text-embedding -i ../data/wikidataos.for.text-embedding.subset2.tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/wikidataos-text-embeddings-subset2.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "humanitarian-divide", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(set(wordsimQNodesListWAbstractsLabelsDF2.index.to_list()))" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "unique-accuracy", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataOSEmbDF = pd.read_csv('../data/wikidataos-text-embeddings-subset2.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "smooth-librarian", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataOSEmbDF1 = wikidataOSEmbDF[wikidataOSEmbDF.property == 'text_embedding'].loc[:,['node','value']]" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "wired-surveillance", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodevalue
0Q9980.50568223,-0.10802102,-0.3486761,0.78598565,-...
2Q99496317-0.663889,1.3066527,0.7410443,0.7310645,-0.086...
4Q980698770.79087067,0.6158045,0.18239851,-0.44384396,-0...
6Q964401-0.4146536,0.36972183,-0.9731038,0.72235125,0....
8Q96350.085437864,0.50590533,-0.7758463,0.575578,1.1...
\n", - "
" - ], - "text/plain": [ - " node value\n", - "0 Q998 0.50568223,-0.10802102,-0.3486761,0.78598565,-...\n", - "2 Q99496317 -0.663889,1.3066527,0.7410443,0.7310645,-0.086...\n", - "4 Q98069877 0.79087067,0.6158045,0.18239851,-0.44384396,-0...\n", - "6 Q964401 -0.4146536,0.36972183,-0.9731038,0.72235125,0....\n", - "8 Q9635 0.085437864,0.50590533,-0.7758463,0.575578,1.1..." - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikidataOSEmbDF1.head()" - ] - }, - { - "cell_type": "markdown", - "id": "loved-serial", - "metadata": {}, - "source": [ - "# Version 2 - Comparison of cosine similarity measures with Amandeep's original file new pairs" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "novel-milwaukee", - "metadata": {}, - "outputs": [], - "source": [ - "import json" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "computational-vinyl", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['amanSim'] = amanEncSim * 10\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['amanSim'] = wordsimDF1.amanSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "amanEncMap = {row['node']: json.loads('['+row['value']+']') for _, row in wikidataOSEmbDF1.iterrows()}\n", - "amanEncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(amanEncMap, ))\n", - "wordsimDF1['amanSim'] = amanEncSim * 10\n", - "wordsimDF1['amanSim'] = wordsimDF1.amanSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "virtual-sodium", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(330, 349, 0.9455587392550143)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(amanEncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "dated-delta", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3654839025870469, pvalue=3.731075991381434e-24)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['amanSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "realistic-belize", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5075204852629356, pvalue=3.0234963712614295e-24)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['amanSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "hourly-armor", - "metadata": {}, - "source": [ - "# Version 3 - P31, P279 edges from lexicalized version" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "empty-laugh", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# !kgtk text-embedding -i ../data/wikidataos.for.text-embedding.subset2.tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 \\\n", - "# --save-embedding-sentence > ../data/wikidataos-text-embeddings-subset3.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "biological-enhancement", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataV3DF = pd.read_csv('../data/wikidataos-text-embeddings-subset3.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "silent-logging", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataV3DF = wikidataV3DF[wikidataV3DF.property == 'text_embedding'].loc[:,['node','value']]" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "color-sword", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodevalue
0Q9980.60533667,-0.32207027,-0.19160181,0.70176995,...
2Q99496317-0.663889,1.3066527,0.7410443,0.7310645,-0.086...
4Q980698770.79087067,0.6158045,0.18239851,-0.44384396,-0...
6Q964401-0.3510175,0.29355207,-1.0211854,0.35043457,1....
8Q9635-0.010522888,0.4303582,-0.76446587,0.26379517,...
\n", - "
" - ], - "text/plain": [ - " node value\n", - "0 Q998 0.60533667,-0.32207027,-0.19160181,0.70176995,...\n", - "2 Q99496317 -0.663889,1.3066527,0.7410443,0.7310645,-0.086...\n", - "4 Q98069877 0.79087067,0.6158045,0.18239851,-0.44384396,-0...\n", - "6 Q964401 -0.3510175,0.29355207,-1.0211854,0.35043457,1....\n", - "8 Q9635 -0.010522888,0.4303582,-0.76446587,0.26379517,..." - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikidataV3DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "essential-virtue", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['wikiV3EncSim'] = wikiV3EncSim * 10\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['wikiV3EncSim'] = wordsimDF1.wikiV3EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "import json\n", - "wikiV3EncMap = {row['node']: json.loads('['+row['value']+']') for _, row in wikidataV3DF.iterrows()}\n", - "wikiV3EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(wikiV3EncMap, ))\n", - "wordsimDF1['wikiV3EncSim'] = wikiV3EncSim * 10\n", - "wordsimDF1['wikiV3EncSim'] = wordsimDF1.wikiV3EncSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "charming-indicator", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(330, 349, 0.9455587392550143)" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(wikiV3EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "dependent-sensitivity", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.33429987563573715, pvalue=1.805960166533804e-20)" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['wikiV3EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "fresh-correspondence", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4737260118146468, pvalue=6.343179394616253e-21)" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['wikiV3EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "specified-tomorrow", - "metadata": {}, - "source": [ - "# Version 4 - First sentence of abstract vs human" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "opposite-discipline", - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "single-antigua", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "324" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "structured-specialist", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.abstract.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "unnecessary-outdoors", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1['abstractFirstSent'] = wordsimQNodesListWAbstractsLabelsDF1.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "breathing-purchase", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDFabstractFirstSent
node1
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...floodA flood is an overflow of water that submerges...
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...moneyMoney is any item or verifiable record that is...
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radioRadio is the technology of signaling and commu...
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergencyAn emergency is a situation that poses an imme...
Q213449EatingQ213449-wikipedia_sitelink-1e88be-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Eating104645.0<http://dbpedia.org/resource/Eating><http://www.w3.org/2000/01/rdf-schema#comment>Eating (also known as consuming) is the ingest...eatingEating (also known as consuming) is the ingest...
\n", - "
" - ], - "text/plain": [ - " index id label \\\n", - "node1 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 wikipedia_sitelink \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 wikipedia_sitelink \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 wikipedia_sitelink \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 wikipedia_sitelink \n", - "Q213449 Eating Q213449-wikipedia_sitelink-1e88be-0 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q8068 http://en.wikipedia.org/wiki/Flood 23841.0 \n", - "Q1368 http://en.wikipedia.org/wiki/Money 1312979.0 \n", - "Q872 http://en.wikipedia.org/wiki/Radio 1866867.0 \n", - "Q5070802 http://en.wikipedia.org/wiki/Emergency 80429.0 \n", - "Q213449 http://en.wikipedia.org/wiki/Eating 104645.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "Q213449 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "Q213449 \n", - "\n", - " abstract node2_labelsDF \\\n", - "node1 \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency \n", - "Q213449 Eating (also known as consuming) is the ingest... eating \n", - "\n", - " abstractFirstSent \n", - "node1 \n", - "Q8068 A flood is an overflow of water that submerges... \n", - "Q1368 Money is any item or verifiable record that is... \n", - "Q872 Radio is the technology of signaling and commu... \n", - "Q5070802 An emergency is a situation that poses an imme... \n", - "Q213449 Eating (also known as consuming) is the ingest... " - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "surgical-title", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "grateful-harassment", - "metadata": {}, - "outputs": [], - "source": [ - "def getFirstSentEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF1.abstractFirstSent.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getFirstSentMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF1.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['g_qnode']]], [encodingsMap[row['p_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "owned-helen", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.5808649063110352 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV4EncSim'] = bertV4EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV4EncSim'] = wordsimDF1.bertV4EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV4Enc = getFirstSentEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV4EncMap = getFirstSentMap(bertV4Enc)\n", - "bertV4EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV4EncMap, ))\n", - "wordsimDF1['bertV4EncSim'] = bertV4EncSim\n", - "wordsimDF1['bertV4EncSim'] = wordsimDF1.bertV4EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV4EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "christian-median", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(239, 349, 0.6848137535816619)" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV4EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "nervous-cycling", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSim
05.53606.8096724.9497385.1456013.770548
14.12504.5548774.8182313.9870474.168040
26.62507.6438156.4070515.6696314.997217
32.06257.1948996.1864976.1864970.000000
47.18758.1378798.5566649.0984080.000000
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548\n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040\n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217\n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000\n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "retired-cookie", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "future-boring", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3633652092919623, pvalue=2.1070516667335453e-22)" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV4EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "composite-lebanon", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.49261494527923566, pvalue=9.798975953928462e-23)" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV4EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "occupational-rough", - "metadata": {}, - "source": [ - "# Version 5 - DBPedia's short abstracts vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "effective-elements", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "22" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "graduate-congress", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "little-yukon", - "metadata": {}, - "outputs": [], - "source": [ - "def getAbsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF1.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getAbsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF1.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['g_qnode']]], [encodingsMap[row['p_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "choice-seating", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.15574932098388672 s\n" - ] - } - ], - "source": [ - "bertV5Enc = getAbsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV5EncMap = getAbsMap(bertV5Enc)\n", - "bertV5EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV5EncMap, ))\n", - "wordsimDF1['bertV5EncSim'] = bertV5EncSim\n", - "wordsimDF1['bertV5EncSim'] = wordsimDF1.bertV5EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV5EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "computational-crime", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(58, 118, 0.4915254237288136)" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV5EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "durable-import", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Indexg_qnodep_qnodeq1_labelq2_labelcomplextransetextclassnode2vec-v0H_3x6H_5x8bertLabelsSimbertV5EncSim
011Q17221Q189290spokespersonmilitary officer0.250.110.620.650.270.680.455.6703994.803427
13Q702269Q2285706professionalhead of government0.290.390.590.570.130.470.294.4716325.585540
25Q2285706Q82955head of governmentpolitician0.360.260.840.550.050.610.647.2598486.529090
311Q107711Q189290firefightermilitary officer0.290.220.580.520.340.780.494.5959714.234194
43Q702269Q48352professionalhead of state0.300.270.610.520.040.490.335.1300804.503454
\n", - "
" - ], - "text/plain": [ - " Index g_qnode p_qnode q1_label q2_label complex \\\n", - "0 11 Q17221 Q189290 spokesperson military officer 0.25 \n", - "1 3 Q702269 Q2285706 professional head of government 0.29 \n", - "2 5 Q2285706 Q82955 head of government politician 0.36 \n", - "3 11 Q107711 Q189290 firefighter military officer 0.29 \n", - "4 3 Q702269 Q48352 professional head of state 0.30 \n", - "\n", - " transe text class node2vec-v0 H_3x6 H_5x8 bertLabelsSim bertV5EncSim \n", - "0 0.11 0.62 0.65 0.27 0.68 0.45 5.670399 4.803427 \n", - "1 0.39 0.59 0.57 0.13 0.47 0.29 4.471632 5.585540 \n", - "2 0.26 0.84 0.55 0.05 0.61 0.64 7.259848 6.529090 \n", - "3 0.22 0.58 0.52 0.34 0.78 0.49 4.595971 4.234194 \n", - "4 0.27 0.61 0.52 0.04 0.49 0.33 5.130080 4.503454 " - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "champion-waste", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "pretty-observation", - "metadata": {}, - "outputs": [], - "source": [ - "# stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV5EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "adverse-calculator", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV5EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "sexual-leone", - "metadata": {}, - "source": [ - "# Version 6 - DBPedia's short abstracts + labels vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "elder-refund", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q11499147NaNNaNNaNNaNNaNNaNNaNpolitical activistpolitical activist
Q1048835Political_divisionQ1048835-wikipedia_sitelink-a3aa16-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Political_divisionNaNNaNNaNpolitical territorial entitypolitical territorial entity
Q27096235NaNNaNNaNNaNNaNNaNNaNartificial geographic entityartificial geographic entity
Q48352Head_of_stateQ48352-wikipedia_sitelink-0ba458-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Head_of_state5945.0<http://dbpedia.org/resource/Head_of_state><http://www.w3.org/2000/01/rdf-schema#comment>A head of state (or chief of state) is the pub...head of state
Q83307Minister_(government)Q83307-wikipedia_sitelink-519dcf-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Minister_(governm...243508.0<http://dbpedia.org/resource/Minister_(governm...<http://www.w3.org/2000/01/rdf-schema#comment>A minister is a politician who heads a ministr...minister
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 Political_division Q1048835-wikipedia_sitelink-a3aa16-0 \n", - "Q27096235 NaN NaN \n", - "Q48352 Head_of_state Q48352-wikipedia_sitelink-0ba458-0 \n", - "Q83307 Minister_(government) Q83307-wikipedia_sitelink-519dcf-0 \n", - "\n", - " label \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 wikipedia_sitelink \n", - "Q27096235 NaN \n", - "Q48352 wikipedia_sitelink \n", - "Q83307 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 http://en.wikipedia.org/wiki/Political_division NaN \n", - "Q27096235 NaN NaN \n", - "Q48352 http://en.wikipedia.org/wiki/Head_of_state 5945.0 \n", - "Q83307 http://en.wikipedia.org/wiki/Minister_(governm... 243508.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 NaN \n", - "Q27096235 NaN \n", - "Q48352 \n", - "Q83307 \n", - "Q83307 \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q11499147 political activist \n", - "Q1048835 political territorial entity \n", - "Q27096235 artificial geographic entity \n", - "Q48352 A head of state (or chief of state) is the pub... \n", - "Q83307 A minister is a politician who heads a ministr... \n", - "\n", - " node2_labelsDF \n", - "node1 \n", - "Q11499147 political activist \n", - "Q1048835 political territorial entity \n", - "Q27096235 artificial geographic entity \n", - "Q48352 head of state \n", - "Q83307 minister " - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "inclusive-gender", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "31" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "dental-choice", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "understanding-insured", - "metadata": {}, - "outputs": [], - "source": [ - "def getAbsLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getAbsLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['g_qnode']]], [encodingsMap[row['p_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "political-manufacturer", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.17983198165893555 s\n" - ] - } - ], - "source": [ - "bertV6Enc = getAbsLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV6EncMap = getAbsLabsMap(bertV6Enc)\n", - "bertV6EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV6EncMap, ))\n", - "wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - "wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV6EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "oriental-olympus", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(118, 118, 1.0)" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV6EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "simplified-recipient", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Indexg_qnodep_qnodeq1_labelq2_labelcomplextransetextclassnode2vec-v0H_3x6H_5x8bertLabelsSimbertV5EncSimbertV6EncSim
011Q17221Q189290spokespersonmilitary officer0.250.110.620.650.270.680.455.6703994.8034274.803428
13Q702269Q2285706professionalhead of government0.290.390.590.570.130.470.294.4716325.5855405.585539
25Q2285706Q82955head of governmentpolitician0.360.260.840.550.050.610.647.2598486.5290906.529088
311Q107711Q189290firefightermilitary officer0.290.220.580.520.340.780.494.5959714.2341944.234195
43Q702269Q48352professionalhead of state0.300.270.610.520.040.490.335.1300804.5034544.503455
\n", - "
" - ], - "text/plain": [ - " Index g_qnode p_qnode q1_label q2_label complex \\\n", - "0 11 Q17221 Q189290 spokesperson military officer 0.25 \n", - "1 3 Q702269 Q2285706 professional head of government 0.29 \n", - "2 5 Q2285706 Q82955 head of government politician 0.36 \n", - "3 11 Q107711 Q189290 firefighter military officer 0.29 \n", - "4 3 Q702269 Q48352 professional head of state 0.30 \n", - "\n", - " transe text class node2vec-v0 H_3x6 H_5x8 bertLabelsSim \\\n", - "0 0.11 0.62 0.65 0.27 0.68 0.45 5.670399 \n", - "1 0.39 0.59 0.57 0.13 0.47 0.29 4.471632 \n", - "2 0.26 0.84 0.55 0.05 0.61 0.64 7.259848 \n", - "3 0.22 0.58 0.52 0.34 0.78 0.49 4.595971 \n", - "4 0.27 0.61 0.52 0.04 0.49 0.33 5.130080 \n", - "\n", - " bertV5EncSim bertV6EncSim \n", - "0 4.803427 4.803428 \n", - "1 5.585540 5.585539 \n", - "2 6.529090 6.529088 \n", - "3 4.234194 4.234195 \n", - "4 4.503454 4.503455 " - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "convenient-glory", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "split-doctor", - "metadata": {}, - "outputs": [], - "source": [ - "# stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "criminal-tragedy", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "certified-compact", - "metadata": {}, - "source": [ - "# Version 7 - 1st sentence + label vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "billion-southwest", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "relevant-looking", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2['abstractFirstSent'] = wordsimQNodesListWAbstractsLabelsDF2.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "based-duplicate", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDFabstractFirstSent
node1
Q11499147NaNNaNNaNNaNNaNNaNNaNpolitical activistpolitical activistpolitical activist
Q1048835Political_divisionQ1048835-wikipedia_sitelink-a3aa16-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Political_divisionNaNNaNNaNpolitical territorial entitypolitical territorial entitypolitical territorial entity
Q27096235NaNNaNNaNNaNNaNNaNNaNartificial geographic entityartificial geographic entityartificial geographic entity
Q48352Head_of_stateQ48352-wikipedia_sitelink-0ba458-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Head_of_state5945.0<http://dbpedia.org/resource/Head_of_state><http://www.w3.org/2000/01/rdf-schema#comment>A head of state (or chief of state) is the pub...head of stateA head of state (or chief of state) is the pub...
Q83307Minister_(government)Q83307-wikipedia_sitelink-519dcf-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Minister_(governm...243508.0<http://dbpedia.org/resource/Minister_(governm...<http://www.w3.org/2000/01/rdf-schema#comment>A minister is a politician who heads a ministr...ministerA minister is a politician who heads a ministr...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 Political_division Q1048835-wikipedia_sitelink-a3aa16-0 \n", - "Q27096235 NaN NaN \n", - "Q48352 Head_of_state Q48352-wikipedia_sitelink-0ba458-0 \n", - "Q83307 Minister_(government) Q83307-wikipedia_sitelink-519dcf-0 \n", - "\n", - " label \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 wikipedia_sitelink \n", - "Q27096235 NaN \n", - "Q48352 wikipedia_sitelink \n", - "Q83307 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q11499147 NaN NaN \n", - "Q1048835 http://en.wikipedia.org/wiki/Political_division NaN \n", - "Q27096235 NaN NaN \n", - "Q48352 http://en.wikipedia.org/wiki/Head_of_state 5945.0 \n", - "Q83307 http://en.wikipedia.org/wiki/Minister_(governm... 243508.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q11499147 NaN \n", - "Q1048835 NaN \n", - "Q27096235 NaN \n", - "Q48352 \n", - "Q83307 \n", - "Q83307 \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q11499147 political activist \n", - "Q1048835 political territorial entity \n", - "Q27096235 artificial geographic entity \n", - "Q48352 A head of state (or chief of state) is the pub... \n", - "Q83307 A minister is a politician who heads a ministr... \n", - "\n", - " node2_labelsDF \\\n", - "node1 \n", - "Q11499147 political activist \n", - "Q1048835 political territorial entity \n", - "Q27096235 artificial geographic entity \n", - "Q48352 head of state \n", - "Q83307 minister \n", - "\n", - " abstractFirstSent \n", - "node1 \n", - "Q11499147 political activist \n", - "Q1048835 political territorial entity \n", - "Q27096235 artificial geographic entity \n", - "Q48352 A head of state (or chief of state) is the pub... \n", - "Q83307 A minister is a politician who heads a ministr... " - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "starting-parcel", - "metadata": {}, - "outputs": [], - "source": [ - "def get1stSentLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstractFirstSent.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def get1stSentLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['g_qnode']]], [encodingsMap[row['p_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "independent-consultancy", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.14003443717956543 s\n" - ] - } - ], - "source": [ - "bertV7Enc = get1stSentLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV7EncMap = get1stSentLabsMap(bertV7Enc)\n", - "bertV7EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV7EncMap, ))\n", - "wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - "wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV7EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "incomplete-dispute", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(118, 118, 1.0)" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV7EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "pregnant-message", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Indexg_qnodep_qnodeq1_labelq2_labelcomplextransetextclassnode2vec-v0H_3x6H_5x8bertLabelsSimbertV5EncSimbertV6EncSimbertV7EncSim
011Q17221Q189290spokespersonmilitary officer0.250.110.620.650.270.680.455.6703994.8034274.8034286.238037
13Q702269Q2285706professionalhead of government0.290.390.590.570.130.470.294.4716325.5855405.5855394.817909
25Q2285706Q82955head of governmentpolitician0.360.260.840.550.050.610.647.2598486.5290906.5290885.945703
311Q107711Q189290firefightermilitary officer0.290.220.580.520.340.780.494.5959714.2341944.2341953.154826
43Q702269Q48352professionalhead of state0.300.270.610.520.040.490.335.1300804.5034544.5034554.739718
\n", - "
" - ], - "text/plain": [ - " Index g_qnode p_qnode q1_label q2_label complex \\\n", - "0 11 Q17221 Q189290 spokesperson military officer 0.25 \n", - "1 3 Q702269 Q2285706 professional head of government 0.29 \n", - "2 5 Q2285706 Q82955 head of government politician 0.36 \n", - "3 11 Q107711 Q189290 firefighter military officer 0.29 \n", - "4 3 Q702269 Q48352 professional head of state 0.30 \n", - "\n", - " transe text class node2vec-v0 H_3x6 H_5x8 bertLabelsSim \\\n", - "0 0.11 0.62 0.65 0.27 0.68 0.45 5.670399 \n", - "1 0.39 0.59 0.57 0.13 0.47 0.29 4.471632 \n", - "2 0.26 0.84 0.55 0.05 0.61 0.64 7.259848 \n", - "3 0.22 0.58 0.52 0.34 0.78 0.49 4.595971 \n", - "4 0.27 0.61 0.52 0.04 0.49 0.33 5.130080 \n", - "\n", - " bertV5EncSim bertV6EncSim bertV7EncSim \n", - "0 4.803427 4.803428 6.238037 \n", - "1 5.585540 5.585539 4.817909 \n", - "2 6.529090 6.529088 5.945703 \n", - "3 4.234194 4.234195 3.154826 \n", - "4 4.503454 4.503455 4.739718 " - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "broke-oregon", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "recent-moment", - "metadata": {}, - "outputs": [], - "source": [ - "# stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "varying-prescription", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "accessible-serum", - "metadata": {}, - "source": [ - "# Version 8, 9, 10 - complex, transe, text, class" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "japanese-cattle", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['complex'] = wordsimDF.complex * 10\n", - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['transe'] = wordsimDF.transe * 10\n", - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['text'] = wordsimDF.text * 10\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['class'] = wordsimDF['class'] * 10\n" - ] - } - ], - "source": [ - "wordsimDF1['complex'] = wordsimDF.complex * 10\n", - "wordsimDF1['transe'] = wordsimDF.transe * 10\n", - "wordsimDF1['text'] = wordsimDF.text * 10\n", - "wordsimDF1['class'] = wordsimDF['class'] * 10" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "fitting-jamaica", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "educational-phoenix", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1 = wordsimDF1.fillna(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "backed-scroll", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1['bertLabelsSim'] /= 10\n", - "wordsimDF1['bertV5EncSim'] /= 10\n", - "wordsimDF1['bertV6EncSim'] /= 10\n", - "wordsimDF1['bertV7EncSim'] /= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "id": "classical-bandwidth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Indexg_qnodep_qnodeq1_labelq2_labelcomplextransetextclassnode2vec-v0H_3x6H_5x8bertLabelsSimbertV5EncSimbertV6EncSimbertV7EncSim
011Q17221Q189290spokespersonmilitary officer0.250.110.620.650.270.680.450.5670400.4803430.4803430.623804
13Q702269Q2285706professionalhead of government0.290.390.590.570.130.470.290.4471630.5585540.5585540.481791
25Q2285706Q82955head of governmentpolitician0.360.260.840.550.050.610.640.7259850.6529090.6529090.594570
311Q107711Q189290firefightermilitary officer0.290.220.580.520.340.780.490.4595970.4234190.4234200.315483
43Q702269Q48352professionalhead of state0.300.270.610.520.040.490.330.5130080.4503450.4503460.473972
\n", - "
" - ], - "text/plain": [ - " Index g_qnode p_qnode q1_label q2_label complex \\\n", - "0 11 Q17221 Q189290 spokesperson military officer 0.25 \n", - "1 3 Q702269 Q2285706 professional head of government 0.29 \n", - "2 5 Q2285706 Q82955 head of government politician 0.36 \n", - "3 11 Q107711 Q189290 firefighter military officer 0.29 \n", - "4 3 Q702269 Q48352 professional head of state 0.30 \n", - "\n", - " transe text class node2vec-v0 H_3x6 H_5x8 bertLabelsSim \\\n", - "0 0.11 0.62 0.65 0.27 0.68 0.45 0.567040 \n", - "1 0.39 0.59 0.57 0.13 0.47 0.29 0.447163 \n", - "2 0.26 0.84 0.55 0.05 0.61 0.64 0.725985 \n", - "3 0.22 0.58 0.52 0.34 0.78 0.49 0.459597 \n", - "4 0.27 0.61 0.52 0.04 0.49 0.33 0.513008 \n", - "\n", - " bertV5EncSim bertV6EncSim bertV7EncSim \n", - "0 0.480343 0.480343 0.623804 \n", - "1 0.558554 0.558554 0.481791 \n", - "2 0.652909 0.652909 0.594570 \n", - "3 0.423419 0.423420 0.315483 \n", - "4 0.450345 0.450346 0.473972 " - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "contained-heavy", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1.to_csv('../data/SimIP_new_OP.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "amazing-expense", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSimbertV7EncSimcomplextransetextclass
count349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000
mean4.0527356.3611625.5098275.6001053.2721643.7335674.6559974.4642474.2869583.4385955.5786971.937397
std2.0449711.6012042.0151741.9959422.7369182.9126492.2797422.0775331.6451632.0334672.0215482.753170
min0.3125000.0000000.0000000.0000000.0000000.000000-0.483480-0.5267450.000000-1.4366330.0000000.000000
25%2.3750005.3043734.5482044.7396250.0000000.0000003.0156423.1203103.3177982.1516624.6264980.145023
50%3.9375006.4615155.5975135.7874253.4638574.4370844.7742734.2067564.1716863.2401095.7677450.639914
75%5.3750007.3997606.7358636.7444765.1833375.9991696.2186095.6755794.9960304.7319906.8129772.350565
max10.00000010.00000210.00000010.00000010.00000210.00000110.00000110.00000210.00000010.00000010.00000010.000000
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "count 349.000000 349.000000 349.000000 349.000000 349.000000 \n", - "mean 4.052735 6.361162 5.509827 5.600105 3.272164 \n", - "std 2.044971 1.601204 2.015174 1.995942 2.736918 \n", - "min 0.312500 0.000000 0.000000 0.000000 0.000000 \n", - "25% 2.375000 5.304373 4.548204 4.739625 0.000000 \n", - "50% 3.937500 6.461515 5.597513 5.787425 3.463857 \n", - "75% 5.375000 7.399760 6.735863 6.744476 5.183337 \n", - "max 10.000000 10.000002 10.000000 10.000000 10.000002 \n", - "\n", - " bertV5EncSim bertV6EncSim bertV7EncSim complex transe \\\n", - "count 349.000000 349.000000 349.000000 349.000000 349.000000 \n", - "mean 3.733567 4.655997 4.464247 4.286958 3.438595 \n", - "std 2.912649 2.279742 2.077533 1.645163 2.033467 \n", - "min 0.000000 -0.483480 -0.526745 0.000000 -1.436633 \n", - "25% 0.000000 3.015642 3.120310 3.317798 2.151662 \n", - "50% 4.437084 4.774273 4.206756 4.171686 3.240109 \n", - "75% 5.999169 6.218609 5.675579 4.996030 4.731990 \n", - "max 10.000001 10.000001 10.000002 10.000000 10.000000 \n", - "\n", - " text class \n", - "count 349.000000 349.000000 \n", - "mean 5.578697 1.937397 \n", - "std 2.021548 2.753170 \n", - "min 0.000000 0.000000 \n", - "25% 4.626498 0.145023 \n", - "50% 5.767745 0.639914 \n", - "75% 6.812977 2.350565 \n", - "max 10.000000 10.000000 " - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "headed-reality", - "metadata": {}, - "source": [ - "# Agreement Matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "typical-highland", - "metadata": {}, - "outputs": [], - "source": [ - "versionNames = ['bertLabelsSim', 'amanSim', 'wikiV3EncSim', 'bertV4EncSim', 'bertV5EncSim', 'bertV6EncSim', 'bertV7EncSim', 'complex', 'transe', 'text', 'class']" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "irish-yesterday", - "metadata": {}, - "outputs": [], - "source": [ - "kendallAM = []\n", - "spearmanAM = []\n", - "for ver in versionNames:\n", - " kAMTemp = []\n", - " sAMTemp = []\n", - " for ver2 in versionNames:\n", - " kAMTemp.append(stats.kendalltau(wordsimDF1[ver], wordsimDF1[ver2]).correlation)\n", - " sAMTemp.append(stats.spearmanr(wordsimDF1[ver], wordsimDF1[ver2]).correlation)\n", - " kendallAM.append(kAMTemp)\n", - " spearmanAM.append(sAMTemp)" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "massive-optimum", - "metadata": {}, - "outputs": [], - "source": [ - "kendallAMDF = pd.DataFrame(kendallAM, columns=['Version '+str(i+1) for i in range(len(versionNames))], index=['Version '+str(i+1) for i in range(len(versionNames))])" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "higher-shirt", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Version 1Version 2Version 3Version 4Version 5Version 6Version 7Version 8Version 9Version 10Version 11
Version 11.0000000.4120890.3835230.1605670.1464980.2870180.3836730.2089110.2099330.4004000.174948
Version 20.4120891.0000000.8389470.2968930.2662320.3692770.4585660.3092170.2478390.9123770.238586
Version 30.3835230.8389471.0000000.2753860.2505810.3512520.4298530.3042720.2490970.8398940.235619
Version 40.1605670.2968930.2753861.0000000.8205040.6117400.6198860.2296700.1355320.2994090.259318
Version 50.1464980.2662320.2505810.8205041.0000000.7821500.4495130.2463730.1433460.2694720.248043
Version 60.2870180.3692770.3512520.6117400.7821501.0000000.6505650.2651990.2016920.3680890.220891
Version 70.3836730.4585660.4298530.6198860.4495130.6505651.0000000.2600210.2398190.4533710.241190
Version 80.2089110.3092170.3042720.2296700.2463730.2651990.2600211.0000000.4476560.3095830.334855
Version 90.2099330.2478390.2490970.1355320.1433460.2016920.2398190.4476561.0000000.2445930.255377
Version 100.4004000.9123770.8398940.2994090.2694720.3680890.4533710.3095830.2445931.0000000.232037
Version 110.1749480.2385860.2356190.2593180.2480430.2208910.2411900.3348550.2553770.2320371.000000
\n", - "
" - ], - "text/plain": [ - " Version 1 Version 2 Version 3 Version 4 Version 5 Version 6 \\\n", - "Version 1 1.000000 0.412089 0.383523 0.160567 0.146498 0.287018 \n", - "Version 2 0.412089 1.000000 0.838947 0.296893 0.266232 0.369277 \n", - "Version 3 0.383523 0.838947 1.000000 0.275386 0.250581 0.351252 \n", - "Version 4 0.160567 0.296893 0.275386 1.000000 0.820504 0.611740 \n", - "Version 5 0.146498 0.266232 0.250581 0.820504 1.000000 0.782150 \n", - "Version 6 0.287018 0.369277 0.351252 0.611740 0.782150 1.000000 \n", - "Version 7 0.383673 0.458566 0.429853 0.619886 0.449513 0.650565 \n", - "Version 8 0.208911 0.309217 0.304272 0.229670 0.246373 0.265199 \n", - "Version 9 0.209933 0.247839 0.249097 0.135532 0.143346 0.201692 \n", - "Version 10 0.400400 0.912377 0.839894 0.299409 0.269472 0.368089 \n", - "Version 11 0.174948 0.238586 0.235619 0.259318 0.248043 0.220891 \n", - "\n", - " Version 7 Version 8 Version 9 Version 10 Version 11 \n", - "Version 1 0.383673 0.208911 0.209933 0.400400 0.174948 \n", - "Version 2 0.458566 0.309217 0.247839 0.912377 0.238586 \n", - "Version 3 0.429853 0.304272 0.249097 0.839894 0.235619 \n", - "Version 4 0.619886 0.229670 0.135532 0.299409 0.259318 \n", - "Version 5 0.449513 0.246373 0.143346 0.269472 0.248043 \n", - "Version 6 0.650565 0.265199 0.201692 0.368089 0.220891 \n", - "Version 7 1.000000 0.260021 0.239819 0.453371 0.241190 \n", - "Version 8 0.260021 1.000000 0.447656 0.309583 0.334855 \n", - "Version 9 0.239819 0.447656 1.000000 0.244593 0.255377 \n", - "Version 10 0.453371 0.309583 0.244593 1.000000 0.232037 \n", - "Version 11 0.241190 0.334855 0.255377 0.232037 1.000000 " - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "kendallAMDF" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "distant-level", - "metadata": {}, - "outputs": [], - "source": [ - "spearmanAMDF = pd.DataFrame(spearmanAM, columns=['Version '+str(i+1) for i in range(len(versionNames))], index=['Version '+str(i+1) for i in range(len(versionNames))])" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "skilled-battery", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Version 1Version 2Version 3Version 4Version 5Version 6Version 7Version 8Version 9Version 10Version 11
Version 11.0000000.5764250.5394160.2137440.1920740.4001620.5329500.3019240.3054900.5636280.253590
Version 20.5764251.0000000.9590020.3923780.3509080.5158530.6286260.4403260.3523660.9859720.339260
Version 30.5394160.9590021.0000000.3711060.3370870.4937460.5962810.4307920.3529820.9591310.336037
Version 40.2137440.3923780.3711061.0000000.9465270.7335770.6282220.3250080.1891240.3993800.355801
Version 50.1920740.3509080.3370870.9465271.0000000.7931770.5562560.3437650.2033960.3566450.343931
Version 60.4001620.5158530.4937460.7335770.7931771.0000000.8299590.3810970.2987560.5130840.321041
Version 70.5329500.6286260.5962810.6282220.5562560.8299591.0000000.3734460.3479570.6240480.345162
Version 80.3019240.4403260.4307920.3250080.3437650.3810970.3734461.0000000.6190560.4391020.477997
Version 90.3054900.3523660.3529820.1891240.2033960.2987560.3479570.6190561.0000000.3467780.364509
Version 100.5636280.9859720.9591310.3993800.3566450.5130840.6240480.4391020.3467781.0000000.333301
Version 110.2535900.3392600.3360370.3558010.3439310.3210410.3451620.4779970.3645090.3333011.000000
\n", - "
" - ], - "text/plain": [ - " Version 1 Version 2 Version 3 Version 4 Version 5 Version 6 \\\n", - "Version 1 1.000000 0.576425 0.539416 0.213744 0.192074 0.400162 \n", - "Version 2 0.576425 1.000000 0.959002 0.392378 0.350908 0.515853 \n", - "Version 3 0.539416 0.959002 1.000000 0.371106 0.337087 0.493746 \n", - "Version 4 0.213744 0.392378 0.371106 1.000000 0.946527 0.733577 \n", - "Version 5 0.192074 0.350908 0.337087 0.946527 1.000000 0.793177 \n", - "Version 6 0.400162 0.515853 0.493746 0.733577 0.793177 1.000000 \n", - "Version 7 0.532950 0.628626 0.596281 0.628222 0.556256 0.829959 \n", - "Version 8 0.301924 0.440326 0.430792 0.325008 0.343765 0.381097 \n", - "Version 9 0.305490 0.352366 0.352982 0.189124 0.203396 0.298756 \n", - "Version 10 0.563628 0.985972 0.959131 0.399380 0.356645 0.513084 \n", - "Version 11 0.253590 0.339260 0.336037 0.355801 0.343931 0.321041 \n", - "\n", - " Version 7 Version 8 Version 9 Version 10 Version 11 \n", - "Version 1 0.532950 0.301924 0.305490 0.563628 0.253590 \n", - "Version 2 0.628626 0.440326 0.352366 0.985972 0.339260 \n", - "Version 3 0.596281 0.430792 0.352982 0.959131 0.336037 \n", - "Version 4 0.628222 0.325008 0.189124 0.399380 0.355801 \n", - "Version 5 0.556256 0.343765 0.203396 0.356645 0.343931 \n", - "Version 6 0.829959 0.381097 0.298756 0.513084 0.321041 \n", - "Version 7 1.000000 0.373446 0.347957 0.624048 0.345162 \n", - "Version 8 0.373446 1.000000 0.619056 0.439102 0.477997 \n", - "Version 9 0.347957 0.619056 1.000000 0.346778 0.364509 \n", - "Version 10 0.624048 0.439102 0.346778 1.000000 0.333301 \n", - "Version 11 0.345162 0.477997 0.364509 0.333301 1.000000 " - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spearmanAMDF" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "indoor-coordinator", - "metadata": {}, - "outputs": [], - "source": [ - "kendallAMDF.to_csv('../data/kendallAMDF.csv')\n", - "spearmanAMDF.to_csv('../data/spearmanAMDF.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "innocent-prerequisite", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "active-leisure", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "boolean-impossible", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "suitable-brazil", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "desirable-collect", - "metadata": {}, - "outputs": [], - "source": [ - "for ver in versionNames:\n", - " wordsimDF[ver] = wordsimDF1[ver]" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "flexible-fifth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclassbertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSimbertV7EncSim
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53603.6111544.4663244.8565290.0000006.8096724.9497385.1456013.7705484.2686334.2686333.770548
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12503.0216352.7438834.7931350.0585114.5548774.8182313.9870474.1680403.3992173.3992174.168040
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62506.9446184.2928946.2678413.9365717.6438156.4070515.6696314.9972176.8657826.8657824.997217
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06253.2482493.7907676.1864422.0881257.1948996.1864976.1864970.0000000.0000002.9617555.296330
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18753.6121443.6038348.6384588.8862118.1378798.5566649.0984080.0000000.0000003.4081125.621890
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class bertLabelsSim \\\n", - "0 5.5360 3.611154 4.466324 4.856529 0.000000 6.809672 \n", - "1 4.1250 3.021635 2.743883 4.793135 0.058511 4.554877 \n", - "2 6.6250 6.944618 4.292894 6.267841 3.936571 7.643815 \n", - "3 2.0625 3.248249 3.790767 6.186442 2.088125 7.194899 \n", - "4 7.1875 3.612144 3.603834 8.638458 8.886211 8.137879 \n", - "\n", - " amanSim wikiV3EncSim bertV4EncSim bertV5EncSim bertV6EncSim \\\n", - "0 4.949738 5.145601 3.770548 4.268633 4.268633 \n", - "1 4.818231 3.987047 4.168040 3.399217 3.399217 \n", - "2 6.407051 5.669631 4.997217 6.865782 6.865782 \n", - "3 6.186497 6.186497 0.000000 0.000000 2.961755 \n", - "4 8.556664 9.098408 0.000000 0.000000 3.408112 \n", - "\n", - " bertV7EncSim \n", - "0 3.770548 \n", - "1 4.168040 \n", - "2 4.997217 \n", - "3 5.296330 \n", - "4 5.621890 " - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "ambient-netherlands", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF.to_csv('../data/wordsim_updated.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "tested-screening", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "assigned-identifier", - "metadata": {}, - "source": [ - "# Part 2 - Pedro's updated file" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "casual-research", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDFNew = pd.read_csv('../data/SimIP_new.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "capable-brisbane", - "metadata": {}, - "outputs": [], - "source": [ - "list(set(wordsimDFNew['g_qnode'].to_list() + wordsimDFNew['p_qnode'].to_list()))" - ] - }, - { - "cell_type": "markdown", - "id": "valid-agriculture", - "metadata": {}, - "source": [ - "# Version 1 - Embeddings of Labels" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "worst-posting", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quick-asbestos", - "metadata": {}, - "outputs": [], - "source": [ - "def getV1Embeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.node2_labelsDF.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['g_qnode']]], [encodingsMap[row['p_qnode']]])\n", - " else:\n", - " return 0\n", - "\n", - "def getCoverage(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return 1\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "democratic-assignment", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4.580217361450195 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertLabelsEnc = getV1Embeddings('bert-base-nli-mean-tokens')\n", - "bertLabelsEncMap = getMap(bertLabelsEnc)\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertLabelsSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "extraordinary-motivation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertLabelsEncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "recovered-assignment", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.25719783185089823, pvalue=9.11953585838357e-13)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "southern-berry", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.37036443456409784, pvalue=8.677074016866423e-13)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "public-arizona", - "metadata": {}, - "source": [ - "# Version 6 - DBPedia's short abstracts + labels vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "breathing-bennett", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNschool holidayschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...flood
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...money
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radio
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergency
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \n", - "node1 \n", - "Q1514190 school holiday school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency " - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "communist-destination", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "cardiac-coral", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "original-combat", - "metadata": {}, - "outputs": [], - "source": [ - "def getAbsLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getAbsLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['g_qnode']]], [encodingsMap[row['p_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "fossil-blame", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.902165412902832 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV6Enc = getAbsLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV6EncMap = getAbsLabsMap(bertV6Enc)\n", - "bertV6EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV6EncMap, ))\n", - "wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - "wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV6EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "touched-response", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV6EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "senior-chase", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSim
05.53606.8096724.9497385.1456013.7705484.2686334.268633
14.12504.5548774.8182313.9870474.1680403.3992173.399217
26.62507.6438156.4070515.6696314.9972176.8657826.865782
32.06257.1948996.1864976.1864970.0000000.0000002.961755
47.18758.1378798.5566649.0984080.0000000.0000003.408112
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548 \n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040 \n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217 \n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000 \n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000 \n", - "\n", - " bertV5EncSim bertV6EncSim \n", - "0 4.268633 4.268633 \n", - "1 3.399217 3.399217 \n", - "2 6.865782 6.865782 \n", - "3 0.000000 2.961755 \n", - "4 0.000000 3.408112 " - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "considerable-assignment", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "cutting-floor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37975882843235137, pvalue=5.235465664921023e-26)" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "centered-chosen", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5388523544692222, pvalue=1.1269721214604893e-27)" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "unable-humor", - "metadata": {}, - "source": [ - "# Version 7 - 1st sentence + label vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "quarterly-amendment", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "latest-fountain", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2['abstractFirstSent'] = wordsimQNodesListWAbstractsLabelsDF2.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "experienced-uganda", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDFabstractFirstSent
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNschool holidayschool holidayschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...floodA flood is an overflow of water that submerges...
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...moneyMoney is any item or verifiable record that is...
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radioRadio is the technology of signaling and commu...
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergencyAn emergency is a situation that poses an imme...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \\\n", - "node1 \n", - "Q1514190 school holiday school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency \n", - "\n", - " abstractFirstSent \n", - "node1 \n", - "Q1514190 school holiday \n", - "Q8068 A flood is an overflow of water that submerges... \n", - "Q1368 Money is any item or verifiable record that is... \n", - "Q872 Radio is the technology of signaling and commu... \n", - "Q5070802 An emergency is a situation that poses an imme... " - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "adequate-stocks", - "metadata": {}, - "outputs": [], - "source": [ - "def get1stSentLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstractFirstSent.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def get1stSentLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['g_qnode'] in encodingsMap and row['p_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['g_qnode']]], [encodingsMap[row['p_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "static-partition", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.48781871795654297 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV7Enc = get1stSentLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV7EncMap = get1stSentLabsMap(bertV7Enc)\n", - "bertV7EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV7EncMap, ))\n", - "wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - "wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV7EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "approved-sharp", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV7EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "banner-techno", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSimbertV7EncSim
05.53606.8096724.9497385.1456013.7705484.2686334.2686333.770548
14.12504.5548774.8182313.9870474.1680403.3992173.3992174.168040
26.62507.6438156.4070515.6696314.9972176.8657826.8657824.997217
32.06257.1948996.1864976.1864970.0000000.0000002.9617555.296330
47.18758.1378798.5566649.0984080.0000000.0000003.4081125.621890
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548 \n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040 \n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217 \n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000 \n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000 \n", - "\n", - " bertV5EncSim bertV6EncSim bertV7EncSim \n", - "0 4.268633 4.268633 3.770548 \n", - "1 3.399217 3.399217 4.168040 \n", - "2 6.865782 6.865782 4.997217 \n", - "3 0.000000 2.961755 5.296330 \n", - "4 0.000000 3.408112 5.621890 " - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "aggregate-lighter", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "functioning-donor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3793557735858387, pvalue=5.886665529373508e-26)" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "adjusted-commission", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5330950015966213, pvalue=5.11634460488722e-27)" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "presidential-penetration", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-reward", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outer-symposium", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "399px" - }, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Similarity Work-Copy2.ipynb b/Similarity Work-Copy2.ipynb deleted file mode 100644 index 434d37a..0000000 --- a/Similarity Work-Copy2.ipynb +++ /dev/null @@ -1,10065 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "protecting-craft", - "metadata": {}, - "source": [ - "Downloaded dataset from [DBPedia Short Abstracts - 2020.07.01](https://downloads.dbpedia.org/repo/dbpedia/text/short-abstracts/2020.07.01/short-abstracts_lang=en.ttl.bz2)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "indirect-kingdom", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm.notebook import tqdm\n", - "import pandas as pd\n", - "from time import time" - ] - }, - { - "cell_type": "markdown", - "id": "elder-russian", - "metadata": {}, - "source": [ - "# Process and format DBPedia dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "characteristic-orientation", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c3db8345a6c34dbe8f54427985216b25", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cnt = 0\n", - "\n", - "p1s = []\n", - "p11s = []\n", - "p2s = []\n", - "lines = []\n", - "with open(\"../data/short-abstracts_lang=en.ttl\", 'r', encoding='utf-8') as f:\n", - " for line in tqdm(f):\n", - " p1 = line[:line.find(\" \")]\n", - "# p11 = p1.split(\"/\")[-1][:-1]\n", - " p11 = p1[len(\"\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ignoreurlignore2abstract
node1
NaN0#startedNaN
Animalia_(book)1<http://dbpedia.org/resource/Animalia_(book)><http://www.w3.org/2000/01/rdf-schema#comment>Animalia is an illustrated children's book by ...
Agricultural_science2<http://dbpedia.org/resource/Agricultural_scie...<http://www.w3.org/2000/01/rdf-schema#comment>Agricultural science is a broad multidisciplin...
Albedo3<http://dbpedia.org/resource/Albedo><http://www.w3.org/2000/01/rdf-schema#comment>Albedo () (Latin: albedo, meaning 'whiteness')...
Alain_Connes4<http://dbpedia.org/resource/Alain_Connes><http://www.w3.org/2000/01/rdf-schema#comment>Alain Connes (French: [alɛ̃ kɔn]; born 1 April...
\n", - "" - ], - "text/plain": [ - " ignore \\\n", - "node1 \n", - "NaN 0 \n", - "Animalia_(book) 1 \n", - "Agricultural_science 2 \n", - "Albedo 3 \n", - "Alain_Connes 4 \n", - "\n", - " url \\\n", - "node1 \n", - "NaN # \n", - "Animalia_(book) \n", - "Agricultural_science \n", - "Alain_Connes \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "NaN started \n", - "Animalia_(book) \n", - "Agricultural_science \n", - "Albedo \n", - "Alain_Connes \n", - "\n", - " abstract \n", - "node1 \n", - "NaN NaN \n", - "Animalia_(book) Animalia is an illustrated children's book by ... \n", - "Agricultural_science Agricultural science is a broad multidisciplin... \n", - "Albedo Albedo () (Latin: albedo, meaning 'whiteness')... \n", - "Alain_Connes Alain Connes (French: [alɛ̃ kɔn]; born 1 April... " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "specified-emission", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ignoreurlignore2abstract
node1
NaN0#startedNaN
\n", - "
" - ], - "text/plain": [ - " ignore url ignore2 abstract\n", - "node1 \n", - "NaN 0 # started NaN" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1[df1.url.apply(lambda p: 'http://dbpedia.org/resource' not in p)]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "streaming-watch", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DBPedia dataset has 5732949 records with unique 5732947 index values\n" - ] - } - ], - "source": [ - "print(f\"DBPedia dataset has {len(df1)} records with unique {df1.index.nunique()} index values\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "clean-brook", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ignoreurlignore2abstract
node1
NaN0#startedNaN
NaN23399<http://dbpedia.org/resource/NaN><http://www.w3.org/2000/01/rdf-schema#comment>In computing, NaN, standing for Not a Number, ...
\n", - "
" - ], - "text/plain": [ - " ignore url \\\n", - "node1 \n", - "NaN 0 # \n", - "NaN 23399 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "NaN started \n", - "NaN \n", - "\n", - " abstract \n", - "node1 \n", - "NaN NaN \n", - "NaN In computing, NaN, standing for Not a Number, ... " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1.loc[df1[df1.index.duplicated()].index]" - ] - }, - { - "cell_type": "markdown", - "id": "residential-bunch", - "metadata": {}, - "source": [ - "There are many duplicate element names with different abstracts. For example, 390 corresponds to year 390, ibm 390 systemss." - ] - }, - { - "cell_type": "markdown", - "id": "whole-retirement", - "metadata": {}, - "source": [ - "# Wikidata Sitelinks" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "usual-albuquerque", - "metadata": {}, - "outputs": [], - "source": [ - "sitelinksDF = pd.read_csv(\"../data/sitelinks.en.tsv.gz\", sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "classical-tamil", - "metadata": {}, - "outputs": [], - "source": [ - "sitelinksDF['trimmedNode2'] = sitelinksDF.node2.apply(lambda p: p.split(\"/\")[-1] if p.split(\"/\")[-1] != '' else p.split(\"/\")[-2])" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "undefined-gospel", - "metadata": {}, - "outputs": [], - "source": [ - "sitelinksDF1 = sitelinksDF[sitelinksDF.label == 'wikipedia_sitelink']" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "backed-criminal", - "metadata": {}, - "outputs": [], - "source": [ - "sitelinksDF2 = sitelinksDF1.set_index('trimmedNode2')" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "armed-gardening", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2
trimmedNode2
UniverseQ1-wikipedia_sitelink-5e459a-0Q1wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Universe
BostonQ100-wikipedia_sitelink-c612f2-0Q100wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Boston
GabonQ1000-wikipedia_sitelink-b7f1ee-0Q1000wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Gabon
Dutch_WikipediaQ10000-wikipedia_sitelink-16adbd-0Q10000wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Dutch_Wikipedia
Cadier_en_KeerQ100000-wikipedia_sitelink-d81a0a-0Q100000wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Cadier_en_Keer
\n", - "
" - ], - "text/plain": [ - " id node1 \\\n", - "trimmedNode2 \n", - "Universe Q1-wikipedia_sitelink-5e459a-0 Q1 \n", - "Boston Q100-wikipedia_sitelink-c612f2-0 Q100 \n", - "Gabon Q1000-wikipedia_sitelink-b7f1ee-0 Q1000 \n", - "Dutch_Wikipedia Q10000-wikipedia_sitelink-16adbd-0 Q10000 \n", - "Cadier_en_Keer Q100000-wikipedia_sitelink-d81a0a-0 Q100000 \n", - "\n", - " label \\\n", - "trimmedNode2 \n", - "Universe wikipedia_sitelink \n", - "Boston wikipedia_sitelink \n", - "Gabon wikipedia_sitelink \n", - "Dutch_Wikipedia wikipedia_sitelink \n", - "Cadier_en_Keer wikipedia_sitelink \n", - "\n", - " node2 \n", - "trimmedNode2 \n", - "Universe http://en.wikipedia.org/wiki/Universe \n", - "Boston http://en.wikipedia.org/wiki/Boston \n", - "Gabon http://en.wikipedia.org/wiki/Gabon \n", - "Dutch_Wikipedia http://en.wikipedia.org/wiki/Dutch_Wikipedia \n", - "Cadier_en_Keer http://en.wikipedia.org/wiki/Cadier_en_Keer " - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sitelinksDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "thousand-marriage", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "There are 8472828 sitelinks present in the dataset corresponding to 8472828 unique node1s (Qxxx), 8401883 unique labels (text)\n" - ] - } - ], - "source": [ - "print(f\"There are {len(sitelinksDF2)} sitelinks present in the dataset corresponding to {sitelinksDF2.node1.nunique()} unique node1s (Qxxx), {sitelinksDF2.index.nunique()} unique labels (text)\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "alpha-sport", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2
trimmedNode2
A-2_(Michigan_county_highway)Q100149995-wikipedia_sitelink-029972-0Q100149995wikipedia_sitelinkhttp://en.wikipedia.org/wiki/A-2_(Michigan_cou...
A-2_(Michigan_county_highway)Q100150013-wikipedia_sitelink-14ff5e-0Q100150013wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Attached...
colorQ100231096-wikipedia_sitelink-832b42-0Q100231096wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Communis...
colorQ100231099-wikipedia_sitelink-f5327d-0Q100231099wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Movement...
colorQ100231125-wikipedia_sitelink-b3524d-0Q100231125wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Serbian_...
...............
New_Hampshire_Route_47Q999979-wikipedia_sitelink-069c8c-0Q999979wikipedia_sitelinkhttp://en.wikipedia.org/wiki/New_Hampshire_Rou...
New_Hampshire_Route_12Q26346274-wikipedia_sitelink-bd20c7-0Q26346274wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Attached...
New_Hampshire_Route_12Q999984-wikipedia_sitelink-d64e95-0Q999984wikipedia_sitelinkhttp://en.wikipedia.org/wiki/New_Hampshire_Rou...
New_Hampshire_Route_13Q26346384-wikipedia_sitelink-61fe02-0Q26346384wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Attached...
New_Hampshire_Route_13Q999992-wikipedia_sitelink-025e0c-0Q999992wikipedia_sitelinkhttp://en.wikipedia.org/wiki/New_Hampshire_Rou...
\n", - "

22572010 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " id \\\n", - "trimmedNode2 \n", - "A-2_(Michigan_county_highway) Q100149995-wikipedia_sitelink-029972-0 \n", - "A-2_(Michigan_county_highway) Q100150013-wikipedia_sitelink-14ff5e-0 \n", - "color Q100231096-wikipedia_sitelink-832b42-0 \n", - "color Q100231099-wikipedia_sitelink-f5327d-0 \n", - "color Q100231125-wikipedia_sitelink-b3524d-0 \n", - "... ... \n", - "New_Hampshire_Route_47 Q999979-wikipedia_sitelink-069c8c-0 \n", - "New_Hampshire_Route_12 Q26346274-wikipedia_sitelink-bd20c7-0 \n", - "New_Hampshire_Route_12 Q999984-wikipedia_sitelink-d64e95-0 \n", - "New_Hampshire_Route_13 Q26346384-wikipedia_sitelink-61fe02-0 \n", - "New_Hampshire_Route_13 Q999992-wikipedia_sitelink-025e0c-0 \n", - "\n", - " node1 label \\\n", - "trimmedNode2 \n", - "A-2_(Michigan_county_highway) Q100149995 wikipedia_sitelink \n", - "A-2_(Michigan_county_highway) Q100150013 wikipedia_sitelink \n", - "color Q100231096 wikipedia_sitelink \n", - "color Q100231099 wikipedia_sitelink \n", - "color Q100231125 wikipedia_sitelink \n", - "... ... ... \n", - "New_Hampshire_Route_47 Q999979 wikipedia_sitelink \n", - "New_Hampshire_Route_12 Q26346274 wikipedia_sitelink \n", - "New_Hampshire_Route_12 Q999984 wikipedia_sitelink \n", - "New_Hampshire_Route_13 Q26346384 wikipedia_sitelink \n", - "New_Hampshire_Route_13 Q999992 wikipedia_sitelink \n", - "\n", - " node2 \n", - "trimmedNode2 \n", - "A-2_(Michigan_county_highway) http://en.wikipedia.org/wiki/A-2_(Michigan_cou... \n", - "A-2_(Michigan_county_highway) http://en.wikipedia.org/wiki/Template:Attached... \n", - "color http://en.wikipedia.org/wiki/Template:Communis... \n", - "color http://en.wikipedia.org/wiki/Template:Movement... \n", - "color http://en.wikipedia.org/wiki/Template:Serbian_... \n", - "... ... \n", - "New_Hampshire_Route_47 http://en.wikipedia.org/wiki/New_Hampshire_Rou... \n", - "New_Hampshire_Route_12 http://en.wikipedia.org/wiki/Template:Attached... \n", - "New_Hampshire_Route_12 http://en.wikipedia.org/wiki/New_Hampshire_Rou... \n", - "New_Hampshire_Route_13 http://en.wikipedia.org/wiki/Template:Attached... \n", - "New_Hampshire_Route_13 http://en.wikipedia.org/wiki/New_Hampshire_Rou... \n", - "\n", - "[22572010 rows x 4 columns]" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sitelinksDF2.loc[sitelinksDF2[sitelinksDF2.index.duplicated()].index]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "editorial-cache", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "naval-morrison", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Join DBPedia file with sitelinks - File X" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "incorrect-beach", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF = df1.join(sitelinksDF2).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "answering-rhythm", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "peripheral-edinburgh", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "len(abstractsDF), abstractsDF.index.nunique(), abstractsDF.node1.nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "first-encoding", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "print(f\"From {len(abstractsDF)} Qnodes, there are {abstractsDF.node2.isna().sum()} dbpedia statements which do not have a sitelink i.e {len(abstractsDF) - abstractsDF.node2.isna().sum()} have a sitelink\")\n" - ] - }, - { - "cell_type": "markdown", - "id": "modular-spirituality", - "metadata": {}, - "source": [ - "# Similarity file" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "wired-hayes", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF = pd.read_csv(\"../data/SimIP_new_max.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "referenced-newport", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IndexG_tokenP_tokenG_entityG_qnodeP_entityP_qnodetoken_mismatch_typeP_event_confidenceOriginal_Textcomplextransetextclassnode2vec-v0H_3x6H_5x8
01PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.spokespersonspokesperson_Q17221same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.520.42
12PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.ministerminister_Q83307same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.790.73
23PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalpositionprofessional_Q702269 | firefighter_Q107711 | s...same0.008333Why not be more accurate and state that those ...xNaNNaNNaNNaN0.540.42
34Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.militarypersonnelmilitary personnel_Q47064same0.401134Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.700.44
45Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.politicianpolitician_Q82955same0.099668Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.610.64
\n", - "
" - ], - "text/plain": [ - " Index G_token P_token G_entity \\\n", - "0 1 Putin Putin per.politician.headofgovernment \n", - "1 2 Putin Putin per.politician.headofgovernment \n", - "2 3 Putin Putin per.politician.headofgovernment \n", - "3 4 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "4 5 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "\n", - " G_qnode \\\n", - "0 head_of_government_Q2285706 | head_of state_Q4... \n", - "1 head_of_government_Q2285706 | head_of state_Q4... \n", - "2 head_of_government_Q2285706 | head_of state_Q4... \n", - "3 head_of_government_Q2285706 | head_of state_Q4... \n", - "4 head_of_government_Q2285706 | head_of state_Q4... \n", - "\n", - " P_entity \\\n", - "0 per.professionalposition.spokesperson \n", - "1 per.professionalposition.minister \n", - "2 per.professionalposition \n", - "3 per.militarypersonnel \n", - "4 per.politician \n", - "\n", - " P_qnode token_mismatch_type \\\n", - "0 spokesperson_Q17221 same \n", - "1 minister_Q83307 same \n", - "2 professional_Q702269 | firefighter_Q107711 | s... same \n", - "3 military personnel_Q47064 same \n", - "4 politician_Q82955 same \n", - "\n", - " P_event_confidence Original_Text \\\n", - "0 0.016665 Why not be more accurate and state that those ... \n", - "1 0.016665 Why not be more accurate and state that those ... \n", - "2 0.008333 Why not be more accurate and state that those ... \n", - "3 0.401134 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "4 0.099668 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "\n", - " complex transe text class node2vec-v0 H_3x6 H_5x8 \n", - "0 x NaN NaN NaN NaN 0.52 0.42 \n", - "1 x NaN NaN NaN NaN 0.79 0.73 \n", - "2 x NaN NaN NaN NaN 0.54 0.42 \n", - "3 x NaN NaN NaN NaN 0.70 0.44 \n", - "4 x NaN NaN NaN NaN 0.61 0.64 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "united-contribution", - "metadata": {}, - "outputs": [], - "source": [ - "listTemp1 = wordsimDF.G_qnode.apply(lambda p: [pT.strip().split('_')[-1] for pT in p.split('|')]).to_list()\n", - "listTemp2 = wordsimDF.P_qnode.apply(lambda p: [pT.strip().split('_')[-1] for pT in p.split('|')]).to_list()\n", - "wordsimQNodesList = set([item for sublist in listTemp1 for item in sublist] + [item for sublist in listTemp2 for item in sublist])" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "homeless-ownership", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Q1048835',\n", - " 'Q10553309',\n", - " 'Q107711',\n", - " 'Q11499147',\n", - " 'Q1251441',\n", - " 'Q12909644',\n", - " 'Q1414937',\n", - " 'Q16334295',\n", - " 'Q17221',\n", - " 'Q174782',\n", - " 'Q189290',\n", - " 'Q1930187',\n", - " 'Q201948',\n", - " 'Q215627',\n", - " 'Q22667',\n", - " 'Q2285706',\n", - " 'Q245065',\n", - " 'Q27096235',\n", - " 'Q2855502',\n", - " 'Q327333',\n", - " 'Q47064',\n", - " 'Q48352',\n", - " 'Q532',\n", - " 'Q702269',\n", - " 'Q702492',\n", - " 'Q7188',\n", - " 'Q7278',\n", - " 'Q82794',\n", - " 'Q82955',\n", - " 'Q83307',\n", - " 'Q9352089'}" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesList" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "billion-syndrome", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# print(f\"From the similarity file having {len(wordsimDF)} records, we have list1 with {len(set(wordsimDF.G_qnode.to_list()))} unique Qnodes and list2 with {len(set(wordsimDF.P_qnode.to_list()))} unique Qnodes. Taking their union, we get {len(set(wordsimDF.G_qnode.to_list() + wordsimDF.P_qnode.to_list()))} unique Qnodes and by taking their intersection, we get {len(set(wordsimDF.G_qnode.to_list()).intersection(set(wordsimDF.P_qnode.to_list())))} unique Qnodes\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "affecting-people", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListDF1 = pd.DataFrame({'node1': list(wordsimQNodesList)}).set_index('node1')\n" - ] - }, - { - "cell_type": "markdown", - "id": "hourly-document", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Filtering File X Qnodes using similarity file Qnodes list" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "universal-romance", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF1 = abstractsDF[abstractsDF.node1.apply(lambda p:p in wordsimQNodesList)]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "secure-default", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexignoreurlignore2abstractidnode1labelnode2
4002100159716<http://dbpedia.org/resource/100><http://www.w3.org/2000/01/rdf-schema#comment>100 or one hundred (Roman numeral: C) is the n...Q37413-wikipedia_sitelink-c0dbd3-0Q37413wikipedia_sitelinkhttp://en.wikipedia.org/wiki/100
30649251074621<http://dbpedia.org/resource/5><http://www.w3.org/2000/01/rdf-schema#comment>5 (five) is a number, numeral, and glyph. It i...Q203-wikipedia_sitelink-c8e811-0Q203wikipedia_sitelinkhttp://en.wikipedia.org/wiki/5
3129867103187<http://dbpedia.org/resource/7><http://www.w3.org/2000/01/rdf-schema#comment>7 (seven) is the natural number following 6 an...Q23350-wikipedia_sitelink-6dd502-0Q23350wikipedia_sitelinkhttp://en.wikipedia.org/wiki/7
363000Abuse165447<http://dbpedia.org/resource/Abuse><http://www.w3.org/2000/01/rdf-schema#comment>Abuse is the improper usage or treatment of a ...Q600571-wikipedia_sitelink-5719bc-0Q600571wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Abuse
364696Academic_discipline1830099<http://dbpedia.org/resource/Academic_discipline><http://www.w3.org/2000/01/rdf-schema#comment>An academic discipline or academic field is a ...Q11862829-wikipedia_sitelink-cdefe0-0Q11862829wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Academic_discipline
\n", - "
" - ], - "text/plain": [ - " index ignore \\\n", - "4002 100 159716 \n", - "306492 5 1074621 \n", - "312986 7 103187 \n", - "363000 Abuse 165447 \n", - "364696 Academic_discipline 1830099 \n", - "\n", - " url \\\n", - "4002 \n", - "306492 \n", - "312986 \n", - "363000 \n", - "364696 \n", - "\n", - " ignore2 \\\n", - "4002 \n", - "306492 \n", - "312986 \n", - "363000 \n", - "364696 \n", - "\n", - " abstract \\\n", - "4002 100 or one hundred (Roman numeral: C) is the n... \n", - "306492 5 (five) is a number, numeral, and glyph. It i... \n", - "312986 7 (seven) is the natural number following 6 an... \n", - "363000 Abuse is the improper usage or treatment of a ... \n", - "364696 An academic discipline or academic field is a ... \n", - "\n", - " id node1 label \\\n", - "4002 Q37413-wikipedia_sitelink-c0dbd3-0 Q37413 wikipedia_sitelink \n", - "306492 Q203-wikipedia_sitelink-c8e811-0 Q203 wikipedia_sitelink \n", - "312986 Q23350-wikipedia_sitelink-6dd502-0 Q23350 wikipedia_sitelink \n", - "363000 Q600571-wikipedia_sitelink-5719bc-0 Q600571 wikipedia_sitelink \n", - "364696 Q11862829-wikipedia_sitelink-cdefe0-0 Q11862829 wikipedia_sitelink \n", - "\n", - " node2 \n", - "4002 http://en.wikipedia.org/wiki/100 \n", - "306492 http://en.wikipedia.org/wiki/5 \n", - "312986 http://en.wikipedia.org/wiki/7 \n", - "363000 http://en.wikipedia.org/wiki/Abuse \n", - "364696 http://en.wikipedia.org/wiki/Academic_discipline " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "abroad-donna", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Initially, there were 5732949 short abstracts. From 5785371 Qnodes with short abstracts, there are 324 Qnodes which have some similarity measure\n" - ] - } - ], - "source": [ - "print(f\"Initially, there were {len(df1)} short abstracts. From {len(abstractsDF)} Qnodes with short abstracts, there are {len(abstractsDF1)} Qnodes which have some similarity measure\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "extensive-giving", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "absDFLabelList = abstractsDF1['index'].to_list()" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "charged-valuable", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "324" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF1['index'].nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "recent-kansas", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "terminal-offer", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Join sitelinks with DBPedia file - File Y" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "particular-nerve", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF2 = sitelinksDF2.join(df1).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "dimensional-preserve", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidnode1labelnode2ignoreurlignore2abstract
0Q956244-wikipedia_sitelink-539183-0Q956244wikipedia_sitelinkhttp://en.wikipedia.org/wiki///NaNNaNNaNNaN
1!!Q353153-wikipedia_sitelink-d716fb-0Q353153wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!NaNNaNNaNNaN
2!!!Q371-wikipedia_sitelink-628937-0Q371wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!211415.0<http://dbpedia.org/resource/!!!><http://www.w3.org/2000/01/rdf-schema#comment>!!! ( chk-chk-chk) is an American dance-punk b...
3!!!!!!!Q91868926-wikipedia_sitelink-d58178-0Q91868926wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!!!!!NaNNaNNaNNaN
4!!!_(album)Q2705922-wikipedia_sitelink-e96003-0Q2705922wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!_(album)584428.0<http://dbpedia.org/resource/!!!_(album)><http://www.w3.org/2000/01/rdf-schema#comment>!!! is the eponymous debut studio album by dan...
\n", - "
" - ], - "text/plain": [ - " index id node1 \\\n", - "0 Q956244-wikipedia_sitelink-539183-0 Q956244 \n", - "1 !! Q353153-wikipedia_sitelink-d716fb-0 Q353153 \n", - "2 !!! Q371-wikipedia_sitelink-628937-0 Q371 \n", - "3 !!!!!!! Q91868926-wikipedia_sitelink-d58178-0 Q91868926 \n", - "4 !!!_(album) Q2705922-wikipedia_sitelink-e96003-0 Q2705922 \n", - "\n", - " label node2 ignore \\\n", - "0 wikipedia_sitelink http://en.wikipedia.org/wiki/// NaN \n", - "1 wikipedia_sitelink http://en.wikipedia.org/wiki/!! NaN \n", - "2 wikipedia_sitelink http://en.wikipedia.org/wiki/!!! 211415.0 \n", - "3 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!!!!! NaN \n", - "4 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!_(album) 584428.0 \n", - "\n", - " url \\\n", - "0 NaN \n", - "1 NaN \n", - "2 \n", - "3 NaN \n", - "4 \n", - "\n", - " ignore2 \\\n", - "0 NaN \n", - "1 NaN \n", - "2 \n", - "3 NaN \n", - "4 \n", - "\n", - " abstract \n", - "0 NaN \n", - "1 NaN \n", - "2 !!! ( chk-chk-chk) is an American dance-punk b... \n", - "3 NaN \n", - "4 !!! is the eponymous debut studio album by dan... " - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "existing-disabled", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "From 8472828 Qnodes, there are 2741574 sitelink Qnodes which do not have a short abstract i.e 5731254 have a short abstract\n" - ] - } - ], - "source": [ - "print(f\"From {len(abstractsDF2)} Qnodes, there are {abstractsDF2.ignore2.isna().sum()} sitelink Qnodes which do not have a short abstract i.e {len(abstractsDF2) - abstractsDF2.ignore2.isna().sum()} have a short abstract\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "normal-rachel", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "attempted-scotland", - "metadata": {}, - "source": [ - "# Join list of similarity file Qnodes with File Y" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "premier-attack", - "metadata": {}, - "outputs": [], - "source": [ - "temp1 = sitelinksDF2.join(df1)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "disturbed-windsor", - "metadata": {}, - "outputs": [], - "source": [ - "temp2 = temp1.reset_index().set_index('node1')" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "southern-cookbook", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstract
node1
Q956244Q956244-wikipedia_sitelink-539183-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki///NaNNaNNaNNaN
Q353153!!Q353153-wikipedia_sitelink-d716fb-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!NaNNaNNaNNaN
Q371!!!Q371-wikipedia_sitelink-628937-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!211415.0<http://dbpedia.org/resource/!!!><http://www.w3.org/2000/01/rdf-schema#comment>!!! ( chk-chk-chk) is an American dance-punk b...
Q91868926!!!!!!!Q91868926-wikipedia_sitelink-d58178-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!!!!!NaNNaNNaNNaN
Q2705922!!!_(album)Q2705922-wikipedia_sitelink-e96003-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!_(album)584428.0<http://dbpedia.org/resource/!!!_(album)><http://www.w3.org/2000/01/rdf-schema#comment>!!! is the eponymous debut studio album by dan...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q956244 Q956244-wikipedia_sitelink-539183-0 \n", - "Q353153 !! Q353153-wikipedia_sitelink-d716fb-0 \n", - "Q371 !!! Q371-wikipedia_sitelink-628937-0 \n", - "Q91868926 !!!!!!! Q91868926-wikipedia_sitelink-d58178-0 \n", - "Q2705922 !!!_(album) Q2705922-wikipedia_sitelink-e96003-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q956244 wikipedia_sitelink http://en.wikipedia.org/wiki/// \n", - "Q353153 wikipedia_sitelink http://en.wikipedia.org/wiki/!! \n", - "Q371 wikipedia_sitelink http://en.wikipedia.org/wiki/!!! \n", - "Q91868926 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!!!!! \n", - "Q2705922 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!_(album) \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q956244 NaN NaN \n", - "Q353153 NaN NaN \n", - "Q371 211415.0 \n", - "Q91868926 NaN NaN \n", - "Q2705922 584428.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q956244 NaN \n", - "Q353153 NaN \n", - "Q371 \n", - "Q91868926 NaN \n", - "Q2705922 \n", - "\n", - " abstract \n", - "node1 \n", - "Q956244 NaN \n", - "Q353153 NaN \n", - "Q371 !!! ( chk-chk-chk) is an American dance-punk b... \n", - "Q91868926 NaN \n", - "Q2705922 !!! is the eponymous debut studio album by dan... " - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "ordinary-connectivity", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsDF = wordsimQNodesListDF1.join(temp2)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "married-prior", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstract
node1
Q2855502Chief_of_policeQ2855502-wikipedia_sitelink-2cf037-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Chief_of_police248977.0<http://dbpedia.org/resource/Chief_of_police><http://www.w3.org/2000/01/rdf-schema#comment>A chief of police is the title given to an app...
Q107711FirefighterQ107711-wikipedia_sitelink-4a93a6-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Firefighter80424.0<http://dbpedia.org/resource/Firefighter><http://www.w3.org/2000/01/rdf-schema#comment>A firefighter (also known as a fireman or fire...
Q7188GovernmentQ7188-wikipedia_sitelink-481ab9-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Government5382.0<http://dbpedia.org/resource/Government><http://www.w3.org/2000/01/rdf-schema#comment>A government is the system or group of people ...
Q16334295NaNNaNNaNNaNNaNNaNNaNNaN
Q11499147NaNNaNNaNNaNNaNNaNNaNNaN
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q2855502 Chief_of_police Q2855502-wikipedia_sitelink-2cf037-0 \n", - "Q107711 Firefighter Q107711-wikipedia_sitelink-4a93a6-0 \n", - "Q7188 Government Q7188-wikipedia_sitelink-481ab9-0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q2855502 wikipedia_sitelink http://en.wikipedia.org/wiki/Chief_of_police \n", - "Q107711 wikipedia_sitelink http://en.wikipedia.org/wiki/Firefighter \n", - "Q7188 wikipedia_sitelink http://en.wikipedia.org/wiki/Government \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q2855502 248977.0 \n", - "Q107711 80424.0 \n", - "Q7188 5382.0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q2855502 \n", - "Q107711 \n", - "Q7188 \n", - "Q16334295 NaN \n", - "Q11499147 NaN \n", - "\n", - " abstract \n", - "node1 \n", - "Q2855502 A chief of police is the title given to an app... \n", - "Q107711 A firefighter (also known as a fireman or fire... \n", - "Q7188 A government is the system or group of people ... \n", - "Q16334295 NaN \n", - "Q11499147 NaN " - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "durable-keeping", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "9" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsDF.abstract.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "oriental-devices", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "22" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(set(wordsimQNodesListWAbstractsDF[~wordsimQNodesListWAbstractsDF.abstract.isna()].index.to_list()))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dominican-illinois", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "afraid-asian", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "31" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(set(wordsimQNodesListWAbstractsDF.index.to_list()))" - ] - }, - { - "cell_type": "markdown", - "id": "beneficial-dynamics", - "metadata": {}, - "source": [ - "# Adding labels from labels.en" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "satisfactory-nickname", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "potential-vegetable", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2
0P10-label-enP10label'video'@en
1P1000-label-enP1000label'record held'@en
2P1001-label-enP1001label'applies to jurisdiction'@en
3P1002-label-enP1002label'engine configuration'@en
4P1003-label-enP1003label'National Library of Romania ID'@en
\n", - "
" - ], - "text/plain": [ - " id node1 label node2\n", - "0 P10-label-en P10 label 'video'@en\n", - "1 P1000-label-en P1000 label 'record held'@en\n", - "2 P1001-label-en P1001 label 'applies to jurisdiction'@en\n", - "3 P1002-label-en P1002 label 'engine configuration'@en\n", - "4 P1003-label-en P1003 label 'National Library of Romania ID'@en" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "labelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "significant-cross", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF = wordsimQNodesListWAbstractsDF.join(labelsDF.set_index('node1'), rsuffix='_labelsDF')" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "bigger-separation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractid_labelsDFlabel_labelsDFnode2_labelsDF
node1
Q2855502Chief_of_policeQ2855502-wikipedia_sitelink-2cf037-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Chief_of_police248977.0<http://dbpedia.org/resource/Chief_of_police><http://www.w3.org/2000/01/rdf-schema#comment>A chief of police is the title given to an app...Q2855502-label-enlabel'chief of police'@en
Q107711FirefighterQ107711-wikipedia_sitelink-4a93a6-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Firefighter80424.0<http://dbpedia.org/resource/Firefighter><http://www.w3.org/2000/01/rdf-schema#comment>A firefighter (also known as a fireman or fire...Q107711-label-enlabel'firefighter'@en
Q7188GovernmentQ7188-wikipedia_sitelink-481ab9-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Government5382.0<http://dbpedia.org/resource/Government><http://www.w3.org/2000/01/rdf-schema#comment>A government is the system or group of people ...Q7188-label-enlabel'government'@en
Q16334295NaNNaNNaNNaNNaNNaNNaNNaNQ16334295-label-enlabel'group of humans'@en
Q11499147NaNNaNNaNNaNNaNNaNNaNNaNQ11499147-label-enlabel'political activist'@en
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q2855502 Chief_of_police Q2855502-wikipedia_sitelink-2cf037-0 \n", - "Q107711 Firefighter Q107711-wikipedia_sitelink-4a93a6-0 \n", - "Q7188 Government Q7188-wikipedia_sitelink-481ab9-0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q2855502 wikipedia_sitelink http://en.wikipedia.org/wiki/Chief_of_police \n", - "Q107711 wikipedia_sitelink http://en.wikipedia.org/wiki/Firefighter \n", - "Q7188 wikipedia_sitelink http://en.wikipedia.org/wiki/Government \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q2855502 248977.0 \n", - "Q107711 80424.0 \n", - "Q7188 5382.0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q2855502 \n", - "Q107711 \n", - "Q7188 \n", - "Q16334295 NaN \n", - "Q11499147 NaN \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q2855502 A chief of police is the title given to an app... \n", - "Q107711 A firefighter (also known as a fireman or fire... \n", - "Q7188 A government is the system or group of people ... \n", - "Q16334295 NaN \n", - "Q11499147 NaN \n", - "\n", - " id_labelsDF label_labelsDF node2_labelsDF \n", - "node1 \n", - "Q2855502 Q2855502-label-en label 'chief of police'@en \n", - "Q107711 Q107711-label-en label 'firefighter'@en \n", - "Q7188 Q7188-label-en label 'government'@en \n", - "Q16334295 Q16334295-label-en label 'group of humans'@en \n", - "Q11499147 Q11499147-label-en label 'political activist'@en " - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "native-british", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF = wordsimQNodesListWAbstractsLabelsDF.drop(columns=['id_labelsDF', 'label_labelsDF'])" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "popular-harmony", - "metadata": {}, - "outputs": [], - "source": [ - "temp123 = wordsimQNodesListWAbstractsLabelsDF.node2_labelsDF.apply(lambda p: type(p))" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "adolescent-panama", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: [index, id, label, node2, ignore, url, ignore2, abstract, node2_labelsDF]\n", - "Index: []" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF[temp123 != str]" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "twenty-purpose", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF.node2_labelsDF = wordsimQNodesListWAbstractsLabelsDF.node2_labelsDF.apply(lambda p: p[1:-4] if type(p) == str else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "beginning-department", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q2855502Chief_of_policeQ2855502-wikipedia_sitelink-2cf037-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Chief_of_police248977.0<http://dbpedia.org/resource/Chief_of_police><http://www.w3.org/2000/01/rdf-schema#comment>A chief of police is the title given to an app...chief of police
Q107711FirefighterQ107711-wikipedia_sitelink-4a93a6-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Firefighter80424.0<http://dbpedia.org/resource/Firefighter><http://www.w3.org/2000/01/rdf-schema#comment>A firefighter (also known as a fireman or fire...firefighter
Q7188GovernmentQ7188-wikipedia_sitelink-481ab9-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Government5382.0<http://dbpedia.org/resource/Government><http://www.w3.org/2000/01/rdf-schema#comment>A government is the system or group of people ...government
Q16334295NaNNaNNaNNaNNaNNaNNaNNaNgroup of humans
Q11499147NaNNaNNaNNaNNaNNaNNaNNaNpolitical activist
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q2855502 Chief_of_police Q2855502-wikipedia_sitelink-2cf037-0 \n", - "Q107711 Firefighter Q107711-wikipedia_sitelink-4a93a6-0 \n", - "Q7188 Government Q7188-wikipedia_sitelink-481ab9-0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q2855502 wikipedia_sitelink http://en.wikipedia.org/wiki/Chief_of_police \n", - "Q107711 wikipedia_sitelink http://en.wikipedia.org/wiki/Firefighter \n", - "Q7188 wikipedia_sitelink http://en.wikipedia.org/wiki/Government \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q2855502 248977.0 \n", - "Q107711 80424.0 \n", - "Q7188 5382.0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q2855502 \n", - "Q107711 \n", - "Q7188 \n", - "Q16334295 NaN \n", - "Q11499147 NaN \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q2855502 A chief of police is the title given to an app... \n", - "Q107711 A firefighter (also known as a fireman or fire... \n", - "Q7188 A government is the system or group of people ... \n", - "Q16334295 NaN \n", - "Q11499147 NaN \n", - "\n", - " node2_labelsDF \n", - "node1 \n", - "Q2855502 chief of police \n", - "Q107711 firefighter \n", - "Q7188 government \n", - "Q16334295 group of humans \n", - "Q11499147 political activist " - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "fifteen-patent", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1 = wordsimQNodesListWAbstractsLabelsDF[~wordsimQNodesListWAbstractsLabelsDF.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "structured-archive", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "22" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "shared-secretariat", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.abstract.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "fossil-courtesy", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q2855502Chief_of_policeQ2855502-wikipedia_sitelink-2cf037-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Chief_of_police248977.0<http://dbpedia.org/resource/Chief_of_police><http://www.w3.org/2000/01/rdf-schema#comment>A chief of police is the title given to an app...chief of police
Q107711FirefighterQ107711-wikipedia_sitelink-4a93a6-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Firefighter80424.0<http://dbpedia.org/resource/Firefighter><http://www.w3.org/2000/01/rdf-schema#comment>A firefighter (also known as a fireman or fire...firefighter
Q7188GovernmentQ7188-wikipedia_sitelink-481ab9-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Government5382.0<http://dbpedia.org/resource/Government><http://www.w3.org/2000/01/rdf-schema#comment>A government is the system or group of people ...government
Q245065Intergovernmental_organizationQ245065-wikipedia_sitelink-1b7141-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Intergovernmental...6572.0<http://dbpedia.org/resource/Intergovernmental...<http://www.w3.org/2000/01/rdf-schema#comment>An intergovernmental organization (IGO) or int...intergovernmental organization
Q7278Political_partyQ7278-wikipedia_sitelink-7a73df-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Political_party10973.0<http://dbpedia.org/resource/Political_party><http://www.w3.org/2000/01/rdf-schema#comment>A political party is an organized group of peo...political party
\n", - "
" - ], - "text/plain": [ - " index \\\n", - "node1 \n", - "Q2855502 Chief_of_police \n", - "Q107711 Firefighter \n", - "Q7188 Government \n", - "Q245065 Intergovernmental_organization \n", - "Q7278 Political_party \n", - "\n", - " id label \\\n", - "node1 \n", - "Q2855502 Q2855502-wikipedia_sitelink-2cf037-0 wikipedia_sitelink \n", - "Q107711 Q107711-wikipedia_sitelink-4a93a6-0 wikipedia_sitelink \n", - "Q7188 Q7188-wikipedia_sitelink-481ab9-0 wikipedia_sitelink \n", - "Q245065 Q245065-wikipedia_sitelink-1b7141-0 wikipedia_sitelink \n", - "Q7278 Q7278-wikipedia_sitelink-7a73df-0 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q2855502 http://en.wikipedia.org/wiki/Chief_of_police 248977.0 \n", - "Q107711 http://en.wikipedia.org/wiki/Firefighter 80424.0 \n", - "Q7188 http://en.wikipedia.org/wiki/Government 5382.0 \n", - "Q245065 http://en.wikipedia.org/wiki/Intergovernmental... 6572.0 \n", - "Q7278 http://en.wikipedia.org/wiki/Political_party 10973.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q2855502 \n", - "Q107711 \n", - "Q7188 \n", - "Q245065 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q2855502 \n", - "Q107711 \n", - "Q7188 \n", - "Q245065 \n", - "Q7278 \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q2855502 A chief of police is the title given to an app... \n", - "Q107711 A firefighter (also known as a fireman or fire... \n", - "Q7188 A government is the system or group of people ... \n", - "Q245065 An intergovernmental organization (IGO) or int... \n", - "Q7278 A political party is an organized group of peo... \n", - "\n", - " node2_labelsDF \n", - "node1 \n", - "Q2855502 chief of police \n", - "Q107711 firefighter \n", - "Q7188 government \n", - "Q245065 intergovernmental organization \n", - "Q7278 political party " - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "compatible-september", - "metadata": {}, - "outputs": [], - "source": [ - "# wordsimQNodesListWAbstractsLabelsDF1.to_csv('../data/wordsimQNodesListWAbstractsLabelsDF1.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "subject-access", - "metadata": {}, - "outputs": [], - "source": [ - "# wordsimQNodesListWAbstractsLabelsDF1 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF1.csv').set_index('node1')" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "silver-structure", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = wordsimQNodesListWAbstractsLabelsDF.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "dramatic-projection", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2['abstract'] = wordsimQNodesListWAbstractsLabelsDF2.apply(lambda row: row.node2_labelsDF if pd.isna(row.abstract) else row.abstract, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "accessible-trunk", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q2855502Chief_of_policeQ2855502-wikipedia_sitelink-2cf037-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Chief_of_police248977.0<http://dbpedia.org/resource/Chief_of_police><http://www.w3.org/2000/01/rdf-schema#comment>A chief of police is the title given to an app...chief of police
Q107711FirefighterQ107711-wikipedia_sitelink-4a93a6-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Firefighter80424.0<http://dbpedia.org/resource/Firefighter><http://www.w3.org/2000/01/rdf-schema#comment>A firefighter (also known as a fireman or fire...firefighter
Q7188GovernmentQ7188-wikipedia_sitelink-481ab9-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Government5382.0<http://dbpedia.org/resource/Government><http://www.w3.org/2000/01/rdf-schema#comment>A government is the system or group of people ...government
Q16334295NaNNaNNaNNaNNaNNaNNaNgroup of humansgroup of humans
Q11499147NaNNaNNaNNaNNaNNaNNaNpolitical activistpolitical activist
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q2855502 Chief_of_police Q2855502-wikipedia_sitelink-2cf037-0 \n", - "Q107711 Firefighter Q107711-wikipedia_sitelink-4a93a6-0 \n", - "Q7188 Government Q7188-wikipedia_sitelink-481ab9-0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q2855502 wikipedia_sitelink http://en.wikipedia.org/wiki/Chief_of_police \n", - "Q107711 wikipedia_sitelink http://en.wikipedia.org/wiki/Firefighter \n", - "Q7188 wikipedia_sitelink http://en.wikipedia.org/wiki/Government \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q2855502 248977.0 \n", - "Q107711 80424.0 \n", - "Q7188 5382.0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q2855502 \n", - "Q107711 \n", - "Q7188 \n", - "Q16334295 NaN \n", - "Q11499147 NaN \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q2855502 A chief of police is the title given to an app... \n", - "Q107711 A firefighter (also known as a fireman or fire... \n", - "Q7188 A government is the system or group of people ... \n", - "Q16334295 group of humans \n", - "Q11499147 political activist \n", - "\n", - " node2_labelsDF \n", - "node1 \n", - "Q2855502 chief of police \n", - "Q107711 firefighter \n", - "Q7188 government \n", - "Q16334295 group of humans \n", - "Q11499147 political activist " - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "colored-imagination", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "31" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "labeled-eagle", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = wordsimQNodesListWAbstractsLabelsDF2[~wordsimQNodesListWAbstractsLabelsDF2.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "welcome-orleans", - "metadata": {}, - "outputs": [], - "source": [ - "# wordsimQNodesListWAbstractsLabelsDF2.to_csv('../data/wordsimQNodesListWAbstractsLabelsDF2.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "quick-chicken", - "metadata": {}, - "outputs": [], - "source": [ - "# wordsimQNodesListWAbstractsLabelsDF2 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF2.csv')" - ] - }, - { - "cell_type": "markdown", - "id": "potential-format", - "metadata": {}, - "source": [ - "# Fetch saved files" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "defined-harris", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF1.csv').set_index('node1')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "documented-replication", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF2.csv').set_index('node1')" - ] - }, - { - "cell_type": "markdown", - "id": "apart-divide", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Sentence Transformers" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "parental-craps", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "initial-coating", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def getEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "documented-alignment", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8.550719976425171 s\n" - ] - } - ], - "source": [ - "bertEnc = getEmbeddings('bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "id": "continuing-impression", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1.24G/1.24G [02:08<00:00, 9.68MB/s] \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.648171424865723 s\n" - ] - } - ], - "source": [ - "bertLargeEnc = getEmbeddings('bert-large-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "responsible-national", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0568156242370605 s\n" - ] - } - ], - "source": [ - "distilBertEnc = getEmbeddings('distilbert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "interracial-mitchell", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [], - "source": [ - "robertaBaseEnc = getEmbeddings('roberta-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "amended-powell", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.765424489974976 s\n" - ] - } - ], - "source": [ - "robertaEnc = getEmbeddings('roberta-large-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "divided-donna", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "characteristic-religious", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def getMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "quality-sponsorship", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertEncMap = getMap(bertEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "id": "electronic-parcel", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertLargeEncMap = getMap(bertLargeEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "confused-snake", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "distilBertMap = getMap(distilBertEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "id": "vanilla-subject", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaBaseEncMap = getMap(robertaBaseEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "familiar-soundtrack", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaEncMap = getMap(robertaEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "subjective-leeds", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "bronze-sally", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "detailed-imperial", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def checkSimilarity(row, encodingsMap):\n", - "# print(row)\n", - " if row['G_qnode'] in encodingsMap and row['P_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['G_qnode']]], [encodingsMap[row['P_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "funded-prototype", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertEncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "improving-nevada", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertLargeEncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLargeEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "conventional-white", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "distilBertSim = wordsimDF.apply(checkSimilarity, axis=1, args=(distilBertMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "related-garage", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaBaseBertSim = wordsimDF.apply(checkSimilarity, axis=1, args=(robertaBaseEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "portable-joint", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaBertSim = wordsimDF.apply(checkSimilarity, axis=1, args=(robertaEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "mental-forestry", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimDF1 = wordsimDF[['Human (Mean)']]" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "round-cornell", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertSim'] = bertEncSim\n" - ] - } - ], - "source": [ - "wordsimDF1['bertSim'] = bertEncSim" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "exotic-fundamental", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLargeSim'] = bertLargeEncSim\n" - ] - } - ], - "source": [ - "wordsimDF1['bertLargeSim'] = bertLargeEncSim" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "latter-cleanup", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['distilBertSim'] = distilBertSim\n" - ] - } - ], - "source": [ - "wordsimDF1['distilBertSim'] = distilBertSim" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "excellent-meeting", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBaseBertSim'] = robertaBaseBertSim\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBaseBertSim'] = robertaBaseBertSim" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "south-rwanda", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBertSim'] = robertaBertSim\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBertSim'] = robertaBertSim" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "proper-stations", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertSim'] = wordsimDF1.bertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['bertSim'] = wordsimDF1.bertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "legendary-campus", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLargeSim'] = wordsimDF1.bertLargeSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['bertLargeSim'] = wordsimDF1.bertLargeSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "ambient-victor", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['distilBertSim'] = wordsimDF1.distilBertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['distilBertSim'] = wordsimDF1.distilBertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "velvet-ethics", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBaseBertSim'] = wordsimDF1.robertaBaseBertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBaseBertSim'] = wordsimDF1.robertaBaseBertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "colonial-coordination", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBertSim'] = wordsimDF1.robertaBertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBertSim'] = wordsimDF1.robertaBertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "informational-fountain", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "numpy.float64" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(wordsimDF1.iloc[0][1])" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "japanese-order", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertSimdistilBertSimrobertaBertSim
05.53600.4268630.3602190.436207
14.12500.3399220.4331000.427664
26.62500.6865780.7069780.645407
32.06250.2961750.3736790.371295
47.18750.3408110.3905400.488393
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertSim distilBertSim robertaBertSim\n", - "0 5.5360 0.426863 0.360219 0.436207\n", - "1 4.1250 0.339922 0.433100 0.427664\n", - "2 6.6250 0.686578 0.706978 0.645407\n", - "3 2.0625 0.296175 0.373679 0.371295\n", - "4 7.1875 0.340811 0.390540 0.488393" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "id": "marine-general", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "wordsimDF1.bertLargeSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "living-condition", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "wordsimDF1.robertaBaseBertSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "hearing-adjustment", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "wordsimDF1.bertSim *= 10\n", - "wordsimDF1.distilBertSim *= 10\n", - "wordsimDF1.robertaBertSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "suspected-plumbing", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertSimdistilBertSimrobertaBertSimamanSimbertLargeSimrobertaBaseBertSim
05.53604.2686333.6021924.362067[[0.4949737852167514]]4.1961185.313815
14.12503.3992174.3310054.276645[[0.4818230866992358]]4.0459335.239753
26.62506.8657827.0697766.454071[[0.6407051485261465]]6.2152236.513252
32.06252.9617553.7367903.712948[[0.6186497481059658]]3.5818334.266170
47.18753.4081123.9053974.883926[[0.8556663921383962]]4.3223805.111274
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertSim distilBertSim robertaBertSim \\\n", - "0 5.5360 4.268633 3.602192 4.362067 \n", - "1 4.1250 3.399217 4.331005 4.276645 \n", - "2 6.6250 6.865782 7.069776 6.454071 \n", - "3 2.0625 2.961755 3.736790 3.712948 \n", - "4 7.1875 3.408112 3.905397 4.883926 \n", - "\n", - " amanSim bertLargeSim robertaBaseBertSim \n", - "0 [[0.4949737852167514]] 4.196118 5.313815 \n", - "1 [[0.4818230866992358]] 4.045933 5.239753 \n", - "2 [[0.6407051485261465]] 6.215223 6.513252 \n", - "3 [[0.6186497481059658]] 3.581833 4.266170 \n", - "4 [[0.8556663921383962]] 4.322380 5.111274 " - ] - }, - "execution_count": 137, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "incorporate-punishment", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 89, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "wordsimDF1.sort_values(by=['Human (Mean)']).plot.line()" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "prospective-international", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAADW9klEQVR4nOy9ebwkV102/pxzqqq77zJrJpnJnhACBMKuCAiCgCDwAvoqArIpuCAi4g8R9EV5X1cUEUUBAZWIyiabKGFfRAhLAoSQPWSSzL7fvbur6pzv74+zfU919Z07MzfLJPfrBye3u7rq1Pac5zzfTRAR1mzN1mzN1uzkM3lnD2DN1mzN1mzNjs/WAHzN1mzN1uwktTUAX7M1W7M1O0ltDcDXbM3WbM1OUlsD8DVbszVbs5PUsjvyYKeccgqde+65d+Qh12zN1mzNTnq74oorDhLRlubndyiAn3vuubj88svvyEOu2Zqt2Zqd9CaEuLXt8zUJZc3WbM3W7CS1NQBfszVbszU7SW0NwNdszdZszU5SWwPwNVuzNVuzk9TWAHzN1mzN1uwktaMCuBDiH4UQ+4UQ32efbRJCfFYIcaP7d+PtO8w1W7M1W7M1a9pKGPh7ADyl8dlrAXyeiO4N4PPu7zVbszVbszW7A+2oAE5E/w3gcOPjZwK4xP33JQCetbrDOj777zf9Io7suPqYfvP1v38Vdl/5ufD3rV//CL51ye+u9tDutrb36v/G197+G8tuc/Un/gZX/+db76ARrZ7N7LwWX37TL9zZw1izu4D9+xt+Hj/4zpfwxT95PozWAIDvvP+PcNMX//lOHdfxauCnEdEe9997AZw2bkMhxC8LIS4XQlx+4MCB4zzc0W371/4dW959Gb7+succ0+/W/9WnsPPFrwh/L7349zD1px9d7eHdbe3f/vo3sO5vPrvsNvK33w756rfdQSNaPbvi3b+PU9/9dey/8et39lDW7E6071/+Cdz//d/Gt173a9j6z1dg+9c+BACY/dt/xXV/++Y7dWwn7MQk2xFibFcIInonET2ciB6+ZctIJuiqWX92PwCgM6eP+bfT/dUezT3H+nUJRYCuqzt7KKtuuioBANXi3J08kjW7M22wOAsA6JUW5qrhIgBAakDoO7chzvEC+D4hxDYAcP/uX70hHZ8ZXQMASNzJA7mHmTT2X1OXd+5Abg9zS+W6Gt7JA1mzO9WMBenMPetUW6wRZP93Z9rxAvh/AHiR++8XAfj46gzn+E27i0prgZF3qPkH+O4I4GTsG6urwZ08kjW7M40cgCu3uDcmAjju5JaUKwkjfB+AywDcRwixUwjxEgB/BuBJQogbATzR/X2nmmfga3bHmvQAru+GAF7bN9aUawz8Hm3uGc88gDu5UCwrHt8xdtRqhET03DFfPWGVx3JC5j3Dx8LA1xo6n7h5AL87auBwDLyu1wD8nmzUkFA81pzMEspdzoxzOEEcgwi+BuAnbEEDN3c/ACdtT86saeD3bHOOSs/ASXMGfheXUE4WM5UDkGPB73pNdjlRixr43Q/AETTwu588tGbHYJQCuOYM3NxZg7J2twFw7XTKY5JQzBqAn6hFDfzuB+CBgd8NHbRrtnIjB9KRgZ9ETsyTxQKAH4OE4qMM1uz47e4M4GsMfM0AgByCKx9GyKJQ7uyo5bsdgB/LFdV3Q932jra7s4TiJ/g1Bn7PNv8chCgUJqHc2VEodxsAN6V7yeQxIfjtM5h7kMVEnrsfgPssu+BfWbN7pHlfWYxC4Yk8axLKqlgA8GNxYppjT7tfs9SChGLufizVh4/dLUMk12zF5hm3N3J/SwKw5sRcHYthhCv/DdEagJ+oRQ38bugQDhLKGoDfk40aAB4kFKxp4KtmpnQv2TFIKMuFEa4l+azM7s4auHAM/G7poF2zFZtpRKv5lfuaBr6KRiEO/BgAnMavf8yavLIiixLK3ZGBOwBfyxe4R1tTal3TwG8HM9Wxv2TLgfRaks/KTDYcO3cr02sSyprFmjjhbyetraXSr6Z5AD8Wp8IyAG7obghIt4P5B5jujgDu2FXbuX3j5kP40Td+AS+95Ft39KjW7A62Zr4I3YXCCI9azOqksVCjd+VXdFkGfncEpNvB7s5OzBBG2LIae/+3dmDnkT52HunDGII8lvDVNTuprIkFXlKRFFegd5bdfRh47ZY1x3BBlwsjXEuzX5mdaCbm2698O971vXet4ohWzyr3TJVlem6DSuOz1+yLf9dr/pK7szWJni+xIO8CDPzuA+BOQjkmAF+GNeo1DXxFJk5QA//qrq/isj2XreKIVs9MC4AfXixx39d/CgvDGo88fzMAYKlcA/C7tTUS/oh0iFJb08BXyxwL8qFfK7HlolBoLXRsReYZ+PEmRRky0HfRiJ+wumCT+YF5W7LhkedvxjMffDoAoL8G4HdrG41C0SFHYA3AV8tqX2nmGH6zTDErs5bksyILAD5mwjtawTBDBvoueq2l8U7MeA61O58XP/pcTHdzAGsMfJx9/rbP41t7T34n74ivzJjQL3WtGuHx2mAOuO3r4U+x2hr4moSyIgsdefSYaznuc2d3ZQYeI2zi+Gpf3F8KTBQK583uRv/rd00J6M623/zib+IXP/2Ld/YwTthGMzFNlFDujAExO3kB/Lv/BrznaYBrOCsDgB+DhLIcA1+rVLgiE8uE2gFHz2jVpO+yDDwsjzmA+/ZaSqJXKLzti29G57WvvBNGt2Z3lIkmThgmoaxFoRynVYuAqe3/EEO+jo2BLwPgd5OwuOv3zmN+cPtNRrGl2gkw8LsogAcJhT0n2kQGPlncfaJw12y8jcSBGxNjwe+MATE7aQH8K4s78PPbToN22qtn4PIYGPhyIN2sQHay2k+/7av4l6/fdrvtP8gMY8Iuj3YdNem7vISSMnBX3F8K9AoVPl+T3O6+1ny2yRho3pXnTrSTFsCvHx7C97odDLWXUFbAwPtH0r+XYX76OFLz72pGRFgsNRaHt9+5xK70YwD8KGnoRHSXZ+Dc2d3UwL3p+fk7dGyrYnuuBD78S8DdZLV5e1lTBiRjQt7DGoAfpxn45a3LijqahHLoB8Cfnw/s/k74aDknpr4bpNL75b65HT3lsZhV+7U8WpGru7QG7p8l3SKhKJkC+MzMHTiyVbL3/jRw1QeB2R2rtks9P4/Fr31t1fZ3V7CmEzONQrnjx8PtpAVw7WK4fbifctdznIRi5vfgo5M9VDM7w2dkRmfWsP3doIBRIJC340N2dAa+PICbpcPQ/cOrPaxVsRAiSTyMkDPwqIGflAC+dND+21yZnoDt+b3/g9t+8SWo9uxZtX3e6dbMxFxj4Cdu/qXyzE85CWVcbYJP7r0Mv79lM/5h1+fiPprskM20Y8PiGlbWd7IbehnzzJtuR5rgr/e41Yw+Sj/JTfuXsHF/f7WHtSomWxh4raMGXmTx9dGzs3fk0FbXlg6t2q48cNf79h1ly5PH2pyYawB+guYZuAdhdRQJZb5cAAAcKOOL1szE5EulldRCue3QEi76/U/hur1zKx/4HWgBwFf4kA2uvx7zX/ziMR3DP8Baa7z/m7fhsh+kYEBH6Sf5+ndW+IO/v2u2YwsvJ1vCLFQLmDj3rXj5f/9vPPlDPxE+P+kYeLkY/3vxwKrtVm3cAACoT7brsZy1rNSDdLsWRnh8Rg0JJWtIKEfe9z7s+JVfDdtnjoUmneibrJFHG6ygQNH++QFqQ9gzOzjm8d8RFjTwFWoo25/5LOx82a8d0zF4NcLXfuQq/Ma7LgUY69b1cMX7+uytn0W/vuuw8aYTk4zBma9/JR6xYwdOnzoL5/fOCtteffM3VuWYpixRH1k9SQMAMFwAjtyafnbg+vjfiwdX7VDZxo0AgOrwXVMWOyb7z1cBH3zhKE4QRQYePiLsmF89X8JK7YQAXAjxKiHE1UKI7wsh3ieE6K7WwI5mGh6cmhq4/Xfv//1/WPjyl8P2maOhNWPW1CxSwxn4Cjzz8f0+/nXUroVd+O7+7x7375ezO0IDDy3VjAZA+Fznt1F98x/jGFYY4fC9A9/Db33pt/DGb77xdhjl8VmTgdNggA0/2I5Xf8TgBff5ZfzJw38/bPuFqz++Ksc8fMkl2P5TP70q+wp2ydOBv35g+tn8XmgAe5SKWvgqmNrgAPzI6skyd6QRUZhAq4M3oDx442i+iDEwvvaSe0b+9dp/xVM/8lRcc+iaO3K4xw/gQogzAPwGgIcT0QMAKADPWa2BHc08A/eNiZW7xnIMWLUBuGl0fxgMGHNcQWyylyj0ChHy4LvehbnPfCb57CkffgpecOkLVvT7YzVznFEoK41pJiLWkUdDgrBeLGHPnl1sXytzBi9UVuLatbDrKFvecebPzSeJeS1KErChswGTdYxCOdtsXJVj1gcOoN6/f1X2FYxFXgUjjT/bvBE/cfYZmFtYPb1aTk4CAKpDqzcp3JE286EP4cZHPgqDG27AU7ETj5hYGMnuJkMgk2rg3zv4PQDAD2Z+cIeO90QllAxATwiRAZgAsPvEh7QyC1EoXgP3AD5Gk5Ja4/63GmgGKJxxf+PmQ3jcn3+BfbcCBh4AcmVjPvCXb8au37jj0q6jBn5sAG4WFla4f8PCCA0mc7ug3De7FLbRemX6tnCL0btSM+nwLFGUULxt7K2HWYrnObVKKhpVFWDMqiYGXVvkeP/0VONABv/uPptdWr0JwxOr+tDJycDnv/wlAEC5/RbsFQa1aHHQs/vjAXzjHOGXLtUoB4u4I+24AZyIdgF4E4DbAOwBMEtEn1n+V6tnIQ6ctGV/7kKOA/DJ7+3GH/ybwX0vi9ocd2Lunu0nfTX1sUgoJwA6P/Y9g1++9PaJg9Z0bBNM+N0KAVyTTpoaT+b2ceKrl5UycOGaUd+eETPHav7lFP50GIBv6KwHMQDvLK0O4HqnLw1X7js4mj37jG3441M2pR8ajdpd84X+KrJlJ0vqg4fw+n/T+JVP2trZH77hwyhXOJnfmXbIOXT3D+M1GY1CodBy0T8jD/nYtXjSdwkT//3dO2Sc3k5EQtkI4JkAzgNwOoBJIcTzW7b7ZSHE5UKIyw8cWD1vtwdNY3QIVTMYD+DiiAWlDfvYi8GARhtAsoSSlXSlP1YJpc0ecCvh4TfePqBFxznBmBVmFXIAJ6Mh4GWteLyVdnSX7lE0y9Rov6PNr+pCwS72IneXDsDsuREAYARBVas0CTsSYcrbF+z4870wmAGwMtnwqObunz58GBffSnjClYTP3PoZvOGyN+DR73s0Lr7kYixVS0fZyZ1n3mdTCXYtms+koeA/C6Ukpnr23yMzyab75wf48Td9Cbceun2Y+YlIKE8EsJ2IDhBRBeAjAB7V3IiI3klEDyeih2/ZsuUEDpdaTOQxqB2AV5nVJ9uKVNUOaWQVv+OJPMYQcg7gK4gDD5PICTDwTEcH7GqbPkaJR05M2N+tFMCNjk5MVmKTP/CGRaQsJ494Bj4OwM1ggIPvfBfodga2ZEzNMEI2/nVvfyDMh38dADDoYtUAPDDw8vZNJNsznAn/PV8tYKlawoPf+2D8w1X/sKLfH77kEtz8jGeOfO6BzbAolBk3QQxc2Yu58q4ZdgtEWbXi8cjNF4hMSPQLK9D1Vo4SM+m7s+PwEm4+uIibD971APw2AD8ihJgQ9u17AoBrV2dYRzdiqfS6igAOoLUCXu3olOSJNwywNREU8SiUo7+QuxdvwfT9XotbFxqeZ10BH3oxsP/ol6OoAXU7qQbHqoGLSQvgK9XANekkkSdIUgyEuZa7HLs+2hgP/M1bceDNb8bcpz61orGthvlzC+GE7JmoHvJSmAe+CAAw7ALZagN4dQITFRHw6d8D9l0z+rmzWwZR954H4ZKrLwEAfObWlamg5a23obytpUiau0Y0HwGrbpSlEHd6Db9lzE1AC2V8B0RT+jEUmHpg4BvWAQDU7EJzU/v97eTbOREN/BsA/h3AtwFc5fb1zlUa11GNp9LXLta4ckEBaUKOW9I5cPZFr+x28b+rqkbBHrSVSChXz9iGEt+f/Srmv/Ql7P/rv7ZfLOwDrv4ocOvRa0Lcngz8WCUU6Qai51bGkGpTszBCA+EBmpdfZZ16lqt54iOCxmngw+vsZCinp1c0ttUwz65EmJfYiu30x8Gc9nA7ti5BVe2TU/+qqzC4/oYVH9NPeCekgS8eBC77W+BfbDji+kXCvXdSUpdmwPIhFkD44g6bwHXxKReveJxtSVph9csm7rqRFOdXW3dF8+OfX5oJn4044olQVymAZ3nH/juTMm0f6HB7+eZPKAqFiP6AiO5LRA8gohcQ0ep5Xo52bBYHrsuUgRNPwvGMwF1wyWK/+QNt6gqZOTYnpg6SgcDOX30ZDr39HX5n7l82kYy5g3kdtdbVtmOWUBwrM/Mpi9ALi60gxKNQLAMfTd1PonlGmsMyQGSSGLddV16Gmd3bUd5mkyRktz3VwAyHWPp2S7jcMvbF6/cvWwohRqG0SEN9HaJQ+l2JrDbY25LQdcvPPhvbnzkqNYyzKKGcCAN343Ra8xv/UeOP36uTJDb+7M/LyJJX6oMgXQNaj65U/fvGALzyxyWCNLQiBv7tfd/GgaXj85kRET53zb7j8005AF9YjBJQE8DJEOpGKn0Gyx7zuVTfb0nmXVU7aTMxNYsDDxq4D8s1owzcOE1RMQZueJnQepho4Ms1PA6/J1/UPT6QH7jyvfH4nHmMceYVNSEzt88S61g1epm5azWThoDNfOD9uOU5zxkZY+LE1NGJyRm40e2gYcdlRv67ycDnfu4Xsf0pT0O1c6c7Tvt92f/nf4Fbn/c8LN5wfev3TdtxeAm/8E/fwueuHR8DnTVDU9l5LV5+DQbXWoliqSuhKsI7vpzGAB9Pev2qAHg9wJd6Pcy6673Jzce8Lg2/9gsivgsrdiL7lULjufYhdzx22oPd//4q4f1v1ED/6Nm2L/rUi/Csjz9rZWNp2Oev3Y+X/vPlI/djReYmoMXFmA2rm925iELxNgn37rrz7sylk/hq+MmWs5MWwClcGB1iu2vPwPUoA/fe/RTAGWBXAygmoaxEA48Pe7yMX7jyo4yB12Gs415IXwLgaJ1r2uz6w9fj2kPjdfZjrYXiV7b6cBoXrOfnQf1+AmCAXRrHin0UmR/XwBmAl1Ufr//q60OyTiuAtwy2W7LPxkhb5a02Vfxl711ZFuPAadbjOspzR7gHo4qVBTjwzvdi7j8+geHkOlS5QK5H99W/6iq3gxVIBvuusfHFqwDgS4MZ/MZpp+DjPZV8nqw4GVlZkDLIWysN4/Qr2hEZpWWCrfdfDQB40necnDm3Mif58To7Z/t2TD/YvzJfTmLuvi/1ZzG9RHjdBzTu880jjW0oLXZHFPxd3blUhCD+ftwOdtICOE+l98wiJMYxVuBfRKpGNXDN6zxXJbJjjEKJqwBAdKwGls8tjQD4zle8Atc/7OGt+yj8pkcp+tRmb77izfiLy/9i7PfH6kAhYWdAM9NYurrrNNLclQzLxLRRKNvzDCW4NBX/e9fsTnzspo+FTuU6ud4rW8KPC0tU66wTaXKFCTVe/tKGcPhf/hW3PPd56QbsOH6ZXDuisONhQ5z7/n/BuR/6EL7w22+GVgJ5bUvNUlVh7tJLMfPhj2DmIx8BAHTvd7/lB3PkVuDtjwR+8PnAaM3w+AG8P5wDCYF+Y96oqnhxQhlmCMxJGf5esYRStwN428q1HqSVGul2lsC7uQWC/vE4lt2zvjSYx4s/a/CQmwmdQXpOwlCSEAitQQM7WeQNX8ixkqhjtZO2qV+8MBHA9TIMXNRp2VkALv3b/3eJnPhyP+7ji9ftxy+851v4xu8+AaetixosZ+Bq/XrU+/ejmO2PaOALn/t86zkQUWDgdTWE6vVWdvLOSl2OOIi4HasGDpkDMNAzKeMI17MB4NyJSaRBpPGc07fiqeU+PC78ljuGKzee0eW692McjQFeuffb+OgHNuGymw/hstc9IQ59vQXwqYG9rkdzlPlro4mw74/+aOT7hIFT+ll/HaH3oIcCQsDsvh61tAxca42lyy/Hrlf9VrIvMbH8fT2wfw+2ALhu+y0oVoGBl5V1pJUNrdmUHMDtuawTORakGOuDGGcBwJvhji0MfFjb44bruKIjHL91XJnfwfEAuLvHg8EiLjgyZqSOgXvsICJAFfHr4RDSEbrbux7RScvAfdQCjwPXPgqFOTGbDDyv2jVwqobIkM6q3t77dbs8//6ulEkoF0vbHR6BWr/e/vf8kAH48qy6NjVj4Ct/Ya88cCX+6Ot/BENmWcA7Vv2NRG63n2/UtvaOqcbLqXXJnJgEQQZLUqKfMPB4DSq/UnLXhzPw2oHL0VYLOTJ85Du7RitAurTwycHKIohCsMSY1nn8GYqrDLttLbIgi2RKQGcui7QqsfvgdgDAnz87x6/9msJ1ZwI7Z5fvSXrtTpv1d/nNB0L44IkA+NABeNWYxOpqFMDXywILQoZrtuLVmh4noYxe+1JbWSEA+O2cyOMZ+GBMZNCy5p7x4XAJ0+OkemowcGNAMo9fs2eK1jTwduOZmF5+0JmP1+WRDykD7yWJmBzoKyjOCFsiSJqkbmLeOkm2zF8XALw3X7Y7MVtsqIeBgWsG4GZpCXOf/ezYl+lru76GD1z/AdSmXvaF8yC18mfHJdP0G550v6NGZI4xVUx2IQ206KhJR3f3Invw4Ne4nnPORNcd5vJdX8cnrv/3kREWUCOfAcBsZq/f1ICOKYu2t/3G1u/5ysFr4N5Bp0V8bXIlUUv7t6hKHJq3/oMHXPRj+JnHvgzU7aCs0slGLyxguH17/Lvq4+0b1kGLpeCrOZE48MDAGw+s5pPCfB8v/ZTGJlNgXkroOeeXwApBz43z0DvfiZmPfDR8THu+NzoeNzmH0qu3cyJPpuyRBisoCT1igfDVWLccgPOJyhhAMDEjwQ7377GPZEV28gI4q4XiZ0PTFgfuWaObjTtDxsp5tEQ1RM6dmPwmuH+b4U8eiAQkRGFn4ImFCjQcYOf/bMRgx/I1JgZ6EBg4B/DD//qv2PWK38DcJz855tyNO6Vq2SXvMTNwv85rgodn4E0npi5jIo82ADQmBpQwdc7AfWimZ9681Kw+YqNMjGuv9guf+yX87tf/7+g5HWlns4f6NnJmqg9oc3Tw8xp457abw2d8MuQRG5qA91/3/jDha/ayZlJA+848wzJE3fzkBU/Hyx/8chRZZ2T9vOOXfhk3/+RTw99XLl2Ft23cgC9m312VWiilY7hlg3BwCWXTF2/FT3yH8OgrKsxLGd4n05LF3GZeQpn54Aex53d/N37Rcn/qKmXgR5MTzBgitVLzt/F4GLhw9z0vNSbG3QKDUE4WcO8FOyeOP8dbUG6ldtIDuCEd0rWNS2lMHIK+c4aL95WIxZp0AvQlFNoB3EQET4wCW5FhyT21oDHctw/zO3tYumH5Mp2cgXMJRXatZrr339+Pr+/5+sjv/MOgSS8roehjBPBBYB/NuNd2DVzrMvoQyCby/M07NC68imXhMWegbkooSeMHB1xs/6Jt3FW7l9KzXCuhrLySpOCslB2v5veDgD/+xh/HpDAG4EoK1FKEfXkAlju/CXzvQyCYkXKk/e/YeHXjQHpQ2+tlhA6/P5FaKMMA4A0JhQF4NWHZzuZZg74UMH71tcJm3uOqJRKNQko9TGOmm71om5aEOFbHHkni34nj0cCFO68Ny2W+EyXkg+oqJTd6FDvWJBRm39s5w8rJxroEnoFzYAhFZ5jzcjhrWZ6mFMAzDtqcnVMFNXHzSPpBSOSBCLPuuiVguGDDpMxg+ZdwUC6FWONDv/v7OPSe99i9FdYhYi67HL/3ld8d+Z1/wGtTryg9faUOlJ3OiTvSoCJEoTQ87BzojUFGdtnZW2LXkTHw2iVEBIcZZ+duAjQMwtsKk5kxIQz++k8OKDhLlzPvxEzYEi9uxsbmE638xFAzAM+VhFb2NaJqCDriEo6+/lbgIy8FlXMQVYPKKfugGpfx6jXiDiQW+/az49XAiYgxcJF0RzJsHNW0XTFOzdn1nHGX1QxXFuLXLLccAWwUUnSVdq85mkzDn+nZ4Zheo9f9F9CfaR9bYODHDuCytMfeuMxlEIagG0mAfPJPVqBB6j3moazITjoAv3HfPJ7xt1/F0IMKk1DIAXjSUd4nFrCMu/6sS1ThgFRXyBIGHr/bIz+KiXPeidsW0yQRMhqPvtpAaBHCzqb7hMGifQnnl5Z31pT9OM1X370K+//MdqNJIjcWRqmAZxjLpabz01vp8s0D1VKzV2hg4OlLW/OJ0hCUqP0Ag3E/Q9N5yScAz2j4UFszVMctqR04TQ5aEi9azE++Sa0W3XgpG+OIEkrU4TMlUEv7t6yGIDcO+fjXAr9+OSAVROPt9U0P9Pw8qCzxjDd+GU/4rkEHgHa/p+MMI7zxMY/F5P/9TwCw5WJZTY+6jADuw3CnZmtoIeCvKq0QwNFw/mrXxabt17oBpLyERZtxAJ9hRbeCHbkVeP/zgI/88pjfHz8Dl+43GxfcPvKWjSgSDsBFV3HSw9n5mgYebaFcwJG+XQaee9MQf/pPNYyugmRCTkLRTELx0gaP/x7MzdjteBRKnToxORtbgmVV/Tp9PC+4ahav/A+DC644HICgUwH7Zq10smtp+Zdh2B+zPGQPRz7XHwHglTJwc4wMvOtoWN8Y6IUF3PDIR2HxG9+MDLwBRDzFmMiEcrxcMuAlCYzb3uuamjFC7Z13bP9tNWLGlqd1+1rXR5L9Oc7CqfCcATbZ8BouvGAXAFQyhozlUqJ2Grgoh4F9yQ2nA6fcG5ByRAryVR/N3ByqPXvQGdT4lUsNCoggqR0vA9cHDyJ30VKlEMAwOgyJrwTcBZiYqRwDdxLKcGUOxqaEUu3ZCwC4GaM3zThQjCGny8s0R2XgflKabe9BaQjITI0Hb//OMWvPvqaNz16dm2zZiCgNgKjrhrN+LQql1X7mEz+DT+/4EADgqf/Zx732AmaxD+21vRYJJTLweAHL+RkA6VKH6goZf7D4DXIPpZJp2PzEnAPtvg7A0iuBgZNQMFyeAYzr3sGBZGrJoGw45bgGvtxy9JhT6d12QyIMr70W+sgRHPibv0k0cCLCua/9L7z5M9cnjlcyBIVA+ePnbDLyerhn4Dwqwl8/rum3MfC2UsFABCfrxFxJMw4voXCJh0k67pmqZdq4GQAMd2IqgcoxcFENwupJZRbkSyI0F0q8bG+1Ozax6pmYF2DK43dieisFAMao0/tlr2N3MWXgZoVNqJsAXu+zAD7ZooFTE8DHlEPwlgB42QLg/j7J9ogkIsIP770Wr7nsPSi337LssZq/83kiXgOfbwFwYRqrNVODZx+X/XjN77LVCO8M27e0D0dcp4w4m5vw8noGzpe/fqaUmjDn8ikWZu0+kkgTU6XlZHk6uHu8M5ECuPDdR5QMQNAtgXLJ3n1xNADvj/GUsIdjeokwqJv1FRwD7x8BzTW62N30eeB9z7MswS/9V/js+Kp7ggAod651nWjgfl9/84WbkutMxkAhfVHtqYwWCIsSSgSL7PAiPvinNe5/fbxmrWV2x738Dniyxss1zkImJru2Sd0Wd25VFieSYWXjymoV19VKCtSKA7h73lx1OhKjztgA4HNzCYCfunsQJgt9ggAuDaGEAC0cjufEWT17KPKaoENLuxVGoeh2Bl60+Sgqwv/+H4MJd3g6ygTLpcG5wSyqvXuT78u6j589fSu+OaYOMxEwVVr5kgZHr7sSftcS+bM00X6AxHdSpxIKJQlTx7YKPlY7aQCciFCbOt7c4N01AQjIxX9yB5RndqoGFhyAz81YiSMJmdJ1CuBcXnHaeNZg4JIBuD+OBXD78MijAHg1aNfIOWud7gP9On0IPevWugI1GdOObwDX/xdA5tjrgbvNpCGIPHNjqRMNnLN5zY5NRHEFkzh0OICnEgpne5O3WQ31R74Tt291Yo4BZ966bSXg5x21ml1bw8DcyztaWVnsz/6pRvnmt9vPWNKGjQO310rV/bByU7ll4BbA02MHCWV+HtXuPeHzqUPsxR8McPElF+PVX371Uc+lzdYv2kQeMxdDWU3CwOMzduoMUPk6OCtVaxsaeABZsqsWbg+7ivBzX+HyZI1KG7zuI9/Dl64f7cfJx7bhc9/GTY97PPrfi/Hltxy8Bf/vzRL/8YN2idIQoeuetaPVNKp270Z5663QhvD6D1yRfDcsCFU+OiEJg6QMB+nUicmlwds7lf6kAfBQ7MglAYSkAB1T6YMTk2ngPnJA1oRhz17FBVfrIw39KZOWavy76YUhXvRZHQv7O/O6OikZsq8UAXrOA/jybGYcA+egt64PLNWNxJrDNgmkBo2GEYYkIn3MYYRJ/WuXrEJaJxq4HqNvw5jwlHLGmTgxmwycR0joUfaetb1749z5iQPy6AVRdK3x7Bs+DzXPGCpnVe4l7AiDqQFw/l4A19rELZ7RlUmB0jHwrBpEnwsDcDkGwPWclVB8BEjeZ+cwtBPLp2/59FHPpc02LlgNnOaPxHNukVAAYOsRwrpF4OnfMNi4326za6aPt3/pB2Mn/xENfMFp5yRQNgp0TC2m+yCt8ZbP3YD3fXMHLvnaLSP75hLYxI02wWhw9dXxWDvtquWJX22fzA0BPY8JR2npt/f//j/ses1rcOuhRXzq27cm35WdiCnpCaRhhEanDJw/13FM93AJxdcr7h6xkSAxplTH9GPviOHREZ6Ba6B2AN6fsy9tkkqva2Qt1fEA4MWfOYinXU6Y+u5VyZik86bXSqSZe66ouyqXB/B6DAP3LK5SVkIZYeALlrXUwKgCHlYoscXZSkOYQhNfAuAje+oqqYXCH0TTZOA+ioc9q7SMhMIBJfgc2G/bGPhYRsWdSMOjA3jxvSvwC9dcivt961ts3ywuPazq2LE9cI9kYlrEyup+0HdV1gm/aTJwv7ox81ZC2X+KqyXdZxPICs5hOds0TyiFQL0YWWrSYJpFgmw7DLzqYxov/ILBA66wz9ovXXI53vip67DjcLsE0cwVqBwZEYQRAO80FkREGp+7xj7DvLZQ+J5FEdU9OxFqVqO+WrL/XbewYyBl4G2p/VRVWPjKVwAA5c6dqHbvRq9QKBrO76oASLYwcEonwGYYYVq299hWwcdqJw2Ah8gFSkHC6DoAtr/Y/OH3M2VWA1Vue2Oe/sVrsfeP/ySVUEyVlJPl4WqZl0oabNczcAvgOiwd5Zx96NVRGHg9zolZayDPsdBzEkrVlFDccUGjD4aJAO5XeSud/QOAGwa8tQavhcIXIUm0B5kgQSUMnNc7qVMJhYNAs0ks0K6Bj3WAcQbUjLtusTZmpltiprOF+IqE85Lxs0wJlM5fkFfDcP3lMhKKPwfPwPdtljAAikEK4B/80xq/8fFjDIVzdH/jgpVF6qX4jJkxDHzbEQpVHH0E0WLpJ9sxDHyYko8gBxJrbehssgngWqN2xx+2NNTgEWB1z9XnYW3+KldPfByAEwFdRy7aopYOvfvd2PFLv4yF//kf1Pv2QR86DNIanQaA1znQ4pOFoFTKI0rfw2Rl6f36rSM9cTtpANwzcJ/AExvO6uCcIfdicQ++v9BKAyYjVAWw7lAfR9773lRCMRqSOy6TanSOyTZugzIewCVQ11h0ZCKfs+NR5fK3rV5GQhFKYa7XroF7R5NGy4MRanJHtrzSh8c7MSVFgKO6BvmECV2nEkpStpdiGCZn4AxwK/eCRAmFOUFbJJRjiQNPGdHRQ/DKlv20OTG9/LF/fdxOMFampEDlNPFcD4Baw4Br4GJkJeFXa2Z+DnpuDnM9YFA0AHxgEfVHrznGMLjCHmzzPOHeNwuUrDCZaRRgAoDBaVPYeni0fVyQKMcBeLMy5WDJ1u9uYeDNEr+kDWr3HA1b6pXw+1AGAI8ridrV6jFjATwy8Go4GlJ66FYbfvh373uVnRiMgT4yg42NGPi6EDBtDNxQ6iNrauDcBxdWwfdwBu7Zm3fghawuXYMaDLweMscUY+CkAM0C8xNm2pBQ2gBcNzz0Pj3fOMBbtKtmdObteLKyhSEzMy0SClWVjfxQEvMTol1C8ZmMokVCYQw89uM7VicmYsF+rQFXaIq0TplGwsAJsiUKJUlK8okwLVEobeGBrRLKOD2IM/AVJMHM6ZnRfevRSeB/HnIali4eYM/G+CKLhoRSurjwrC7tKkUC0lV2bGPgPs5fz80DVYWhMhgUQKfPjn+CUSg//TXCr34EmP/adXGfPD/CJ7tsnca2IxSutXDSii/HO+7JqRrAOzt/EI9+36Mxq6tRBt4AcEMav/CFf8SLrvlka0s7Qxo/9j2DMw9QAFDNGHgE8FH4OviOdyC//uqggQ8bAH75LYfx/ptuAgBs3h0JlD54ED++4woMCuCmbe6zQrQycFC6SjC6TiS8ZGUZgi1a9rMKdtLUA/cRDPsX3NPgNXDNUumlBGBQDZYCwH/iho/j1K0LOFsDpAQoJ3j4F/xFN3UAIGAMA2dv4p4/eAPOu3kYx6I1Fm1FU/Tma/c7gAYDmzrdosWJFqAxw6GVUJTCfA84ez+wpNvDCO2hR9bn/gSOuRZxYGHE9NK6Bhn3FNdVwsCTiBCi6ATmIVUMFIMT06yMgbc6MbVBa0FCroGvgIHXI6iaJiZ5ueG2U9dh06nrYL7KgIBLKFKgdBp4XlsJpVYxZ6BNA/fnqufnQHWNoSL0C6A7OLZJqNUIKAtC4SpZJaCdMHBHStZPYKoP1C7e2T/rXu4fN/k3J1ffQ1KTCXX5vWXNFYjROPPwTlBvE25uAXBtarz8v+zn173IrVZYRrJ2Egq1APiBt/w1zgCw8zTbRGPQuI4/OLAAuIzh8/cy1rxrJx6z60p89/45Ogs1AILpiBDZxk1QugKxAM7Gz4hN6N17T9fAfR0Nr53FpADNHkz7ZldMn/vsLZ/Ga//7dywY5BIbJGOELNWddI08KQMZ74hPcPGZm6Q1Zj7wAeRV2BjQBotdVyOaAY9ZXISQYy5zC8uifh+ka5BS2LkZ2HYE0Dt2pdvwcq3NHYQoFHPMUShBQmEaONWRXVBdJZpoogMagvIvP/g2PAplvITiSx1wsDtuBr6CUqxt2i4l4aduxSckDpjNIVLEDizOILmSMCJHpSwDh2fgKrfaaEsUis/+7M8cCgA+KIBun93X466FInDLhRrfP9sxVwZgSZ1qfx3zDJLGSyitxzAmOadBDsAxXWlia8Oxv9c1BBkoMhi2VAzkmZqX77LF3OZuuAZLV9gwPy8vmWI8fJ2mbfRNPWudpfv/+q9x5AMfRDdXmHQrv20xQAd6+3Z0TI1dW2ToK6AL0do9SBCleSKNRJ7kObq9xG9nJxGAey+LBwlrZHRsQ+VerLqMkoM0QO5JaSbRYU9eubTAttPYxJZpnNF5bbwzf4v9qt9cExrLwFsappvFxVC8qGmi5SU1w6HNeFQSn3uIhBHAhv/4aroNB9HG7xeu24cd/70pdInvVYNW9t86Hi+hEGLTWq1j+d1BP2V0PPIGBJ/PJ9igkhRj11pLH7LhePxBF75uxVGcmGPPpVEa+GjWFu+cdG13xzFCwpgODH9TGIBnSkBThioDMl0B2kALQMkclaZlGfiBmV2AMailQL8Q6DkGXsvjB3AQUCrg73/S+YP6zB/UwsCRKUjDATwdbOvc33AMLnUA4SYHSay14bghGgNpDJQxrRp4kknrSxPs3Itbf/75dugDd075+AOdrg8BANRh+6wdevs7sPcP/gCdTGGiZYInl0lqJIVgBCpkOwM3gEmyuHVyoZIw5rVUemvDaoj/8z6NB13nigV5ecCYAATGFRmqWfaVMkDun4dcweh4QyoG4GRqbJ2Zx6zLvEoy0sJNcMvSxdT5KIyBqDWWGIBXPiZ9cRGiAeAh+qXZjgp2VUC1BimBI9MC3z9HYPK6tOYDT59vPhbfu2knFnZ3QVUFrQ3e/bk34oev+vLIcdqMs7DEiel00R0vfyWOPDm2MWvWPQ49RZNEHraqWZqx2x7Z7vbNCkaxdGu/bFct9GUlDDyRCsaYbpFQ/IT0t1+4EQfn7T0mKGgqEgYuGhKKpgylAoq6AmkDLQEpFSpt3d5NBu4TVTpepVLWielXboMCo51ulrN9VwMffzlQlyACainChKOHXELhUVZuUHlmAZytvgBA+pDcFtxpRvAsdgHpolakGY1CGfm90ZBGQ5JujULhxKBZD4eMAblJSbRIKOF33s9g0sF0MolJBuAH1wvIyUmY/dbPUytGDjsSGBNGyJ3pxujkRTQtDPwen4k5rIa46DbC1gONO6prxsDt6WgmoUiKDBxFF1THG6KZE1HqGqfOzuOWU53zhl3x4DB1Hg2zNArgALDAAPyI08PN4uJILKnXaGULgG9/xjMx/7nPhd/MTQBqvhmFwiWU9MmY9VJTPYAxBpuG85heOAIaLkJ/64Mjx+P79EDDnZioaxzmGvz8PCbLPt7/yd9H79oo7QiisFJJsJEzcF8CwOuCTKuWQUKhEHHUVsxqbFA7u18fufUL+Oer/7l1s29uP4zv3HYk7ajid6FrDCqNN33mBmzfb1cLBhKamgycA7iEQYYyB3JdQhiCkYBShQVw2RKFUqcArhXQj/WxUKllJqo2+9pbge/8C3DVBwESqCXCeM2QySZJnXx3vbMMEizip6GBe+b43f3fxf6l/W78DQDvRMCUZM8naL8twyWjoVAiE/1WAK/ZSmiiEcllFhYAV6ZZNeCLvxc+R8M0HCbaECbKEv0C2Psj98Jf/GwOdcpmIAA4IfORyoUaq4GbZiYme/52H5nHN24+lIzpHp+JOSz7yMzostoycOccc57/BJiJSQOdiYSBg0khGw7PIdcGt5xm/+YMPOjtfqJolIn1BXAGhQhMbc4xedPvY7FMAV8PBjj4jr+HXGpf6pv5+TAZLfSAbGG8E3M0CsVFqNTDAMLSaBx80+/hhhf8Aaprv9X8hT/hsD+J+LJTXaNqgN1Fh2/B+nIJ2/4zJjaRYVEofLe8wl9Yyfgxxu9kFcHfhxu2hxGyF4e/Fey/v3PoOnx5Z/uq442fug5/9bkbR2p52F1XrMiVu9dQqE0nYeCyEQeuTYZhbhk4HAMXUqHUBoRRCcX3piw8A5eAzuNGVXZsAK633AdHpAS+/2HLwEV8DqlkK6CkDZhtRyJcDLtn/xNLhJv/1zOw9YiVFLzT+gWXvgA/9fGfGt0PgKWuQOZ6zQoXI+Av0cH1o+MlYyDFIvJiN87YfVPQtMPQGIPd0qhlZebngb5vENEAVzauULyukTdQG8JkVeH7Zytc96qnYfsWA9ntgXyTF0Uo/EKyo8bGgSfPoamT5+/yH+zHn33KRv/4SLB7vIRSukIzoslmtA4vm++UooepBh4AvJgAMQAXrOHCpoM2Ffg2x8DLqsbcIO0kEnThBoBL9+DwynWHph2Tr+uRFPyZD3wAB97yFlz4qZvHnq9vTjHfEyj6VVq3usWJScZg9hOfCA+uqasAwsJo7Pjc5QCAW69t7wHpH36vX4bCPsaMFGPq+JomXIMcw8CT+Gyfgenb4WkuocTfegY24vyzO2n7z0S7VSbWHm9apQ1qbRLnahgri3P3MgdBjgC4aDgxa+QY5kBeWYevkQCEQlmbVidm5WuGu7+1BAQH8GNk4J9dvBVPPut0LG3/MnwtEs/AiTFcaoQRkgSQpQC+6QhheOON2HbEpqvzqKM5V8aiKe8sdhBaA0qCDZ10J31w3eh4SddQxtZr+b1P/iV2vTqt90JsZbZlJr14en4ewstCTb2eXzP+HrDnt9YaE2WNfkeho1y2bJ4BLjSxVkDmfiu62dhMzKThi9YNCU+jchNHNnMY7/n0H6O7b9fIflbDThoA97Wzm2AIY8KS1DNw3vuvU0UNXEiF9feLOkfG9MFJF5rkmfMNe+bwZ5faWTS8gLqdgYd4cHY1v/AgB+BlNbKE5k2D9ejz4fblYtqn7Hj1bKQiaaVEa/3vXondv/0abLjVnruuhgH0pTGhO1Dd4rwD4sMfAJxHyDQK8Pd8lhvTIBMJhctPjAF5MKhDMwUG4F5CAVC5zNOjlZNNGDg7ZmZoLIBrQ9CGWnVyXVdxN6F0rEKFTrKsaNPAB7lA4So3aglAquDElJSOtWo4WWsFZCzWrsowXipqsQPVAvpSYhYASKCSIj5XyVK/wcAFgn/GA7gHL38vWzMxm07MbnzHpAEgYrWBg+tGH3Djolg86C98KV0t8ezJU2dtYtBNv/UsO565uVgkrjm25PycBDmcBc3EaoZmMMBEWaMsCB1f1z1TwMBXmqQouXYzLLQ0hRCGEg0cWmPIt6M6XPZN3/pvnNY/gjO/+J8j+1kNO2kAvHbLrCaAG2NTvQ2A2gM4Kwv58v8y+PN/cvqcVNjy1PvgXi/eAADIWebbpqHVrPqFixGHwcySBb0mA286MZWviSKBm88UuOICgb0u8YOqagSIeBLAsECraXdnRMe9SAzARU3YPJdqjB5wff0VXZXhRRBGQzjWlDdiyuMBUwbOr2FTAvBJEhzAiRDrgTNLGtR66cQzcPaiBtZDQOUSl1o18KRdVfy4Yi/Qr37S4AkfTQsTxZ8TiIDJpdHmu6Rrlvzk9icVBigaKaIsCkVK1JRbDbzWARghpNXAnZg8uOqq8NzoRhSElkCeMZZ4jAzcr2wGbpap8jySCVYHH7VGuXOXTYpxIY7CMXAvTXr914eEtmUQtjkx8xpuFQaQoMB62iQUYwyUiQDenBA4A1+/ZAG8f+q0/e3CQgTwxjVqK7NQVQPQX1wUjz07h4lSQxYligM32M/yLLwflYo+M9HJ2zMxqRFdpevk2JI9Rz4yThxHc+aV2AkBuBBigxDi34UQ1wkhrhVCPHK1Bta0yskiIx59rUFGw0igcg6LZhyw7y6tlILYfD6yoX25e8xB0neIOXSZmoIoMMbw7vrQshEJJTLwf3vBBN74MzIy2aoa0e15uczhGI/9kfIIttU1pHQv/cxM+O4+VyziL9+tbUpvkCPcJOUmkzd+8vt40yevcZ/p0A3nhtkbsFAuYKFcABHh0Hveg/rIkfBShnEvxs4sshGr2yahCCIInyXLN2cPdjFf4oN/WuPM7e468mgDBuB11cevfFLjVR9v6JcSabhgkr4cPz9tBti6q70IkyGCJgrdx7kR1UwD9/dIYkAFL0AIyTIxMyWgnYRS6BpC04iEAgC3/NxzMPPhjzT27cYuCTlj4OUxMnBNBqcfIgzm7cNUKQVDhf8ynp/W+METn4hbn/tcO9FIjERIefDydW3qVgCP468UMMwEJIDf/YDB5nmApJdQKEiJyXidhFK0L5KSEg2AJdPl0i32u7k5ZL7GUPMStdQyp7pOyLI8dACKgLogdJxvirJ4P4dZnMREJ2+NA5dNDVzXabAKxVovHsCbk9Rq2Yky8L8G8Ckiui+ABwG49sSH1G6+Q8pIcocxQK2hJVCTS1+u2i+WlArYcDaEWYQRhB5byWbufQ4ADoI2aXQGxjox/c0idKEAIdqlCD9kVuBpXMjVIpX4/w4dARX24HomMvDOksbE0EoM4XJ4AHenfu2uw1C+sJIxyB1ALvZn8fqvvh6/9z+/h/KWW7D/z96IhS98IVQfDONmy86sEQngJRTdZOBHiULZ6FKXf/jrPkQxXgfuBCsXZ/GEK0eBo1ZINXBD2PfGP0f/6qst8LOnWbVENwBMQmmRBoyuw+5Fg4EnL6iKNy1TAjV5J6aJGri0DNx4sCeCWbQyYLNHZiYAwRh4pcQxAfjGKw/iLe/UoP/aaH8vCDVZfVe406hlZM7DG2+KEopsfwC9hOKZpDAUfCFcfqqy+Aw/eLv73ksoEpiZGt231hpyGQDnVSEBu0IZKJe8892PRwBfTkJxlu85hLnbeuHviR22LK0uCIWXybI4ie0v4iSm8xx6RQycrbwACK3Dc6Q9A19Bk5HjseMGcCHEegCPBfAPAEBEJRHNrNK4RqwatksoZAxIWwbuJZRxMbRSSmDqNAhhKxP22HOSVwLDjEkXRDCuiUQsnDVGAw/1I2AbHINJEc2kH6QMvFIjXwOwoVgPKEuQl1AYA/cMl0szTQYuSYe4bGl0APDBYB4H+gdwsH8wNKKlqgrL1hC/zp63ZlncXmCvTOtOnJj283LHDpz57dhxxsdee42cA0EioXz5stZrUitgUJdQU87D31/C4X/6Jyx84YsQoGQyHAfgxunRpmW5bXjDCp9AohQGyCHYrCQZa82lRG0K68SsdWTgAKqG78ATC9FgY4Uk6B5j4DmOCcDzGe/gt89eX2hosrnxSls/S62Q9FoVztko83YA9xKK18Df+yaN3/yYGxMbf6laSIh3YkpgZmIUAG0iT/oZj0RpMnCtgMrRYv39zyAv0+eI77dp675+HfZ/J+o4D/jO39rjFYTO9z5g/5sRkZpJKEaqWELYfy8dQeGJOw4jwjvPneEBwI8hLPQY7EQY+HkADgD4JyHEd4QQ7xZCjHSQE0L8shDiciHE5QcOHDjug/mO2qOV3SLrqXxpl5bsLgBQUgHTWwFYAO8ynC/KyL4By8BrQxhW/Vhm1UsoIxq48T8KceYhm6ulpROtgIFrKaz0st668bkG7h8eyRm4e3g9gOeokXkGTjH1uT9YRKlLDPWQAXgdnHY6SD9cn07H5iWU5DoTQSJl4Dt+5VdRLLFOOSKOG0ilhOBoJkDfsL31mtQK2FnOoXfGe+3+luy1NYM+hEknw2UZuJucm2YMr+DoolBENsLAOWuVUkCLHIMcyGsDaBNCz8rahGbBQGTAorEq68Bg8XSNN/6MxD8+SWJmEiMRFstaAxxKQaj658WvpSMmTSemjGGETZNMQiGyoXWPvI5c6Yr4QFTZaPVBzsCX2rKTq2oEeKo9sTNRM8RTS6CiAURmYCqJ3K3WVsLAR2zehcfmhI7X+ZlTWivgz35W4QsPFBj0OjCNOPBaeQbOa6HYTEz/zgutA4B7Bj6uiuaJ2okAeAbgoQDeTkQPAbAI4LXNjYjonUT0cCJ6+JYtW477YGbYLqEQmeD5jwA+5uWFAKYcgDech5mxzMcvgyQRjCEM+geZhOKWlYsNCcUzcAmQo/DLMXDD6C0HnRf8fwr9aTswI4BdFzwfanoaWjQZuD0el1BCJ5jghKqDpCHZwzMYLqEyVQrgdazoGMMIxzcUmHAdb0QC4IBoaJDNlVAAcP+zEOnBdEdCUvuZmw/TFFIDIGgXzUP9ASSlDDyr2wHQSiiNJbCPmeblcv33KsOQ8kQXEs1ltShcIg9B6riU5k5Mv39/jhz0eoJQgHDFvSU+9XBpAfBYALzxvBsBVEsXxL89gDcmXAhAZDnaTHkN11DiiF78+tdZ1JeTUJqrSAEIQRCSsHsz8IkfTq+XaYnsqPfsQbV3L5Yuv3zEh6UlYPQQKifoUsbM6gaAr8TxWw5d1I0gFH6VIeL7WEvg5m0C73iaQmVGGbiWDoOSMMIaoLh6h2G+FPes3BWdmDsB7CSib7i//x0W0G8X85770bRkY6NQBFDCofIYBn7zoT4wdSoAoMpHX5BhhuC0sBo4oVw6xBodLC+hQAgosm9mAPA2Bt7QEMPxc0A7h4qWwK7zno2u6mCxlwK4Z2eKAFZX147FDUWRDgCuGKMZlH1UpkKpS9SHPYBXQQMPEsoy1fAmKw/g/IWJEoqfZPPTT09+Zxrf+1jsMosPoiCAFtIVjrda8QncwCx6Bj6w0kvCwNsB0Lji+zzT1t8DY3TEBHc9RYhCYTtpdEMn2cHA1abOBlWQUMoGgO88Yp3nwojEed0VBpLFoJI4xiV3g3lOqy5MvSlMTEY65siB01igl2MAPIQRGkpKNwyvvyE8v4engdmJNgmFICQghQ2jfO8TVNLdvbWZxsICbnrST+DW57+glYHregCZG9QDBlnNiLQV6MyLbpmtJKHjWbJgHYDYra21GolC0U5C4aG8RttcCf9bYTTLJ3Cf3dU0cCLaC2CHEOI+7qMnALhmVUbVYmachGIsAzcSqFwij9DtL29ZG6AzDeQTqFue22HOANxFKwz7DMDrGIWSn302bnAV31QAcEC4HlwkbTYcOQb+T0+UeNvTZHIuQKPwjxDQmatBIQGDDB2ZY6EL6DkWRuiuAZdQmiFUknSQUCZZ559B1UelUwZuO883olCWqUc95eK0k+gUQpBQvDTeBPCgK/ufuevJgVcAoMYKx1ut2AQuNPRS7DwuGgw8bwC4NoTFYY26xYkZztkwBu71fJmNALhoArhj4ACQ9yumgacAPrtoQ1UFpXJdRxhUzukIWGA9JgbeeN43ZBMAqZhOLxzwlGn5XxKAUGMA3N3EEYev0UED/8efkHjzT6sguwVzGrhgbItHc7QGGdQ14FZsptEZR0ugrIdQBaHu8+SxdBcrAfCqtBclk4yBI5IV/j4Oa5VIYICVWGTDiWkZOIXrIIxhvhTv97jrMXAAeAWAfxVCfA/AgwH8yQmPaIz5rjttiTzQNqusouUBPM8y62mcOjWpWeyXvBzAASuhlOV8qGfsowfM0hLUxg14689l6BeM7QlAUNyxlpGBl0wrXFyMYNys3FY7zU1LgChDVxVY6iDpCehf7okhUPgIkcYSLSMdolDWDWKnkWE5RGlKlLpMNHDtWHXtGAcNxjPwdbXd32IZgVYQKyfrhiQnU5eIZ5VeQvEaOAdeQcD2/T9oPS5n4Ao1jEu+Mv0BhEmvZVNC+efLbsGT3vxlJwlQcr28dmlYz88gBykL4ByAZEM3FrJjS6oCyMvYBMBGoYxKKNKkEkoXhJKiWGybQMTxH3n/B8K5tlmTrQspQaTCc+01cM7Afc2WsQw8tDCkUP7XnoOBdkA7NyEwOykgG3GyJASEBG8dmqSkmxYAT7JEG2CnJVDq0jLwPkseazLwFYTqGeejymTUwGtifho2zn4lRxi4kaMAbrOV43MkjI7hl77mzO0koZxQQwci+i6Ah6/OUJa30OJqGSemcQy8NQEEQObilmlqK0hER9lSB5gaAMNcpBIKEYbVUshS8y+KWVyEnJiAFhb8owYuAFb9rFYAeZCRcaKYX5qBf12bxe81A/CaMnRVB0sdAc1aSnkG/lfvsgPb3/9rmNm5ZD8KMQplmgE4tMFStYTa1KiPHLbXo66DRBWkn2UY+IRn4BwkmQYewKfx0PqJNdzDMQA+MebQmpUqyESF33zPZXgDgD2HbwFACRNsNoPYOzvA3rkB1vVyG4nCXsBwzqaGrmp86D//Dxa22tAzITMMqcnAU96TqSww6rxEZOA1gTiK1XEFUjLc7ArCYeoCsJMoIX3O977hDRhc/X1s+8M/HHNhGoRFKAByhIHnJZdQXJboOA081MCnNCrEaNSln+zd4Rq6ZiXsjeKfJ8XAWoC23BVTzWk4qoGXpoTMCHrIZ4XlJZQyGw1V9GpJJhiAo31FPNQS1OC4/hnkgQjBickYeFjJ+UYlKyzpfKx20nTkoXJMgSNjLJsQCGxHjWHg/pqW3VMABuCLXQvgZR5XZd6JWdaDCAaGSSibNsGAUgAXAkTxhdAKgTlpyR5iVoWwufwMYCIBA4Wu6qLfAWoO4I0H99Db3wG15ZTkM0k6OKImquiQzGtgqbbMmTsxtY/tdmyKWnoJevP1lHmnFcEklFj8K31oZUNCCQycSygOwBc7aTNcA6fZut9mog59D3cd3I4OGgzcWEYmXaahIYIhQGsnobDJJUTeaA0zcwRT9QBTO+01U14DZ2AkG7HTmcgDgCsTScDQFbMKVtcgYyCQNj3owqCkCQQAb0keGd7UvioBWvRyqQCSgU1qac8xYeBkWbG/Pk3zqzdtCJo3gqg16so/K/5w3Blj38POdN2QUAQQMnBHwWx4bWz9Ro3iVloClakgc5Mcp5nIwwHcwFZ45AA+yGMBsYI5MevD1wGOUvFnaFBmIQ7cAPjsQwU2lAYPul40WgtaJyYH8Cdf/2XMf05FAB9T2uFE7aRIpf/+rlnMzFvQadPAhdPAtVunyTGTXe1Od27Lw5KXxPey5E5MwC4fKz2MqbWegS8tQfZ60LBAq5gTEyYCeK1iGKFmDJwvF0cAnL10hhS6WQdLBWwVNmdt+miTtXAGzi1nk9v8/l1hPF5C8UtGy8DbJ8LCF+rhuydiDNx9ZDS0FEH79xq4agJ4CwOfaQSkGhmXr/b8KnRd5Eynts9FczXDOzN5jCu11Sd5Mk0I+TRmxEEtstwCOLdG9mKmVKJpRwaeauBCm8A++Vg70qDGdPi7DcD14cP4xs2H8Jefub7lyyaAS6uBMyemloBkAC5rJ9Vk7bUcuAbOW82R0aGaop8gsgYDJylw2kPncNZjjrDP2AYtDHz4AzZBDdIlmFYCpalHy04sw8CHRSqHAHal7fHjsNiAy5/+eQAuccofi0sotQz3r1bAPzxZYdD1YYRcA9c2byTkkGi85Dsfxc5ff0VMsLudGPhJAeB/+ZnrsfewL2YFJFMvkVsOIlQjHMfAfdDETfd6ERZldBotuVZonIELItSaUDEGHjTwQR+y10Mt7HE5gBsmoVQyhhFyCYVWwsAFoJGhm/XQ7wDEY89bALxuNEhWjIFz46BbBQmlCvqhr4JIZQWZtV/Htn2BAF6NkIgAbdCfyrBnkz1xOSKhmOScAcucu9VoBp8RKQPPRR0yQjsVWjvBVCwCyGvbpXbNnnkcL5NQRgBcKVRIy4o2Y6czqTBkHdJ96FilDQx/xbQOk5Zh17YHwia9NTnXptUzM/i5d34db/3CTSPfjfh8vITiAVy4yY8lZOWla/eWR1TkT4v0zzoRKg64gwVUTl7zYKeaGjiAfrYu/YwrHy1hhHo+SoC6EXqrBTAkjX/dlD4UC0bj0e97NA72D9rtmPNzmI8C+DC+8iCh0JebAMQVYC0BXjNhsRSBgUvG0UYkFGMAstevlkgzbf2kck8G8E6mWFo4kDBDJ6GQRGi4ME4Drxy1ObQ4TJhRYODMiSlh3MMbGbiXAKg/gOh1LQNvALg28YWoVYyn5hKKYEtSwx7+juqgcn8bBVRaoJP1sNQBsLCEa+97P8xdeil0W4hcY1mqSCOjUabjl5RZTUFrNmUZJJSaAbho7WkWjQM4q18EaedU29tTigAMzQxS0jUM0klsyr27M5OjziOSCP1JJaogoRSVi8hpToYDzsDd8p1cdiEvssUklGapYCVzACJl0g0JpWgwcO7ETH5XtwP4BDQquRmZjx1uAXDDE7ma1ogDH2hYJyZfzclYshewzm8SAtfuj5McXxX4ybg2FJyWAEDXfwa6AeBZc1ksgPc+8pN4wODdcfwMaaoWeY4YaOtG6K2WQCUE+p30wiyRwVw5hy/u+KLdBwPJQQuAc9mKkGFY2Q0CgDcJgClCkk+IRBPUUg/cMnA4ktFl7/fBI9+3+6rjamQ17aQA8G4uQ0icMkiSKsgY+KwyLdLSmE2rCPjObUdwaKFMWE6fAbj/fO/kIcx1PhWKaAEIjNEMBpDdnnViyjhhCCGgdXyTKxUZeMiGQxrOxTs+9bIeKoeCRhAqEuhmk8mDO/PvHx6piQ6MRudIGBQtupu/NtPstI587b9x6Fdeb4/rJZSqPioDz5PdxzhwkANM7Wtjp2MME6z7vq1oflNCIWH/FzRwWYeMUM/Am514q0EfRIRv33YkbcZMSBhRqJ1NejRJy9fJYNEIzSiUTIlWAC81xVoo7nz9cYmBRQGgzKbxsZ178PzZuVYAb5oZDnHTk34Cc5/+zMiKbN9CBVB0YpJn4Iz5FkOCEYR//iYrdcDG5KNQjCHUnIGXgxGHd9EoV0kCmJpajwXY2sxPP//pSV3tNg2cR9mMMHAFlCLtWrTk3BJnHCSs+5dLQZQ6WwdFw3GKFKCNyDCoDDqyQNmbSL73E6mmPDihQ2SVsB2WkpLOWgMUr/NUn3Waus05Z814n9KJ2EkC4CpUR1MNBk7MiamdT7atmzkAHF7S+Km3fQ1fvuFA8pL4mPAyEwEEBAGLk/+JmmUkSkNWv65ryBYGTkKgppSBhw7aIk4OPCbUKMJnHyzwlfsLdLNuAHCSQGWAbj5hGbgztWFDYKHLmSKNvIWBe9DlAK72HIzj8S99WSeg1H4M9gchVCO0DNylXfPzdtcpOD+NzaBtA6yZqQYD9wDuo1CaGjiN7qce9vHt247gp9/2NVy9KzJYY1IN3DN3rTVoMc0C9ZmKxCJPZEMD37a+lwK4G0czjFAwCQV8chQ5RFbgnLrGqw/PtEooAPD/XfE+XPox2/yguu02VDt2oP/tK0YkFNtGTI5o4AkDHxKMFCF3AmgAOItCqZk0YbKJ6MT0l6RH+KtnxetDQmDTpH0P/u0JX8Gf/OifpFE8bXIC753qNPDakxkJlEKEUE3AArQwNhLr7A9ehnr/ftsZx1mbhGKYVq9FgaVSo8g6KIuOO579Lg8AXoQJ3O9K+P/mz4/RoQ66kcA0C8E9d8ZKQ+qeLaFIZIY5wBgFvfBjO3HOLTVIIoT8tLbiQoxS2T3TT1NkeYxqCCO0plkEhzAmFt3pdmFc66rA+IVEpdsB/OGdTXily6bk0QCkgHf9pMJbn6HQm92NyqX1krAA0M0nsMSYh1q/fuwExU0ag7zBwPus0tr0UvskEF5ibXDTxMqDlARFhi0CA7dOzCBLNbXaY2DgRjgJxcswLAqlqP1z0dj9oI+5gb0G/l/A6eFcQnHHH5RV6muAl1CwLAP/u+c9tF1CaToxa1ZHhM1+RF1kTouWaJ/QAOCJO66w4zeE8rbbAADlzl2xfZg/PxeFEnwuwk5SqorbFaX9XIMDeDwwLyfLma3Oe6Euj2esPSJcdj+JmQl/ogIThf1yUBsbnSXT67Cc+RwEL3nUEpiTEgNGZAYFcN+d8XyqXbuSPqdVG4DzLEuRoV/W6KgOhll0VAJg8eE5RNbQVTwVb8SB+8QoI4DpfpzwznIAXujxeRUnYicFgHdzFRxy0gBgzNJXyiMhUDsJZRzAeYDvZDJhOZ51KucMBeJ9qnljA23iUq9rnybDWCGERGniU2ajUOzve0Jiwjv5qtHlOwD0dIXK1f800maOdvOpIPEAgFy/bqTBQptJaOSNKJQyj5PNOqcU1CMsJV4Y7phbiQlEAOcMPIRmNu+L9gx89IRGnJhOirlgL/DqD2soUbOqiEC3xAiA18N+KIdaMp1Yj2Hg/WEJNBpWhzBEt5Q2wEgmZpHJRH7zYFU2nJiCSSg8+UWjAyos+onR0xgxbQzKW24FYIFrpMmJZ+B+NeU1cDaBFpUDcBHPxSQSSnRiJgBOCuILX8NNW6PzvxdqX/sfAz0P4O5ZTybpo5QJ8BFVocSBBPZmWSKh9AtggmFitWtXkoJftwC4JydGAFAdLJUaHdWxK29EAH/y4hJ+7cgMaupC5U0Ad/+ORKHY77QEphiAezI5koC4SnZSAHgnj07MzABKjOpJvQGBnLCYjQNw9xL6Vlfhc/fCKcOjUOy/miW0SEMhMYc6rvtPcgUltI5oq6UIN1rKSOIk71PIXuQuEUrvUJPAsDbodqawxDRw4Vp0Hc0kEbKG7lYWFCSUdW4eGmG6jIWVR5FQvPn6EH7ZLQi4+A2fwdKgtAx7DAMnYwKzblrTiek1cAD44RsIypTo1vHejANw77wsm518eC2LwMBrYD51FmYqZeBGAko0XmoA56+7f5C6UidmqoF7CYXvokYPZWdz+PuoAF7XgYFXO3eOSCjaNzZxh/ZRKE0j6cHe/S5jq4xQCwWJE7PccRjy5h344oPiDnu+ql9g/ALdzAO4CccK53e0tHLn5OQMvBIi1JvxRbS4Vbt2JWGEdU4tDFyE/UF0sFRpFKrA0Etobvvzyhovm5lDTRlUnr4E0t0dHntPZCAQGXi3GgWgcaHNJ2onBYB3c5kwcEWjAL75iGVJy83tng1V3rnmzOubykSQuHAXYethQl3GaV4YCpIIdSIDj6ZQsZRo7jQRgiDdrJCUOmXb9EwsSQlhWWOnmE4YOJXliiQUhVENvCpsHPjL/kvjJZ+xO5kdibeOJ9T0yo+zWgG8FoqfYPYeWQzaNdBg4MbYjLUxEsoFqtGpnO0HALpUxrK2sJM2NaBPDwchfLBKAJwSx59/sQdlBcE6EQEILccogBNsY5CG/f7D3oGBY4iBgdepE1OyOHByxdRqCQxpElVnIzvoyO7T8yprlLdaBm4WFtBbTB8IAwUlWWd6mUY7eSOIZHx88pZkkE1djc8ffGvCwOt99vrccEbcthfah/kfC3Rdje3AwLlk2ewU37z/DQD3+20LNgg/2bEjSaU3WfzdpQ8T+NpbngXj2HStACEL9B0DH3pg94k4jsZVyJA1E50CGeFRKCbEYIbkKQHMxT4SY6tjnqidFABuwwidA0zbJI6m5bUFaP+itWEcB3D+QM1P2s9nJqNe+0M3Ev7m73XSv1DqyMBN4ZbWiX4uUTsAlyy1FrAMXLljpgw8btNjNYW9hNIrphMnpinLlUkoxiBrTHR1bhn4/W+1O1jojtZyTgB8hU9HlQkIihmiQSasdcKckwYU9RC+dnab5vvHcweTv01ju44pgwYe9tlcMg8HASsqd83/JHsXXoP3JKVv/e+GVQU0nJh5AHDh/m0H8EyKoNGSBL63cwYf/vbOEQklJIA4QNUSWBKTGBTHAuAlqttuC7VmNhwxYeUG2HyIQslk0mmyUT/OmjkxOYALo9E76724fvHzaXGpejR2v9tg4EJY2RMA+h7A+b4bYY/NlZ4cusJqjIEDCBOkLfsc93d4CvjqFR9NqnzqPJb1ne8JTG0+LYyhVoAUXSyVtWXg/jjunCr/nmYdqAaA+2uUsVUEaRMkFI8H8z2sqLzxidpJAeBNBp63MHAAMKQigLecWQRwSsDgqgsLvOWZEp/8ITECJpol3XAGbpzGlzABkaE0FsB7DQAXIEhln0Be6tQ0GHg4vrDL/k5nOnFiUlWNpNK3mSQzcp0os1mOpziVoKhTxxWApIVU20vfZnWGBMC9DkW1bkgo7DeDOauBtyzvjaDR7D6MAvhEPYTm2zUrxw0GIXywcgTgedkX8WJ5aaphesZc1RjOpxNH5jMVvYQiXGOQhikpQqYgSeCj37HhY+un4opMaBMr8flluwL6cgJCRhQTR5mh67KCnp1F9yLbrFdSCoJaZMiY89hIjMTIA3ZSMkzL4SBbEQsv5GGEDnz5s9Hz7dfC6lEEAA/d2tmtaUaheAD1GrdwDFxnKbP3USjDPN3f3o3AlhlKJ5osrgRrBazvbkwAHKqLa/fMY2kgsFum7QRvlGfZXRSdkaxbT7hy3qWKtB2OYJPGRDrJKZPGqa+WnRwAzhi4BJCb0WpH739mB4SUdTTN65FlI7xLQeJrF9nKY83fbfi+zVa0abgUnJg+9DABcKlQGbtuSuQQAGLuNsgwezMHVsJkTAyQFMCw1lD5JDSrXT5Yml+hhGKgmIRSS0AowpmH4k0vaoAaD6hudCdZiWklANZSzb84pOskfFIx2aJenIfQBloB1ADrMseIzt+MVunoEr16iKUexpoZLEI7oK4ay3Y+CXowKssa5eJMsp30AC4igDedmICNBS+dRktKYLZf4YwNPdx32/p4TG1CCJ5wjppa2pA2JVf+KlJVwvT7yFiDFL6SMlC261DDiTmyH5Fq4IZnk1J05pZVKmcBDQA3KQOHlExC8Ro4Y+BcfkBkqh7ApSu6pRvM2DPwYYYEwHdvFtgyC5T9OGbKTAxEUEC/nAhkpVaAUl3cdngJ1+0uA4D7czoibVkDmRUjTZ9NyztMtnluwsAXO6MEiMrVj0Q5KQC8wxg4ADxy1w3J91deKHDbWXkiobRmswmvTaYSimIlYJvc5z5fmcF/XyxwyzbnxHQMfFEOR44jhMKQuhBE6JJJZ2AByMqGfvBEI854u8SiYNw4kXXRAfC+52/GMAO+u/vyFTkxRYOB1wqQLT8sG+t13l5qJRKKgXUWCaROTMA+2Bw4+HnXi7PIBhqDYvReVUXiGrDHaWjgualQmDpp2TVSu3nQDxKKx+vBTIbhbJZGoQTNWsMszif78BqoB6BxEooSIrJgKTDXr7Gulycx41IbVM7x6rNcawVoWUDxa30UCeXIwVnAGMz24v3kAK5FjpqtMm0YYYsGLkUShcK7s2c8q7EcLWXL76t2kVc8CqUpoSQ96XR67T3QeQBXQ5+tmh5LK4FSudUG292uzbb94ODW7eGzhc0RwCsFXPK1wygR/Q5S2Zl/sP+pLBPTO0mdozIrRlZbnsUXXAZ15WQJLCS1EKMRXoPRifBE7aQAcM7AAeDlV3wp+b6WAIyAFFlS/6Fpnm3YBAv/GaDc+vKxdBp+9YEvG/ndty6yNZ6FIRjXh3EesUysN6FyVMjxG0dm8bSFpYYGbqAeNbpv7vnvNcIYh7UBsg66ZHDF+YQD6wFU9criwMkkqfRNAF/oAp98uAj1v8N4OAOX7dcx2V7ZpbglIG6V5A5T1IvIqc8YePxd3Z9H1q9tnZdmCnM++mByJg9YBq5Ipw7eBoAbFkbobfunTsXNl54KXgjJT1q1roF+molZ5O4ADAzHSSiVB3AhMDeosK6bJXVThKbAwJXMLPuWgJY5ZHIflr/ob/ywjQf/8L5Ph88SCQUKtYm9OY0Yvcb+XDgDJzaLTOnoCxi2ADhnl0tmOvlMSIlcSesXCGGEYxi4xCiAOwZumJ8AAJ6ysIhB4SWUuL/H/Ohz7XbbrWP3Nb+gcORsk0gos/2JQJa0AlRmAZzKLXhIZ1PYDgBqL/llHUg3we3ZCNxvWGKju6h5FeUSIq+BR8fxsBgNArjHMnAbBz6edtqZTiHL8qj7tbwDmjkxwZxSC2QL72wrzsIvXfwrI7/dv8llsmkKDRpe9e0/HDmOkDmGKPDS2Tk8cDhMAXzdNsjzf2xkTNxx1KP4UEgSDsC76BJhXg9RZTYRZ0VOTKKkGmGtInuYmQR+8VUZ3vMklQA2AGj2Ems1HsBDswDFaqg3GPjp1W0wgkJlu2TlsTiPbKDR744y8Log7JeN/qkNBl7oCpkxWOyyZX9jP8Q08Ka1MXAyBopl0RkBKMegiUko7U5MidpPxgqY61dY38uhGIBLJqFIpaAkYTNpGFkgkwJ9n8Xbcs05mytnrBNjlslHnIHXcDXP/TMuRauEAoFQAA5IGTgnCWW1PIAvOgDnEgpg31svoSSJUAzApYwr1WFhCVXm9GUv6RQgvHB2Ds9YWES/A5t4w65RdqZtkyhvs42RjQS6hhIAXyynYxihAmQWL95kUYTPgZSBS6nwuhcpvOnnBf7xnBfgoLFdporahGvQ5sRsq8VCw1Hp90TtJAFweVQAJ1LIZRYkkDYJ5ZH3tqBQaUoYwfb6bADAzKYfhmSzqLelCQQG7iUUn3nniUAtgVzmqByjUUhnYJl3IHNGF501nUEhYoO8hNKxAG5K1BLINK1MAycTYucBv1S3B7v2rHiCIwychZXVY7RTIAKGVjYcjXgceEiVt/vP3V3hDFwvLSD3EkrjGHUh8NzJd+Oas1iIW0MDL0wNSQaLzMHbvG9mOIiF9ZvGNXD3Yl8ktmNqKdVnM5VKKEYASjRCdwAoJYKWK43AXL+yEgrL5JucrzDziy+32+c5lCR0hYGRBZQQmIWL6Wx5djnDLlyRrsVujLYaJgw8jZCyNTpaJBSRhhFyAOckoWph4Dz5ak5vsMfz5MPtpptLDOpRCSWpXy5ivHYt7TX0AO6VzY2k8duHZzBhCHs2CuzbaPMhvE1+488w1wOKHQfDOCYoSigkCUtVN0zUtQQW2Iw36d7LMI4QhVJACoUfnC6wMCFQ/ehr0JdWs+tULM7c2J6YBIQ+pIM8ff/3bpEjTvbVsJMCwDuZWjaTyQO4VNmyGvh5W2LNZf9ACQDkmE+hCsgWZ5KCZTDSIBSn8vffP5e1ApSw4tznt74Uf1X9bKqB5x2oopvsd7EDLLGElS6TUKQHcCHQI4EatudjVq8MwAVMSIcG7DXqzdpz++758ZgcsAEkUQnLMXCvG2oJQFjxxDNwjxWGJBYygTNdFEOigfcXkQ8MBp02Bi4wqAz+8PkTeLOrsTGigesayhgs8Ap1TQmlHMbehA3jTkzv3KbaJA0ASABF6FgTV2xKtTFwERh4UQGzLQycm1KZ69wOkCogpcAl9ZPtMVoe3qQF29A666bXnxKAfcikuAp5GKv/d6yEwjOK2GSTMvDRHqU9mFD06YixEkQANM7Ay1EA5wwcTEKplXVo5i7l32R+BWG/7xDhT58t8Z4nyWSSWzecx+7NQLYU/VIdEyehTAL9ykQAV8AMa4486d5Ln6dR6ifj/1YvAIpJKPZ+5JmEcfc+r5mTmFwGoIhjHRSRGOzZCLzzhZMozjpr5DqeqJ0UAL4SBm4og2IA3gY8XI8MGXIE+CYMuSwgxCigKLKOFuvE7KPMIiNT3jGigMyFgn3mlBfhKn1BsuyVWQcqj8u2a84CfuG3Mgw68aVJJRTgmj1zuORrt6AH/+AJqBVLKKMauHAnxgG8bsgB/O+ki1DDqgYDFyRCMauQxUoSC0riHAfgnIFfcdvlyIcGw85oFIoubAKIRFpRj2vcuamhyIRSwMBoDDsNh2MZOG+K4VcmVT+9FkYAuQdw5sQULZmYigF4XgGLpca6bj4SR+wty3LbN1IQjLISytv1/8KFg0vSCobOkibIrkLmpg3bArBXCQP3AB4BsNnbEfAORO5ljud1zo4KH/zTGp2SULYw8AnEtmtzegueNzsPP4dIwQC8jYGza09SRO1ZWWKQuz6v5KNinKxXkF05K6TPwjpjMN+LfxsBbK2jBk7KFeVS8T2aL+P2U66MQS4J337GJzGQP4R/0j+JTiZDxBEBKJQM70enimzb98TkuMGdmFq256Wshp0kAK7GNmkAXOMEypCp2IWkjYHzVljC3UwJBAAvZAEhRACgxQ7wOy9WUCRCKVPTH4S41Z6JkkctASUskx/WGpWZSGKsZdHF5TuiYyhGn3ANHAkDB4A/+I+r0XO3qVaOga8okYdGJJSrfrSL9zyTcGSaMfDGiqNm7HJQjMpJ3hIAd9dMugnDX7+SBLQAzqlG2+F97ftfccfAiGRgCmkBXKiURbLtOi6emleoGxlfWa5MQnEvpVlKrwUJFoXiNXBpHZBNU0KgcoCTOQa5vpdBjev6nhWucztAquOcmAIl8talNmfgEw5Qs95kYOD8+0o0GbhIolD8ttaJySSUZt0PAKcfAup6NHqix9yfB8wmvO7wEXT9BO4jNZSMNWgSBs4BXIZ3wTNwP6Ig6bjvu2GFF6PNtADWk0mkyNcePozHL1ZRQlH+3sX36JVPvDhsP1lYYlUqQLnJFLAr/0xEAM+VQOVyOTITVw5kKAC4X8ENc1Z7RQI0prvVidpJAeCdbHkGrgMDjy9LG4BnjGEktVBc8k03szOxXz5+7JES27cJK6GoGAfu2dC0iWFytQJyd/xhbUCmm0ooRRe/87HY9y88cEzY7Wa91rTznogPnlqhBi5gUiemBPrdDm66V4PtNp2YDJz6xcokFIJ0k0oaB65hVy7nMgnFCLvV2fvtRpaBp/vWHYFBbSBFOiHz7bpunxWTDvg9rZT1+o+VUHhMul8WtwC4lMriKdPAsxYJRamUgQPAut4yDLzo2J6RkgDVCaDRZrWMyS4AMOmcimpiMvFFhO1dC7hwvWRaDdBPeiRFWu62WXkPwLo+oXLH4yvKSTKhoOIRY4MAgjPbMWYlRWykwQGcN0OQae9OPhGJFgYOAAMzEQFcAlMmBfApMgBUzAj2QOrOVUvChWdsxv952v0AANOF9T0MlYDIcig31iKToXmHDTIR0Flc8nEJRTinsa81NGBRKJaB35MBPFdjS8QCcP0wcxTZ8mGESScV/sL0T0d/5/NwwboH26/cx/4GSMMZeD+wnmkTE4K0shIM4OLMTTd54FXRS0K24gPHGHg+GfbHb8yEc5pVytZRWWkqvWLp4rUCaipCqcx/Mqfh0h27kIm0XkrN5IGSpSM3rY2BNyUUIazv4ByX4pwZ+4LOTAFnH3B6Y4sGPnNGBm0IUqQ1rbkVjoFznZ4DeK0AKquxhe8EEQ5PAW97msTuLZaBTbkFki/wZSNOpMtqZBp4CwPPpEBZuG3cZ+u6OVQ+TkIprIQiAWQFpGifiPw4uBPTA3je7cUWfCwJp4aXffz+0kxMvy+CCKsPYAyALyICOAOkaTLwIQO7yUUMuSFk7sBSCoRmVSy6KWXgKkw+tUodf+SSgTyA+2cXpJIVUY5UhpPShlL6j3w2RO3ICkkAMg+T5rSaRKWAobKhwL7kRSeTCQMHkAB46sS019mXax7mccLTArcTfJ8sAJ4J9IbLaOAKMMiQZemSu2kJG+IdQiBRzz8QRePF9DfIa7HKEHR/iTFwCoBbS6BQ9uaW2gA6ZeCy00scRgGQ2ECLfCqyGAY8XRnDnJSmZSczb/PFAoyKSSlaARV1UBBBEuH+5z0V2yqDQqbp9n75DQDIl9HA/cusAEC6VPqUgfsuJT7VWmm7v4PrgLMP2E3KggJT3H4a8IpfVTh8gauNzeL6eTceAOg4bbWW8UXhk02tAOh6LAPPtA1f+9IDJYybIDcuAGVGIbachI1plkJERyfGJPJIgRvPzfGhRwtc8Xi7kls/kUNl7RKKKnoQGdmysqoTWB8wGoRiJELJUwCYqq1TMb/m/XEZz52YTsoLE4EUSWprYPMiZeBtEsqmBYQmxhzAJ4kCA5/Bejxy8FZU7hpl7iFWAjEOn50fX02TyuL9UykD9wBOIwAenwstATzm1eALSUk2ZNg/L7EKYSRbUAWU2++U6uHfHifx5QdIC+wqArgMGrjbRxYDEeIqOkooCQP30tw9nYEffM1rcOaB8ahlBFCbHFm2fBRK1ubERLw5srGMDQBOPpEHqPbsxpxzmHAGbp2Y9s0fVnYJx5eNqjOZFs93+xbsdc07k62fd500UytADgYrYuD9bACSMXqglgID6qFLhIIIprMBB7ABqqHHaF6TYwUM3JYfkC6EkAE4kQNwCg+ZMvZeHVonAlOpWBihEcC+jSKUa1VCJU5MxQZTuAQRLaN8QELgL14I/OnP2mU51fVYDbwo47nlTtfctAAsTqbhd1LYyn6JBt4SWZJLCSElPvRYhdI5ptd18+SZ45blXWx96Cy2PHAOyFIJpcnAtWxn4B3JYpEZw63QiCeXIpGfhkFCQeIwvfnIqNa9aZ5Cv1Qum00ZAwUKjsw92ByO4RlsJiVqL5fwjkacgWdZlH9ko0ysm1AsexdBQiHKktIG6ExZOcrvRhrUyGI0VJC//IQAQOXI3edTahL/9cMSN26TgEollMxLKCGkpRucl1EDd2GEHMDzyPiNBOp7MoD3Ljh92e+1FNDIkyiUtljaJAolAWvHHMYCuGXgRQ1UN9yE61wcdc/EJJZaAYVbXg0dO9zo8PMLDxR433cOpSF6LRJKXkzjUw8T+NyDBb750Hhrei72tFKArPUKMzEpae5cK2DgGHhOgFEF9tHGkYa0FWOXKm+fCO1YIpuJk2HcVyYRmk37y+odPwfXsf2wVHoPqNPkAVwm3/EwRA7gdQBcgd2nAt+5wOmqtR4P4FX0X0x147K4P8nDC13CjRAJYLRlYkopIByCHVqwq5qNEzkU6/rOLev00NtcobuhBrLOspmYRjQ0cOdU7MiYUYw8BfAik/EZFyJ50z2AGyFg2LEGLZdq03x0YiYSijHIqNFWz12jnrs+UiLWDOPdfnTKwGP4YXyuALYiEAJQOTLYukUglUprxVQIAfSbGxE18OAkZYDKgbor7YopIwKkSpyYTQYuZBEm0zDxBCemCE7MQS4CA9cSqFfCuo7DTgoA3zj5NQDA3GT7RdASqKhAzpxLbcyR1/blPQ593O04Bi5Yg1gQ4fvnuBtvVALgHWWBdug879+7V4Gr7gX86+MlZkuV1J1oc2LKfArDQuCdP6lgugqPv4/VFjuO2dcKkBorA3DTSF1XwIC66BAhB8GIHPtpI/JGpXm//AaAbBkADy+zAiBUZN3OcuFkoMbvjQAOsSgYzsClAF596Ah+mtYDsEDJa1rzCanjMvy0YgwcImR9Wgaux0ooBUuFXjfBarizcyY4CaWhgTdbqnmT7nUSEHjBj5yDU9d1IWW7hJIVMaR0emJiWSfmpx8mRhi4AdCVLJmEaeC/8cSL8Pnf+rFEQuGVBn2nJXITU2SUoxPTxgWCdp2PmgxcUgoggYF7CUWKkAkrOAPnEkrWiROwajBwV/ETSgBuldSRBWBYxrWEjddmDFwh1cC9hKKZpAFVBKmEZI7XHzyMf9l1IDn3IpPB3+H3LmURrkPAGHLTINPAB0XMsdBSQN+TAVxMrMOL/j+JS5/SjlxGAjWNSigff0T6Ukge0sW1P4cyDz5zQ7K9r5Vsw5b8ejvHTW5BsFFniYRSOH3Mh04dWN/BX/yMxPyEwBCdZLkapZJos2UEEiUknnrxNgBA4QrvVJldfq6sIw+QJZEWwAAdTBljvfaqwD7aMKKB10wDz7JlolASJ6Z0xXzi8bpS2EgPgYQdaQl8+4K407pgqyEBvGhuHsI5ezORxTR3IZIJqfAALpnkISMj1E4DH8fAO1VMxLj3aRvC50KkRaCUFLY5gmdvAmFZ3TQZJmOB5z3CZveOjwOPAL5x/XTixOTP5h8+R+KDj5GhNjYATFZDDAugCwrskmd8PurC03HWpon4dsuUgft7x2UhIA0h9bZ5HqGpccrACRIiBXDvgHeXXEkZrz+TeJK68HknMlmRlmCmjhtoZhk4AJtt3XBiWgYefycEoeZRKD7QIEgoZBm9u6daKDx7fgHnufjz2o25k8kg5/mnSKhumEx9fZ4QRsjeZl6vxQigup0iwU8YwIUQSgjxHSHEf67GgNqs35lEv5CYEO31dH2EBQdwCOBff1zhP3+ILd2ydgnlKRdvw4df9ihsnEyXuzUcoJLC7q0Ce7YIZL/3y9BK4LcPHcET53uBddRSoJP7OHAXjWE6GLiHZEhd6zRy+w4PLaO4tYjtcRRiRbfCSSi1Y6ErcWJKkzJ1LYEl6uFXZubwpv0HcdWeJeyjjShkIwqFuAZ+dCemkQLwy1XOwKV7qCUCK7bbA3s3CfzVsyT+5yIBqLRuNYDQEkzJ1CmtEgmFAbhDbRIRUGoJiNqktVDYf3MGXvC2WQLJMaUQbqkt4zjGATgL+8h9nsEYCSWfjFnBm9dPJ05MPq3XyrFk1sV+sioxzHxii/1MKRmY9GTHPbehh59MNHAPkqE8QHiGR2/25nngjFtseI6fRDwDF9Ro7+cOp9zBlEAE8DFOTGRFIDNGITnP/rYu3v0TEgfO6wQGnosCoGyEgXMkk05C4b1q7bjdPZRIolBq97x5wubHXGQytNSLAF6kcfQCloETEjY2KIBMMplv/ALrhGw1GPgrAVy7CvsZa3OuVsHUmFnMCCehZKOJPFwCSBxKjA2/4X9djIeds3FkvzXscQVJbD9H4q9f2IV5xH0BAKfXNSpMJhJKnqUSSqUjIA/J7isw1zCuOI4BxU6+kgQ6mdfmrUYX4oxXUBfeMvDIoGsF9KmLrVrjfmWFD333APZiE1Rjaeez+ABLeo7GwG2CjZdQ4ve518BFusroCOBNUxfjsvtJ/M0zFRSN3isP4JlM7ycH8JwBeHCCQiYSCrROqhFKFlbZYU5MvjKzmbh+QnAAzrqqG4GkRCw3LqF4dtesHV6v7+Elr1TIN20On52yIQVw7sQMWm+W3ogyB3JW8xsqxlN3Cl9B0eu2IgHQAOCsPAAwCuB7N9qqlY/+ho1mGpFQGgx87+l2g/KUrhtSjAPn14ETEJHnUUKRkYEbACrL8ZmHSchcBQAvZO6iUDyrBlBMJWGEAgQNFeqH+2QlHerawEah+KgUF1zggVwHBq5GJRTVCdchJJexRB5vOiOsV3biMxLQd0UnphDiTABPA/Du1RlOu81nHsDdEkcCz/kdlXiDLYBnAS3aUuolC+lKyluOKaZfkys5SVEi8JXZCiIsiokYH6oIeREzMQFgRseXdOD2tehWzv7F46/lgomAL4RExzHwTFkAr9pxo9WksYDn2UKtLAP31tcS+2kjmlnbFaJDr8NS2ZsWdUABITPbiZ5935EEYezLIn7yz8PnJATO7p0a/laIAByAhPzElYYR8he/45e7iv1eRkaoLf1L4sB5XHynis9GppZj4HBRKJGB5+OyKx0AECHoq7IRRniE+pifEMjzOFmfun5dCuDsqQjXpEH6h7l9BiOAx4qDnU6j0to4AG9IKE0NfKELXH326O+MBKYMufcifn/dAzK84lcU+uesc4cV0QfR6PzkTWRF9GFICvHq1vntnKFCBgnl4Rsehnrxwli0TgIoJhIkU8LKIm/5mRzvfbzEwoRj2J6BK+uszJWXUDyAu3+ZhBKKmfnhqyKULSgz4MB6YMv1h62DncuyGSWhm9VdlIG/BcBrsEyqvxDil4UQlwshLj9w4MC4zZa1OSd9TJOP/RUwUjAvM1BSB0Wm4o1tYeBJRAADbTHmMtRw2rMUELBp5VXtkiiIsIheDFGSQOYmGq+BVya+pJ6BL7nyp0HrY2vbI6aHjm8dxxi4klPpb1ZgkizgcQDvMwBf1Ar7aGMLA49IkePoqfQkADgA52pFIayTS0gJdZ8nh8+NBLLuhvC3IgYkbiyeCd1n40XYlFupgSSSlmwpA4+MOQQGCILQJnFiZqy0gKQIXCph4JSQACUFpIyRNrzEbNM8AyeIAA4qa8hy7qfrJ+LkPj01MTaM0D+/81PpvbAAzhzArGRs7pOHmITCH3FfmZB3rQdG6+KUWfrMhcgjaav97TKnYo6tGpWQ2LcphoFmSgQwbHa28SbzPIbjySgtahmjfTIhAwN/zpnPQ3XkkYGBGwEg6yYFgqSwDPzwBoFP/IiEfyo8UJMEEKQxoPalKhoM3DoxUw1cZnl49vdsEviXx0tMH+ijW6ZYQ8iCZCPpLhiFIoR4OoD9RHTFctsR0TuJ6OFE9PAtrAXUsdicuxDTbp6onU7mB6+VBfA8i2FnTSYONJgWB/CW4kFABPBSEAQJGFAobp8DWEBM6TUKyPOYSg8gpOgDETwXuw4IwiHjAA9WnZCsoCADgAtlX5JjZeCZjvHDtQIWGYAvaYV9tCE4GPfbwI8EwAsabTHnLSRcCJu91pRQui7Dk6RIZQQBZN31cZzMQRz8Ce7O/vqDXo2nrf9h+x2iE7OWseYEl1CISSgk4Rg4i06glGeERhMMZHkxM1u4ykooHjB8ck+beQZuhAiALBtsXUvgIzv3oNOJsZQi7411YvrRX3k/hZf/WryOnoEHDdxEAC8Kn4npZRwJ8GeHXS8gXr+qcV6VEgmAc3DNCLj3tlOgWTcrT4R8MSspBEvkae7bfZx30tZvLMIj7icycC+vJRp41knOT7rtQi6FO8HQwNlNYH6V5Jm3bmPgDQkFKg/hrHs2CVx3Jr9vwNX3cpuRiAXECKiFgKHVd2SeCAN/NIBnCCFuAfB+AD8uhPiXVRlVw+bcKNdRzL7jpoVj4Gq0pRpnLdkYJ+Y4ADcuIaIUdlFLIAxcFtyV9b1xqXpcAB8tgazhsCIdAbwMDFyG7ZOBAtgziKnuErExrHDOzWNh4IosgPu6F96J6W3RSBzBtNVHAXzgMRLPfl0GYhp4gZjK/qFHC3zr3nw57RmQgBCZK2YVj9/xlRBlGn9vVyqs0S+JEQmlch/0chVC9kgCffezuQl2okKEl36ik4UoFJKAqClxYvLyuvx4vtm0G1Cc/GELMsmGhNIWBw5EANMAMsfAk33DRSsRAXmUy3hImz3uKANXUuDQuljhbpgJ5KwFX8ZyEpSPSPElk6VMJBQR3hGvI/tVYUOvbzBwHoWiQOhmOThy+knIl2DlYYRNv4FnsaIoWM0WCk5Mfp0VJODCMSs2SQIewLvJw5cJy7aluyDk8grKIsMgB/pTDsB9FEpwYnoGboG2yORI0pbMO9hkXQLYsykNeyQh8G/PAJ77GlcAz19/N7TapAEDq2HHDeBE9DoiOpOIzgXwHABfIKLnr9rImM25+W+dm8GaQGYkQJTZ5IXAwFMHDQBkPNrgGAC8kpbbGQClS2r4WP1juFGclzDwogngjIF7ttMEcH7sPUsqALhgDJxck9VjklAM0K1sM2b/2yHTt0vKAAgMfYy5l0TYC5khgsJ3z5f42CPjWMNYhABJ68TkAD7hK1BIJOyLpAiZj/ZrkS6HAdTuhevmMrz4JIBPPLGDv3+KxPUJ62HdZpSKlewkUJU1/vPK2F1dmTRk0j8C00WUAYRgbEsAeSZcLZQI4G2p9HZ7By6IUSjNRB4tPYC75Cxhqw9OdZh/hp1e0OmZXAgA/Y5NLY+x185ZxldMIgI4f8T9qivIf+4aV43zqlRTQolj0MUmZHnaTkk2GDh3YjYZeC3dtcxzBuBOn4bLeA0ZuVFC8f6RJJEn6yTnJ0AwUGEaJPebYVbgZS9X2H4BhfEBcVIIGriOTsxmFEpJEpvn7H/v3dh4J4X9n1YCimS4vv69KPU9tKXaHCxzmtbRccVNSzvLdrJRBp5o4Ekm5tEllB+VtnpgJazH3YAw9HUhqIAhSphAlhdJJVCqWcqhe4gGecogJLsFu5ZkZOBCBCemFscB4GQddUsdz65EYCIAULpwwXkXonjRxGlYuOnVNk3ZmUIMP5OUrma4VGVaALzjQj6FaEgoMvoK7H5HJZTS/Uc3U5G9C2DQFfj8Q2RasU7EF0XImMgDaWvGzA0i68mRAvgkGfz7rj24YPpMtr/UqZq5WiiGA/gYPVeEbSiwu2YtlFpZ/wlkjgoZtIu73zDBAJyXePWs2v3tZYylrm01Fr53gJFUdvTXRckUQBurv/gMj8ocbQzcSGDx7Cchl3kyVulLUngAFxHApUr3baQdnyw60YfBnZgikglDIkgoFbykwQia6ljfBfy1sGnzXkIJpIQUFnsiFOHKg4Ti3zN/PBZG2NDAF6p4Hgc38IxqACI60SVbWYbmyg0CsRq2KgBORF8ioqevxr7abM5UmNYGG2Ffxu1b02HbiyiD4whwLxoDWMC+TP5PkQB4+wv5GPEDAIDRU8GJ6Rm4dgDOZTaRZcg526yi1hsA3GWXdSsP1HH7/cOMSSiRgVdiChnRMWngeW3DDX3X9lqlE5V/ERacnFEUPVB1SlIfWpEMS3bu9AP4BClA0koX3E9TwEsoAmAATlIgU00Jxd8UN1YSQbqQbMLz9zLJ1hOSvUS2rK1w90VyryqAHA0GJID7lBXANHDZcGIWStooFAYYbV2bAP4cUYwDz1oYOAhGZChJwbhCZRt6HMBHJRTPwP39WOpYJv/d+9svjpw74Wqb8EvjNXCVZBl7Bs5TzWsZpQRvTQmFM/Dq3CciV1nihI+atWPOnIE3Jj0tAVISquiwFRRC5yAjYkmCA/NVCwNnk37WSZBMwOrZAcAdKfEExncSCgycxmvg3j/iScZCJfDRxwM3bXMZnkLEuv8sD4EzcH/l77kM3JRYZwwmJgzO+fGDuPU+j8Xb9+4P32sJgFQioZCwJ5cwcBlLRRID7XEM/Hxd4vF4Gm7b/RLLwkAoXWGfkjq2cWxYhpItBs+0TMMB3L0cA+dgmnD9TSUk/mvHbnxix24soIfCP+8MwAeYwFv3HcDptPIZvOeeFd+xppZptE3pHtaD01YXrzdYTdaQxF89U+J3X6iQQeAfnybx6YcKXHdmg4H7/xACJBS2HgZOPxQB8/kP3epPMHl5SQDfuCU2tuBlCqKEIqME4Rk4u0VlQ3f0rFSSzeG0oYmUFE0CgNyMAjgAoNMuoRCshMIzMUkgVLFrmmAONt+zsQngtRIoCFjUAjUUyAHTul6e7Cmen/3XF42KzUasBr7rDMKzX5dheEoXQk4FGcce3OvwKiXgHm98tT4hXFZhCwNnH8VwQ4FiYiNefP8XwxyKEUb++fIauJQxjLAZhaIlYNZ3kZ12anSqCgoAzsMItQb2uV6lVcOJaXcuEkKmQNBCBQ3ckA/vtP/6K+1XSU0G7iedbi5HQkbnKoGvPozwuy/OQjeu0JhcIAFwD/qhwUnz+VsFOykAfF4PsM45FiZOLZFlEj/aj5XTAoAnTky7nOE3WmR5ZCKq5Ylu2FAUEPn/BswEBGzfx1Jb5K2pA20oOAFJAjLL0ow6Yv2+HHMQkxYwJ9zwpZQ4u65xbl1jiDy+qJDBiblAHfxof4D1x+DFnnDldzkDly0M/MjmLfjlVyh0zrH9+ogkLrtI4qYzBBQkZtYJ/MOTVdLZnJc4ISFCiO+Zh+Lxz1ln9y+ETBi4EcA/XhZ1aSt6RHAE7AtV+BBKr0GKWI+kGiOhKA1IVyGP5GjGalNCMVICL/w4sO2B4bMmA8+Vk1CC8wxpxAizMEGyr0cAXFoJZb60k6gH8G7OJ7k2ALf/dtzCxjJwIPOleqVErdajZrVsRJBQVADDcI6IwGIcc68bK1FbnzuOhUehFFkHDz3tociGsbNNYOA+/I8xcJpKG3obARz4vSdh3YteFHMiFNPAhSUTADDX17hip+0DetNB++KEIlweJBsNmY2IUSiGFE5f3w1Sil/NeLL1F5+zK+2mBl4olUauAZivRLgXIWRVRQzwcfG5yaAdxvgrWOm7qIRye9uz7/s8vGRmNvydIY0msE5M2cLA03KokhVrTySUttKFAG6iM7FYRa06AXDTQVmbOMsrgszyRMbh5h0pG06xungvMPDUC+ILAUlY55kUwKKbCChLGeVy5hn+3ITd3yBvZ+DnmYvxO0uH8NRNj7bnwaMKGqnS3HEU0vSlwFnXXj5yfFM6ttGQbkgKaMNeCpLJCwDYKJQ8RHHERAovLZRjJBRlrNSjYB10zS5OvEeo3yfOf1xDTkv9J7myDR2CFLccgIeJikVENKJQtLLjm62kBYwsBTb7a7aKc/+5v3dvADF80ksofstMKGR5lobHBgYuw3MFIPgJEgYuRWCgvL46l1BCiJ8EOq4RcM4AXgUGbjeUwsaB75rpo3PfM/GqX1JhRWgkIHpddHvdqMIICjMVCeDWQwP3sbT+AhL4i8/c6L5PZbeUgcNV/rRfbpmexMd//UeDlBIZuP1+ZugnjTSVPs+ElYmYzZcIzNsDuWmRUDKjwoqmpw3+efdebOudgtW2kwLAH3vWY/HkpdhYtQngnoF32CxMwsIyNQE8MOajA/ghbMLAlS313WG8jlVSgbKObaWEsGxxfFU5xzKnJt0xEfabbuXYpJAQQqCTKSzoDOhtgknJwLLmJ4g9G4E/ebbE1+8rkmN51jvbOQdPX1xCWWwCEJebdiwxqqNjTArgHqOEwM2PeOLI8akchu/BOuuQiEzHfiADmwphhEYGBi5zD+AiXDTe3ACsZrgyTrFx0lazauOIhMITXcI5RzHfAriwUoAvaiTQqFvCd+euHX/mWN2UW7cAH3qsBPIJHNJTqEhBtAE4v09uX0uUTgSDDiDyybhklxJbN01heiLuz8sWMstYTEZMiiSK0ShGxFohodyDjEk/drv4eddVU8xVlPr8xMY18MVhjUf/2Rdw5Xc13jbYE0ahpZ3YeeBB0L/cscoQUiNQIQtSBxA18HCuGX9uUw1ciBydXIZnO3Of+1BPH/UUaqKYqJE3JZQfuWBrYPD+2gcNnwO4zgKAFwQ8ZFiiN8bXdiJ2UgB4034p+6/kb1uRTaGbqwYDb5FQwmQ56nxp2lAUEcBdFErlALyiLkrNgpWkZYuBOTbfcUcz5s/fhg89WuAdT3VspeEQC15sd2s6ucRQE/BrX4eYWoeVmmfgwxz47r0kqlw02L613VMPwP8a/hFmNtqlMA8jlCZmuxYsCkXLWOmQpMDVP/1SXHlRul9T2eskpLA6ebgMAhXy4EgSJAOA8jjwwmcy+hdonAYOGXRTZQQUETK4OuQGmKgGeOE1lyLXFgK4hWeDA3gLA28m8oydo90LyrGFl5797Zdm2HmqBDaei5lBhQoZ5FEYuL9utUlno7JD0MV0YNOZUDY6hq0AvYSiVArgIVLH3QMthHVk+igMNlFzzOESimfgRSYxUXjGnWrgSgr4RdBtR0qcX9Xh2mppt89YqVspKDQYsWTJ3wiJilQC4M2EvQTAiWwxKw/gMkMn4wBuLRazytwx7b/322ajvrq5GllB/dFPXxx+749YUpzwveNcmRzGY4G/ifdUCcVblVn2ukEsJp9bBu40Y3Zjm6FvGWPgyYM+Zkk8kF30K23TqSGhAVx+6wEbEeIWYpzlqawTdDWvaZ7V+SH7pY9tLibxoceq0BleNmblGIplP+9k0nb4mT4NprNyCu4Z+IDViVYtDKBTKFxF52NQOzbGogoExSBHXnfDCKAwcemRZRLDBg55CcUCOJO2pGU6eYgQkWE15PdfEmPgKjLwNg0cQsWSqoYiAxeWkb/0+5/Ac2/4PB6x9xrkTSdwugq3+2AaOGBfciUFDKKUM+558VEovKyuFOkSPCOyAL5kAVzlXTStrZhVZdJVZ1VYAPcTrBIKyLIkZNNr0RbAR4Hdo6t3YtYyR5khtJQzAkl4np+5LIBbBl4oiYnClV2GB/LIwL1pd3zes1a4VeYtZwh89iEC85sJ3RBSCNQOwAkSJbLgt0mukedPDQbONXCI3PrH4CUUkYyvCk5M+/3f/fxD8aFffaTtqNToadrJVJgMIwOPEkoYg4kMXPhn/R4N4L9/BJc97n2tX7XHgVv3mH/8jLA6WZuEMs6WRAf9StuQNveQa6qRE6F0AB4b+BJkHhm4B/CHdF+BhZt+G36+7rCkESCyFW/SPeF+MdbNVSiOFQrcr8D8XgcJgRgFnp4bpz8GDyNMAJz5E7QEcj9xCWlbZ+Xpvqn2iTwNABd2OeyXoeefsm6EgX+r+6hwHUN2q4jjT6NQMtx0gd12/znr3SqcQm3wBx50oaBCBg08RFaEYk/xnK+kC0IqvwdrKQXqhszTZv5eEgO9ZjVCRQbYeB5m+xUqKKiCSR4e3JoxcYjZgd7qAtD5OiahKIgsS4jJVM9eu+mJTrLK9Fq3BxYjFIwQGKoCv/2Lypb5hZPKuBOEga+veJgriUnXQi4yb/83m4gas6WWcYLpTwi86ykKQhI6jIHH+G2Jf9VPxO9XvxD313xvmhKKyODfAikK22A7hBHa7fKRKBT7YK3r5vihc62k6PvccuMALnhBMSEwDHJejJEPV+GeGkYIAJBy5GXwZpwG3s3TYlYC8YUzwsoSXqcTY7qqcOuLLgalRpH5wpmEB6obbRlP/3CQ19mALO+EpX/XMcj+UICqzWGfnbwB4I1zaoZidTKJYW1gDGG+ji+xXgZI+HdDRtqlVDhSbEu29RPNwBWH4k5MQTKc35MWl/C4vi0jYAQws9Fe6dnNtn1XVaQDigxcWgkl3AeBCiokU2ye6GHdpCu1KyV+btuncIs6m2ngLgpFxn2k6csS+7YKPPt1GWZOm4IkQsbCO89YPAjASikewBc96W2RUA5ifSz87xdrwiYr8c/aLEzGCaVvrLAIjoGXeD+eAvXwF4fvpjue5cfxhNDKFgCv8+nwAkshIZRKy7Y6DVxlWdB9AVbvxstgZgu0mYSBxJ7NItbnFiIFcGckY4LSyx53L/zio89zY/ASkmPijIH7lV1QE2TcLnTwQWwsRCKG/REkbqCz8B/mUXEMYUJ1YMoSppSTUIKbxslwz3iQbbKR+5T/MYk83Np6mmYeQ+DYfgBwYODnKVOEwIXQoPweDeCwWlabRQlFshAw4ZZS/m/7kHsGPq4gEbclUVgGntmsLg2BSgA5X1V6OVHYF6aTpwx8YZjqrtlk6oluyhphQvAaeKYwqDR2zfSxMIwHrpaZf3jkwJAXYBQSf3efS/AY/fbwWZOBE5NQyESnzJMXl/ALc/MA7AN7/X0Ir32xwq0XTiGTAlWTgTsN3E+YXFeuKdYsyWWO9Q7Ajcvcq2oKE2HGJBRvnIEbkUXNWFitPmcp5t6msRu07koAsbwAWpa+WmTh71iHRIYJe0UAzq1xfzMQsOk8zCxV+ELvJ4D7/1QcY9d3G44HCaGVDQkFOaHKp+C9C0pIIGto4MyPIKFw2ynAFfcSAcCFC0HUyCzgeSD10SkSabXKUHmTAig+6yFn4EkXnea+Thl41iKh8CJUIezQOxXJVR6EXSX5ay78u82MGIgCsKsP/9/wUSj+A3vDn3jRmf7SJeOLAD4qUXZaGnJ4Bi6cSBOjaASGQc4rAhkKI79HSyjA2JKUljGkTkwIJEXWw3I4hBEeXY5YEt0goQi4KBQhUHCNMwC4DfvzwOMZZBPAO8VE8neTgfuH2etqnoEPa5O82G1ZmV4a4ADui1kJskvavpzAPrMxfO9fDM/ANZdQTJRQFBGkiCVcezC4eZuAco7bEQnFM3CVMi/rxMwCA89kHpa/RgCVIQy1Qe6bWfgXSCIAawrgEghsTOKls7N4w8HDUed1tnHyfyA6ewEwAA/4Hbetwdry+XOXdmLTYnkAL1zBpR6fPZpLfQIweQpm+xXWdVPA+D9Pux+6uUzkARJ2mU6NHIBMkGXg3uktbNmBlIE7bTqzjZlf/UsZ3vhsFfw3vrhXDRtCGLb34XEiTZcIE5sEwHp9ruvleMjZG7CuW4SxAKkGHiON7M5rJWK9b7/qBAVC40kZYNn7Tz3kTPzmE+8d9ucLcPl7qFidIxtGmEWQd9mumf/XTxihoYPX51vYdtYC4GHigYs5d19IkTBwfx8NKby0+yZgw9kj+zpRO7kAfAwDt8tlgW5SD1wkUSihdGhbIs8Y66OLQWVQZDI4MSshbDEiZ96JSU5f98CdKQvo84MUwItGk9tRALe/1+4h6+aWgQ9rHbqeA8A37yPw3fNSNPGsnIN7yYI4rA6IpEKfXykMK6+Bs8qBRoaXWYAlLkig5+s8C4VcCdRZej2TKBTwidRJKOQBPAuZmkYCtTaoahMmQt8kQ8gYyeLDCA1gM2opIDHOr2o8bDhEt5Ne14lBZJaLriZ7WzgJB3CwZ8b4jNFlAPzeOBOvPXQYPz3HVllS4RM/LPAXPx1BClkP84Ma63rp8/yTF2/DdX/4kyNOTAkgqVMA61Qus+kwHCWsBs6jMfwqU2U5Mp4D4JJ9lGP1FWyUzUThP7fb2Zrc8bgkOYDH/eVK4qO/9mhsdklqPA48nEcjycn7pIC46lQEkCsgVwue2q8w3c3CuwW0ODEZubMMPAvvkHClG3xEiZdA4gQjUJIKGjg31dKU2l9LCaBLtpmL3Y1A3+9TF0HDJxK4TtwrFDBbTTu6EHwXsrEMXNhIgYz1V4TwNzLdNty0FUgoffcwFUpCCJsaWwnBIijie0WwbbQ6WXTg5EqOMPBuo7hRJhVeVP4OHnP+euAmuHRsE3Tsbq5waLHEsDZJ4aDL7isw3xN48Pa4tK4U0EOsLDjImUZIFq+MoaRGto8gWCzbJBTpVgQEAwHlGbgAuqGehESmJOrmEreyy0XPwGP0QerEzGQeIk2MtEkUtSEUDqRV3oEBkOeska17YbQCHn3+qdi1Zzds0yp2sxvgPDGMwNQPfqkWAGeSjH+WOpnCknaOteUkFCnx83ML+HKXM3CF9z6BsWIAyLuYH1Y4dbr9haYGr3KjAQB86WKB8/YSCiJUWYwDl0Ji80t+EfXMTPhdx4UodrNeItUdnpgEcBhHNjgJgWyxrsmOY9AhwachoTSkpaY1MzE5RwoSiv+baeCetGQgaNEDsGirFbK8+qlOFt4tO4ZU/moCOAmJObkewEwA8E3dDXjh7Bwe48o885XXDjoVB7OtI+fUVicpY7+b0qyglQD6nvWbAkO3Kji0QSbNTlbTTioA515tbgQZAJxr4AoikVAAJnuuxInpyq96DRwABkIkGnh8vu0kEpowCMvGRxh4NsrAv2wehF5nK4C9IdzLA3ivcAy8MhAsycZI5jxx1mTgA+7ABEJmHLezN1lJ59ZDNjSTFzTSTELRIi7XjAR6oWqibU1VjQFwX/jJ8meB9chRMydmpvIE5CttUOmogauiwDt/QmLDhROAsPvULNEkl3nwF5AQwPmPB27+4kj1u8lhBCYvoaiWl6pCkawWAOCibevwxRtttMHRANxek1HQ8yYJQNbFXL/Gvba0P4M8CsUIL2nYfb7t6fb+PKJfY5hFJ6aSCr0HPzjZz4UTW7AbwFmTm3HDfBzHpac9CDc8dxf2bDoX2AUc7K5HritMdDpxjPAMnJ+Ku09juI9yDDaUgeXOYVoPTfF91CpKLUE7J6CmCRgsQkuBycEGvPLwDHYtbcRUJwuymr0ujetapO8Vl1AyNy6pCvz24RlgOnXkA8CTyr/Ao6a24EXNc2ppn2clFA0JgQkD1P7B4vkCpoMj01384XMkJtZ1QcPbB8FPKgnFFNOtn2tpEwIyKZnWOhqFAkQGLlYiobjstyKTIXb0yk4Hm3TamgsAuh27xAs1PKRn4KnjotdI3PAdP/ohYSgF8IlcYamsrZORVQfUcrRbjte+/b+JAxPCAXiqpZ69aQK9XOH6fa4BK2fgOgI4wequgJdQfA0OK6FUecpUfBih12QnHeBPUYEKijmScogsgxZAndkJptKGJUQpfOZhEoub48n4lG4L4FlkUkIAL/wY8IZZCJbiPVtMYmKA0EnFp3NnLfX1a/bie3vI2RtAzgdCYvyL6CerpP1jY18ZCMg6mB9UmO6OkQQbGrjNDk3vW0GEUk2FUMBmvDnAWKnKo6xBhMXBj+KaLT+Cw7PPAwD8/cXPxP97xC+EsMOggcvGQsZH54x5dTzzDho4++236D74keHfhWvrE3kAxBR8ECqaRp251RgyvHR2DoIKTHUzdNg72wxLbDZesFKgXyW66+Al2BZns4Ec8ZvYTVtkFSah9IxE5ZeT/F6bLgxluOo8CZ3FhKbVtpMKwNGZxrmDfxv5WDv9WbmsPwDwaa3NLvVBl1uBE3MAH+sq8JjhBO5dliiI8LpDR8I2/r1Szgse+lgKgUKJ4Bz09sAtF+MU/WQ8zpXKzNxL5gHcO0i8k6ZXKPRLjbI2IFKxJrMYlYeuOVvgq/cT2L/efrEFNZ43ayNHJNlLUzcq9CklcK9TJ3HjPrsdz8TUOoYRaojYCEAAHa9bCmXjwLMGgJcewN2EGSZSW7zKs99MFZBZhj97tsRlD5SoNaGsTZgI/QukRLy3KQPPUgbujDPww911mBxQACZfI101AjsAoBb5SF/VB5yxHoCy13sZBu4BvPlSfWrHLvy/A7bSlySAVMdq4N32xKxHXRCbPvtw2Cg+WDtFawzUJNPAR1/l7vnbMLltgOKMLYlu28sngAM/B6otIapUhmFWYMozcB6FwnfbKPvbtAnnJOxlsSt9NIED2JAQKhGcgU5CIaDGepSZ/d6vBjUkpjtZiPCy18Vr6o5l500GrkIWiGfgISJoTOZ1pc3ohy04kTFZpaclQolw7rQ13eBPyoCkN+tq2kkF4KEJaYMCaKGCR3lcKn0MCfMMfCUSimfgCmfUJT60ay8u3bkb59SRugUnXyP6REokSz5vRaZwFp6NrY6YBwbuNGj/onlw7hUK/UoHDdxHYLRJKLs3Cfz1s1RwXIqMQtq0cAy8+ZAqIXDvU6exVHo0YyxHS7xgtoMLhyXuV5axqYAEej6bTXknZuN6umvUlDL8xOT3lasCSma48nyJxQmJ2hiU2rDr6ELe+LicPl4rIJcFWDhJ2IazqcPdaUwyDXxpGQZuELN5/TPTzRU2T3XHSgfeAoA3AO6MWmO9X7GAMKACtaEYNtgwXs/ECH+tUgDYVtcYqqmogbcATb55Pc7+scNQU1OQ0keeEHqFQqVN7FfpbLJrgfcDj5W47L4C/3ORSByRJKOzuc0eOXEG3r53P86fsGGFzTIRQLymNpHHTc7uDBUIpdyESnkAd2QGElPdLMhq9rq499ifP5MmP6V/CNdNPBSjDDwF/aY1yY3d1v52mr03GZuou1qh9FJ9I5rJ9wtVRLcbAz+pNHD/MPXRwTRicasaaiTeWDSKWY0A+JiIFm59VwWwUBJdPQ8F4PP1I/B1c7+wzWDSxSm75XARlv6itTJh7uQe/7r5OGfPwM/XXQDzOEdsBGDjtCtNWBzWAKmgc7cx8NAc1l+D6RgUaCWUUZYhJXDBqSy5iMcgQ+KCKseHd9vwuz5b/ha+NKewYYTNJAgqK5vo4Jfxnnn5LDYuoTBGFBg4k1AAyzBD5x4fhSKBQvK4bc7AmdOusw73mY2M2yfyZC0MXINJKOz6FlmOvRuBw+tHfxOO6WOAW/DBlwlWEJh3ju1xEkqzYYQg//+iba01KhEnr9aa9gG4FKBchAiAiTzDnnqQ1K4HgOleB5gFZqYE/uqn/P1l2/hxjSkGk8nMlnkO8eCj2wQnphqVXAwp9LNTULk+ESG8D9aJWbJENmpKKCxe+7XVS/EjnfNArjxE7t91z4LHMfA2lBUSb917ABdWMQlHCQWQfadykwUAB4CXzMziE1OTqEkFBp66b1fXTioG7p+bPlIdWYsMZQOYSFon5jgJRWSjjKVpnoF3MomithrxO+un4V/0k8I233rCVrzjJyWOnBuL+wBRA+djl8K+5JmMRaJ8uUrPwB9UT+Ezt+3CQ5RNOvCFgmb7FYhk0hVlBMDd32ccdKx7WxmrJVK7E1MKgW3reTQEWwYiw1cnHh/+9o5HG9rmgFVJBwQNDbLpxPTMyzNwd0Myx8Dt8RA08FgLxZUs4MXHPAOXlsFHds6igxg4He6uw0QJZJ6BewBvY+BCjTwzgGVxr39hhi8/YvQ3fBugEbnhvwv/itDmbTyAs1BOp4EP9z0dWydilMTWukYJFSJWTJuu4SdVmQHK1hGSBHQLhboRjZQrgcmiLeaZM/DlNfAwYbCu9KNjsv8kmZju34oK6GwyMHCfYLNt4yTO3zKVRKGIyNQApPHaBiIh2dkKAbweI6E8rt/H6XWc7U93bQjnBaHQecxchcBvHpnF53fsRg0FY3ymKdY0cCCy536jtGYlVGCW8aVbnoGPbUzLrM808K62URqzmEy20Z0MX3iwDN5q/pB5EOpk0lU2c1qfEkFbzh1T9FUPhVTYpnUALB+nfWSpAlG2rITigeecA/bffGsZMvWEe6jbJJQikXrik68h8d/TTwdeb9PRJaxz1dbI8Nl2rv6Li5CZcZcnxIH7GO/Sga6XXtwxMtVJyrAOaw1DiE5M9/JJpoEXwi5bQxRKWE6z+HzGwGc7k5AETA7s9yEKZQwDD6ozQ4GQ5LIMk5It4wjf+RUHgPmBndzGaeA8GcdLgXrxQnz6py4Nn2+rtSvuNKr/sx25fxVE7gAcwKQjBZXmAC7RawFwmchS/litw2Ya82giDz8fwEU1NVqwlVSAiklcdj+Bb99LBAb+iifcF+t7eRoH3tgvz6cw8GF7LNcAAHwy1BgA12MYeNMuVtZ3sFsCGQNw/mtbv9ze3wy0poED8WFaajBwI/K4vAqALSB5GGHYh9tsBQx86DLWisx2pAeAeUozKX14oe/c4R+yWhMKxwInOxbkcnfwTMoAk/53S6W2Yws1N+y/PtV9tl+CmISS6VEG7h+kjz5SYK4HFBOxsomPQqkaOp9k2aP+jML+IJFnCr6hrISfOETUL2Vmi/pThme/VuFPf9YBdmVZpq/HkU3bK7iw3l4/GRh4J5lMvdM3ODGZo8vfu56QqDIn5TAGLlikBtfeZ1zLtC2z9u9F58SUYxh4M5EHQKgLPQ677LXwDuzR7/zqRa6EgTda0L3i8Cw6mUw+36o1hpTFxr9tA2MSinCVPBXFVR23IpOY6LYBeLyOYWIZV0+3wcA5gPtjcgklMnB7bYfUgSmm8VP3OoBXbtkbs4LdfjmAewbuJ2+fZQk4AHf/Z79z41p/pl2N/PjrW4ff6sRsmRjvn0Ud7ScuPCu8dzxQqIaCDhmvGPE3rJadtBo4NzKdsESxTIRsQX+Mj0JZiRPTv65FJvGmU/4Qp+z4LA5jurGFf2mzsC1giw95FjnhYrn9fJlJzsDtTe5X2lZTDD3/4m8B4MhiBYIKEkpetzBw9/f7HqfwvscBn7mNYrVEH0bYZOBSoJO3T2YaMqlnIeCcSwJO9ijRyW0XIrKtd0KYXTOR59QnDjFRz+GrvUcBfQbgWRFC4PgjHjvyuMlDCBS5AkqgJ+xKRCugozI8td6CnbQHj5q8IPyeg90t62zc7/l77RF8Io+sR18qw7X25Dr5MLzWS2W3d5l2pZoc+S7MCRQZ+DgnJq8h/j+37kCWKfxJoRIw6RKhggqJV8tLKAqimAJq6yjsFaPPvq0q2AhxJS+buKWKL4swjvYFBu5WWQ0AXyp14sT0E4K/tiUVEJ0pPMCVYQg5Cay0crAgobihsXht7Rg4OdqV+2zKYgL4fdb3r2FNeXGcTWW98N/r88kA4EXiL8hReydmUmB4de2kYuD+gViihga+eH74b86elo1CWcaJedbjDuHMx8QbXSiFW8SZeJt+JpoczC+XsyCheACnBMBzxRr1yqjaFk3JxYcRuoe36wB8xjHwQ+ucA0/Eyck7UXTjbkZ+ZhmLlVAaYYQiZeDveP7Dwn9ryBFHrJduurm9B1umejb+3sRsSgAgF4USdOEukHUNSnf4AOCy0ypnBQ3cJ2EIicdP2L6dZ6luYOB51sEmdPHePfuwUcTnQrHrumP6FNQSOMsqQSHBqdn0GLDRDc0wQiA6m5d7YQ6c9hj8efVz+OxZr0y/+Nn3YNfWx7mdAr/+b98BgJFUem9cA5fCOux8xuyzZxfxADcBlKxtV6usEZyxCjKzqxAFwkTLhF0oiamGhKIIoZkzwBj4mCiOxGmKVD/vedbvPuLFrHy6eo0C1IlNS0K0mRsDZ+Ay6Nn+OYoATg0RKxuTwd201igUb9xJr3K8ed8B/Omwh/X5VHjvplkkVp7nQUJRhNstE/MkA3D7bx9pCnK9cNHoxq5w1VgNfBkJZWrrENNnDMPfRSZDrZBRc9q1SJd5OgHwzNVG8Rp4jK/mqfW2KXP0vAMIL9tsv4ahDO98isS7nixx4xnxnA6uB971ZIlvXpi+WBnFCWZcIo+U6Ytx+oZ4bYdUJD0PATdxyPjC2C5EAkS++bDdzifyeDY5Wc8AAA5p31LOHjPPOsGJyXmKT9oQIVJB4iUbLsZXbt2Js9Ukysw6MTuqAAK4xnPjmqjc8lXs2mT/rmWskS5OHU1lN0KGmh/c2jLympZnGd6mn4m6aHROuv9PYfL0C90B4sdjGTgbu4Bl1x4AX3V4Ce/dvQ8AUFK2PANnCSzSJcEpYmDKx65EqOvtLQMSDTg4hscycJn8yxn4ZBEbYgA+kccDvf2uNjlUN0ZEhYxUmUZ4ATEoZ1AbzA2qFgZO8GuofAURZwBGAiGCPesdwMu/Ef/ubcSTlvp4eiUwzQCcr85e/dT743H3tSs/taaBW/N615/Wz01C+czgdL6R/fcoUShyBRKK31WhhK0G2LYNea03RqwAlun6eh6egfuwrUzGLpxdxnqKTMaXzlWK8y/bzFIJDYV+V+CzD5Wwabvu/AXw2YdKLPaaAE4xCgUCUrYzcL405U6r7bQ1OF69kXAvn4pp07mSMG656Me08/BOu7/Gcv2bta0oFyWUTsI4veW+FkqQUCSkVNhgDLqysMkeTgMPTjPWK1UyNiR7O3DLqXYbLYFhIfD65ytMPjdWt/OmhRypNQ1ER9hyTkwPWG3x/z4uXYKDWjuJkAyMpLDg7KW0GgqZE1tLqFCytHVUTEKRHavbKlCrBp4riYnGuLOkhBnXwFuHvawG3mtq4DLKmL6xQoUCWTdKlPUyEoq/u4YI2w8sJq3PooTS0MCPYq1RKADw4OcCp7BnZattP4iDN6JTMABnHO8BZ52CrdPTbqy0xsCBuCS7mU7Hc8rX41WP/XX87QOfBX4aUUJxUSj+iwYDb1YBbDN/0YtMJjGoyTaegTdYQq1NwsALJVmN66iBF1kWxlRkkYGTY8oTAcCrIFN4Cy3OxtzFGKNgGa8UYuQ8eP0WIF0d30hnBgZuXvYNXFI/KUg3ftkrpEKmBIxj4B7AJxach3AqZbnXkiupyZ2YLQWDCrfsFdJlB3Y3BmAoVI6ZSYH5CWGdV6EoEmPgfIVFCrs229923LCuP0tgYqKNgQsmPcTPc5fpt5wG7q9V3ubk8+fjfv+yx91rbGu2pDCTAIhEcGbzWjVDykLpg3YNPDoBlZMmFFmnetN6hUJ33anJZ4qQCN6hmNw4J2YjCkW2ODFjnZVYTrZw962kPNHnb6HTcHPvYmDrAwCkEV7+kSUhsFjWUJLLP37daf9/oUads222rITCzQM4aeR5L7x/SfMilYfIJZvIs+bEHAlLum7Tubhu07nJZ7xRbRKF0mDgWQtoBPupvwfKBWz+VIFDi6WVUMYAuGd9IYwwjxJKwTRwC3Kcgdv/7mQ5lBDQsJILueWkMBZpfBhhv9Iw7MWzjVvtf7dGIMAy8GYmJpdQLFalYYScgd9CW/FI70w87b74inkgLpRXuyy6HNA+CkWCGgx8wyKw0I0lBrzVIblBAjDIsl5g4FxC8WDowUyeej9gYMfSlR285X/ZM7sk76AKDsZxAC5xeOPo/eu2yCJGyDFx4EePQuES2YiFol4C3Vzid55y37H7kUzP9RKKB0AO4CWp8Dd/Bqqqws6dOzEw5wBP/Rgw00VneivectFbkBEwkffxrmc0OjNlEnt3HMZbLnpLPGcAkxcJVI+w9+WxUxmqh9d4TA+49tprRweu7gc8+YPAXA+49lpsqHQ4Ti+XePFF27DxyX+LygBP6QBzi5tw7bXX4on3+XU8EhW698mRdwa49skfBAD8JW3B3s7fYbi3D+y9FkQU9jdtXofq2TXOywC5uBez04+F+buHAgDe1duIbi7xfPw+CBrr8nXt4wWS6yDFmPNqGpE9TwDU3YTHv+StqJ4PnNZVuFZa6dXsn8G5Wx6At2x6CyaNwI+YDSvad7fbxZlnnhkIw9HspAJwOW7mTyyyJyFEKArlocG/W8t25HnQcwAAT9/9fVxy2a04uFDGvpQN6xUAyvjSeeZYmdiUYLLjZAaHIVYD9+NxjZZ1qoEHCYU5nAyrRphhZQw8SijSZWJGkPQrmnEAXiELoGR3IiMDVwVQIVQjDAzcbT41AHZvjBPl/9z7Nfj7q3kUgQO7RAOPFp2Y7F/PwLMC8xNu7KqDvi9yxgA5KW5EEns3jjKgTsskzhtE8OVIkR3diRkkspY4wgunrMz3yAWBb4+J+vHm5R+DyMC9E9MDdkUKlQHutTSFb04v4P5T54Tf79y5E9PT0zj33HMDy19cWkKxtB0FETZN3Bs7j/STY67v5Th9QwFxJI49B7CxUpg6ZMnE4W0TGAyXsCETOPvU+2HElg4DM8rKDcUkFgYV1EGbP3HeKZPYfnAR5y3sRFYDh6aBU7eeg6IzjX0HcxzEEFNVD1PTZ2DznKtTbs7D5qkOzthgoz6ICPWuWQDAafoA1s0P0e8KyNPvjUkzg1u2HoARwGnVGZju5ljCTgA1Tuudg1Mmp0bHC6DaORP+WwiB+52xTKott93OR7bhHOzevxsbF4ByOsf63LYd1KfeF/NLc9hV7sHmGjhQn4n7nbn8vokIhw4dws6dO3HeeeetaBgnlYSyEvyOjFsuG4WiVuCZfsEjzwUA3PvUqbFJF37ZrlrjwKOEkssYhZJJgYv7Ai+ZmcVZE6eGUL08k3EZGiSUCETeUQi4CIGjMHCByBgn8mykFoqfEPnStHmNEyemkDYDlGngUubIlEBt7NhmWATd3AQCOF9/zvPwFfNAuxsR43gz1W2NCPLXzq9UOIB3VJQ+OlmBa85/Cd5U/Sx2nv+z8fow5zBBYe/G0euTtxTrN0LEMEJ26lmIhR+/FPaTXd5CDs6eOA3f2X4bfmRBonuUHIQg7wXyEZ2YtVuhVcgwqDTOWdyEb96yAxdNx24vg8EAmzdvTiQaIRWEU/fbMiTbSjULiGRWFRAYFAJjo1BGdhC3m+pkeOCZG+L+RDzBUCTNrRJvMqfjBnOG/S7ZHTsf9rk2BCGEdWy3XNrWjFBn3DFKxyJznHIhsPkC8IbdyVGEsH4bUGvZ4jYTQmDz5s0YDAYrHsZxA7gQ4iwhxBeFENcIIa4WQrzy6L86MRtXD7zNhBTLSihtumvTLjh1Cle94SfwMw87E5f84g/jRY88J/n+4jPWQzupQ8jRMEIPzBOFwsbJHBsmfGsniWkt8ZtHZqFkFoG0hYFzfdoYFiYHxsCXuSy+R9G6buHiwJdn4E1dlocRGki8//9v77zjrCjPvv+9Z07ZylK2sBRZXJG6y4rAoigBiYCIEKwQC1iwBZIHy2MhKvGxRWyxvZEkCkkQNZigJGpsEBVQmqsgqCCgAioIIixsO+fc7x9Tzpw5c8r2kvnx4bPnzNwzc819Zq655ne1nyi8foKCR+/WrSoqXkUhqGfH1ngFP+q5TofThJkmbX0QtEvx4guppIRCqHWwwP2esAL3qn6EN5XHg5MRlg7iHm+kBV4RGXmqwcEPolEo0Ra4116sywHxLHAULx40B5vfG/+2M/pNmg9oC4ViOC2DwsN3h6o4Kr1abXZ7/RT7vWJGk0hHhaYoIiJph/Boyz4i/jgILiIGiohVkVtJywAjdPCITEURWqJepV7GItYtb10ckmDPmLRGoYjYEnN850z65reLuT4mfOngz4w8rvVhJwSK8NCrugZPyJt0JHgsv0gs1McCDwDXSyn7AcOAXwghHOL5Gg5+jxrxg/76zL6svPm0iDHWTh1WBW5PLrDXD46FzBQtVbt7xzTTIgd4eeZwXrjqJKSM5MCtYYRG67I0n4d7JhfxwHkDAe0GDxfjUSwWuDCVitFwVlHCDiwZocDDlmK8KnnCpGq0ubNy4Kbz1FazxQqrMqoKQWVhNT9NP2SpUaJVIwxayhvs0++HQ2nhCAArFZOV6mXIjxk8881ehDUKxXJss6aM2ek8PDcRCtzjtzimwzvwRPDbgqBTHW8HhRURhWJZ7vVE1sp2gvmG5cSBq2EKJKEFrtpCMi0WuFE0LKR42XOwIlxWIoFBYhR30yxwh2MqAlVR8YW6kxYy3n4soXzEV4TGiESIUOpGWQXjfBFRNGkshRbUH4LVXkFIyriyxVOKihC1Mgwddm5a/UaRNX0FIdXP16HO7JY52vpGcGTWWYFLKb+RUm7QPx8GtgBdG0owJ2SlefnzZUMZX6QV9WmX6jX5MVMuU2E7OzHVWljgdlityJ7Z6aT6VIKdCrX9tdesc58ZRhgyrd1Ur0KnDD85mZoC9lj6O6KoEYrUSKE3LHAIh2AFZaQFDnptkrgWuH4YoUSl0hv3ivW87NaZ3QJ/+tu9XHvwR9R22k+tZuajKpEKfL9ej9xKoVgfBO1SPfhCPi3jTvGYcc9OmZiqopKTmkN+er75EParqZZxfnPfVr1pWOBBAUIECAlYMlyrl24iBgdub9cF4DOiUKK2sBzTpFCcLHA91hk1oQVulEa1loFI80Zy4FLx8c2PlRwNGbWDE1j1IlxAzdECN+8LxfwhBMJRgce83HxpkJJFRsdc/Zja4pdeeJaZM2dGDLXSU2HLX0TJFku3Br0qO3MFlSmKpsDjKGHrGiklp512GocOHdL3L7jkkovN9YFAgJycHCZMmBBzf5E7VziaopVyrsmwGA0603SYVDNCaOrUqWzdujW5/SaJBuHAhRAFwAnABw7rrhRCrBNCrNu3b1+9j3VqrxzTgnF8clriwAfgo7tek8OkUExrrfanHmHhGYV9srTsQCWtE2ChUILStHbtccGqIsKvpkIJxw+rSrjEplWB6xb4lkA4FlU1Y5XDtZGdYHC2qlCj2oCaWamW7e03kDX6xtqtR9EVuMjsrDmLLfy8USzqUJoIlxiwaNd2KV69EBOgei1RF2EVbqVQ/n3uv5lUOClMoXgjFbhZHsFafEq3mA9kAnpkwAsjVH73M4vSdurMEiMT06fvL56tZsynowWubxmUyXDgkRE9lfjCFIrxRuLx8mNFjUk1JGpQYiU3nIIBzAQ3G88ckgrfdtAUlEN0pW0nPuh4bNQxIyAtf8zfzSKnCEdMaftwPlpI8RJSoEZ69Dojse9n63XxyiuvMHDgQNq1014T09PT2bRpE5UVmlP3jTfeoGvXWtihQovsr/RFyuok9dVXX83999+f/L6TQL2jUIQQGcCLwP9IKQ/Z10sp5wPzAQYPHtwg7xBGTKXxu/y89BiOzbbVn1AEs0RHPj68AyydQAyln0wcuB0R5WH1j0Fd0RpWhJVCqTbqEdtuaK+qWFpCqah6VSWfR6G4a0f4EgYfE/ZYd+uQyu6DFRyRGWYlFkV4UGW1Y1VCK8xol/RclIORl5VTtTghYE7pHDZ/5efPW+BQRbglnDXW2GwQoCuUQChsgVdZriqPgwWeleqlxoioUbxmiF4EB26ZM9PZmJ4Dqh9/asfw/lWv+TC1PtC9fj+PjlfY1EMglHBWbQQC0c6iYAwL3OtJ7MQ0fmd79ioAuq8kGQ7c2pzg4ZpzWBY6icvMRB7deaw/UMy6QDHeKH+z7BM27zmElJLKwFEE4PeWc9TebNurvQlWBYJIWYXWPkQgpEpQaGO9wkONDNAn18+88+Oego7oebjq1jmcOeInDD9/DAJBRkYGu/fvZs3KNTxx3x/onJ1N2ccfM37iZAYWF7Ng/pNUVlaydOlSCgsLWfHGq/zh0QcJBato1yGDex9/nMKuXfjN3ffx8fZP2fXlLr7ZtY/LrvoFF1x5VpQUixYt4sorr4yQafz48Wx8fzlTLzifBxYvZurUqbz77rsAHDlyhFmzZrFp0yZqamqYO3cukyZNYufOnVx88cUcKS+nKljFLffdyhknn8KKVeuY+9BTZHcp4OONG+nVr5h7Hp2PEIJTTj2VSy+9lEAggCcJn0oyqJcFLoTwoinvRVLKvzeIREnAuIWMp/Q9k4u44lTtyR+++RSMZB7tu75NLRJ57LAWdjKURUjnqs24btVQaKGwBa5GK04nDjzD7zFf1X0WsrVfF8PJYlEoaM2VnRo7PPjdPp7f/Y12vsYxvWlRr5mxnFlT+kxhQMfBQKQCD1oul9yUTihCITs1Wztfwgr8kB7iFxIWBW7jwM0sO9XrSKEYdFMEep8J/7MRf3o44USoXmcOXPGwfKDCvvZxFHh1edSiSAolvNwoeRCPAz+mYxqn9cnlhO4doleGtAd9EDUi6scJhgIPCfhd8By2yy5RFrihwCtlchQKegxKKCIX1HmcFU6nm4gxrqiooKSkhGFDTuT8safy5IP3RG0rLd/8qh+kyuebP+GxJ55k2fI1vLTkefbu2snatWu54ooreOyxxwCYNHY0q1ev5t/vLmfcz8bxzBNPEdRryO/YtoP5L8xn0bK3eOyBe6kxmzCEJV65ciUnnhiu9wMwZcoUXn3p7yihAB9//DGlpeGi73fffTennXYaa9asYfny5dx4440cOXKE3Nxc3njjDTas/YCH/zCPe2+919zmw02f8cgjj7CubCO7vvqSD9e+D4CiKBx33HF89NFHCWYwedT5MSA0bfAnYIuU8qEGkygJGEXDHJkDY5miRS0YY8JhhMbf2j+7rK/GhrIwHBPGA8GwwEMyXJ4y2gIXYWvWknySm+mHoVfCvs9g+C/N5f0cvOTnyFxyDm3VXiVt85AfCNJP70lpHFnjwCPHOVngxqKsVE0x/GhR4NJyIxzX7hjenfIu7fS6HzWWS2lZqcAXELxVIrjYIQolK9VGoVgcjjmZfuadW2wmMEUKp0BmHn5LNTgs7fSsDyRrcSPUGGFZ1UeiFoVE+LfxWguNeRNn86X6VJ6ePsR5pW6BB5KxwBUvQSIpnDSbE9Pj0x5wYQrFeZ93nNUf0K7Fzw5sBanSP6eQjXo8tYHjcjNI83nY/cNRqqu/4qgaJAOVmqosqvwHAMj1ZLE38CMdY5Yj1JCamkpZWRmVNUE+/+4wL73wLN9t3xw9UD+/FE8KoZqO9B84iC5d8jm6t5xjCnoyZswYAIqKili+fDkAh/Z/x4zpF/HV7l1UVVXQpXsPQlJSFQgx4qcj8Pl9dOjYiU7ZORz8NkR219SIVPoDBw6QmRlZUbS4uJidO3eyePFixo8fH7Hu9ddf5+WXX+aBBx7Q5ruykq+++oouXbowc+ZMyso+JCAD7Nz+JSDY78mluOQEunXrRnlVgN79BrBn11cMGnoSSMjNzWXPnj1RD5G6oj52/HDgYmCjEKJMX3arlPKVekuVAAaF4tzxw8KHqn4zqdaMQjEplNqfulUJGdasQaEYFrg1JM9wGHpsN5eqhCMdkCFTSeZk+iElC875Y8T4sAUeRgFpDKmBz0V0eU+lSwnsXKN9tjxg7PMVz5k1QE9oGDsg3AUmIl1b8ZrKG6DacilV+QTPjtL9FCaFYuHAU73UEKZQrJmHa+f8NEomO3xWBa6oqEbWpkU8awGj2lrghjXrsfyWhgKvu9c/bIEn4sAVNVqBGynmRpsur67A14b68EWXsyjMcUissUD7WbUMYCeHX9i5b11nc2LaX2cTwGmUx+MhFAppvpuQpLo63KrM6/NptA0CRVHwG02WFYWAXt1y1qxZXHfddQwZdQqvvf0ST/52PiG92p/PH37IKqpKMKASqs6JOF/j+Pa2dRMnTuSGG25gxYoV7N8frkQqpeTFF1+kd+/eEePnzp1LXl4eH334IZ/v+4QB3Qdr1T6FD8WXZp6/JkfYn1VZWUlqamTgRX1QnyiU96SUQkpZLKUs0f83uvIGGNxDe0Xtaee9LRCKAqNvQynWyTo7haJ6uO9chVumJU+l2BUxWCxwWxeS0/rkMrRA42oLsiObQHitYYRIfjhqKPDo2hwAvXIzo5YpioJQPI4UijLhEfi15jCuvQWuLevaPpWtd5/BeSd2M9dZKRRsD8AAzvNo8NvWyIwMv8fRiZmsg8QaRohQ6ZSu3bgd08M3sNUCF4pmgd+5bz/rd3wV3rYqBoXiEPDs0xVmnW+YXmN4v9047qiZRkoiC9wWBw5EUyiqn8wUDwdox5qSe7QIkDgQCAh5weJstiLSoR12LoYsv6sZkx/3SJZjOmjwY7p04cPNm5HAP5f9k5qayDdFI3ojFn788Ue6du2KIgQvP/cyoBl0UYUSYlxMvXv3Zvv27VHLL7vsMu644w6Kiooilo8dO5bHHnvMvM8//PBDU478/HwU1cPSvy0jGIw05Jwggc8//5wBAwbEPsFaokGiUJoa008u4N3/HWVaiVYY/KVQFOhchMjRIjfMVHrDAldVNvRS+KJLctYERHLgBuxOTIAPbh3NkxcO4vJTevLu/46iT+dIC1oR4booVgrFkfdFs+pX33IaD50/0Fx2OGcwYsC5EU5MxXBwKR7QOVI1JcuUz255xaNQQKN+rNvIOArcSqGkWWLNPQ4WeFaql38Hh3Bk2GwQIqlSrRFyW4sTKSrF3drzzo2j6JUXftBZq9MJVbPAU6TEB1zf/WwW7vkuhgUuHBN5UnSnk6hrLK/Hz5Lut/ItnRJy4KotjBDCkUghPaoHRaW3fr5O16UdQkCopgNKqL3jerMhc0TeTqQFblJVSZW00PZgx6XnnMO769dz5unnsPr9D0hP14wwI1RWCCMSxRlz587lvPPOY8ypo2jfSTuXUChGtT8HqvXMM89kxYoVUUO7devGL3/5y6jlt912GzU1NRQXF9O/f39uu03r5nPttdeycOFCBpaUsGPrDlLTUrXzjTM13333LampqXTu3Dn2oFqiVdVCMWAk1jjBdEAZFoWq5SLWpSemHU4XrpFhZVXgee3CFqKTnMGQjM2Bx0B+VioZlmJW5fmnoAwoISReNC21FI+Po4FAWOletwXluzWw6jYtjNAmvpOlEy/tONICj5y/aulh6a49ZAVDZIdCTDy+mB01B82WaNYolDOKOpOf9XPSj9VCL4VDMau4sB5b/3xMJ9tbjkOavEe/y6f3ngjvPAK+aAUeJOzEtD68/PW1wAmHmCZrgVtnw1BwX3t7MLRqFbTrSq/MTNZ9+QPltogSJwiHv9b9Kw4UikCE8xIsWydS3+Xl5RHjJp3/cy2NHsjLzuY/ixaxpyMU5PVm3jyNWz7vrHGcNe50vd2gYPFLr5lv2CNHjmTkyJHaviZNYtKkSRyqOsTXh78mRelIZaVk1vX/S5VvrynDK++soSYYoiYYWafxiiuu4JJLLuGKK66IkNUK6/FSU1N56qmnosb06tWLjz/+GIDt+zbxyzuuRwAnnzKCASeeZI679a555ufFixdz1VVXJZi92qFVWuBxYXViYlHUNgol2RrBiRDUowvUWiQGVQdDFg48fBvFssANWPl1VWgXekgJv2ob7dlMWdp1QfFpRXyMRB4rnOLo4ynwSA7cboGrFNYEyNat7xRdcVfq1Rqt9UH8HpVSXXlDmGaJUY05GtZjx5h3jxLtdPQaU53SXvub1ilqTEhYQzwtFnh9OXDCNWcSW+DasZycmC9mTWe0+gxMfNT0jew9HIPjt0DLxAxbiMbv3KV9KgWdwlSkIkRU/ZPw5+hP8Q8af6V136oizDK3QjhnizpBe5uFWKW87YLk5+czY8YMM5GnIRAlagzZs7KymDZtWoMdF1qpBR4PYetJTwc2bnaD+66HE9MJRhihUx2JWKixKnDL3eIYeWGBz6MgQ16EUmNSIkaHHACfYtSPCF9BZtsqEe3EdIwDj3Ma8TjwGtulNCylM1uqD5CpN9N1rA9i7CrJes2WDZw/W+DzeHn0u328mp7GqxmaDF5jrlM7wNl/hILhUdsFFUs9Gsv8pOgOteQJt2gYlnciC1xVvYSwKXA9E1NVBIeVdqB6OX9wN3b9cJQrTz3WeUc2GEkygNZgIijxe5SIzkDaKRuWtpa8Y38vqjuBQjiRR8QaAF2yUhyvzYh9W94YpJQREVKJcP75SQWxJ43wgyh+sYHp0y+NkeRVd7Q5BW5eFUY1OzUyxrihLfDrB19PVbCK0vzSxIN11ARCfCnzgI3gzwL2JtoE0Jx/hgL3qAqKUHjjBIXduiFp0AaKRdGG+w6qUZRJvCgUJ8i4Fnjk91+1G8CkzW/SfahWB8IxucXYlUMxq7iwHjvWg1iojDpaQZklMsGgUBAKFJ/nuJm1GmGkBa4r8HrUswhb4AkUuPDoGbbhZQaFoghhctF+j8otZ8SPPrHC4Je1/TiPUSy5E0KIiGvGTsPUBZFmi/OeMmJU/nSCcb3G+1XqI28yCM8XOg2eHNXUEGh7Cty4Mk0LPJJCMcOlkmx0mggFWQXMHzO/VtsEQpJ7Axfh6/1TLug+hJ+XboyIt46FThl+M4rA4ApfOimsDNK8Gg+cYonSqK0FHs/wibDAbcXAnr7sZHjWsloGKawJmBayUwSPeUwHzjcukqBQjDF+y05NCiXOa8bx+Vl0+V7n0y3z5fN5EVLWj0IxLfDEYYRShC1wjxJuuqEq0QWfkoWVtAinqtuObVPYThRK4qJW+rh4w0Ty+4mHsAK378viUWlkTWrt/ZWZEk4ssx+3MXrytDkFHv7RdA7crOxmUCfaak+S1QgbA8OO7UQVPgqGa69y90wuSrCFhk7pPi0UDI0iskeV/LTHT5l94mw6p4e93NZyrPb73kkR1JUDH358nm2w7lhzcGLaodaaQrFa4DFUqpFYZbGYvcbnOG9fz109nBVP/FUfZ1FeQkGlfrog7MRMVAtFS84yFLi1CbEikos6cYJmgYepB3NhxBgr/SbiK+FEx0sQUlefnZuVDJWwAm8fCuKV8K2+/1SvyuGgY7O5BoX1NLJSvWYSXFOgzSlwQ2EYPGa4j5/2JydTi5/1J9myqDEwoGsWO+87s9bbpXhVs3WZlMGoGyTVk8qIbiMilkVY4LYb30mnxrunrMWsYlIX5mA9ecHMxIxTbKiWceAoHp76dq/ZV9R5pzpdYVHgHiwUSsx9qwizbZPVHNVmuz4WuKG4E1EoihJpgadFKPD6WOC2133AHn/nVSOtdOuRak0NNAGHYM2o7qonzHwLIOGYjqlU1PgbnHe2I2yBNwVpEok2F4VidscwejkqkTG15wzqxoobRuJrRgu8XtAplCBVUY5Tp0gYY5ljFEqtLfBaKPCgTgkZfSLjKB3DAk8+CkXl5IpKBlXGCZ9TohV4mEKJbQELVQm327M/8GRtXGXRSNoCNygU/bu1K1OnDD/Z6fGjlWLBymmHa/lEjvF5VPOBEStrM1HTgZ07dzJgwIC4cyVF7BKwS5cuZfPmcOr9+++/T2lpKSUlJfTt25e5c+cCsPy15Tz24O+0/TkcTVWUiNDbpkaURI3AobRSLRYHJidms8D15R5Vq839/Q8Nw4E3NWRQS8MNykD4NVJKgsK5o0okB25fVzsFHsGBJwqbNCkUnQOPYwXVPgrFSCuPb0mDXYEnplBQVdNvYlcwAszSBHVBsk5MwwI3nJjWvqi/PrNv8t3TbYiwpvUvTt3Srfx4pAUevZ+GRiAQYOnSpUyYMIF+/bT+MNOmTeOFF15g4MCBBINBPvvsM4QQjBo3iq4ZXfnqe2cF3lQQeqiOPY/BsQtRA6PtKXD9h5RmIk90txcgflPjFozKPefh7fgefTsWmxeIJwkFnsgCz0zxcLgyEN9qMuOjldjcswFDgSvRxayiZKxtSGcyCryOFIpQwhZ4VOYqDRNG6E/IgXtiUijptbUoX70Zvt0IQLeagFaL0KvSORCkU1BqMtl+y3aBClJkCJ+ikhbyEkIrRZCi+igMVuHN7Qc/+39xDxsIBLjoootYvWYdhcf34aW/LWbLli38z1VXUX70KOl5Hfjbs0vIz89n5MiRlJSU8N577zF58mRefvll/vOf/3DXXXfx4osvsnfvXvLzte7xqqrSr18/jtQcYenipezcvJNZc+bx69nX0iW1hg83fcqu/Ye59+EnufefS1i9ejWlpaUsWLCgdvNWCxiGlF1Bp3hVenRMozoo+ebHCocR9UebU+DS9AAbNSN0zjjKgdc6Tz3D04HD+87Ap8uvSIkHqMKZQrEq8Hip9C/9Yjgrt30fl19dcPkwWAQ4ZDkCkD9QK+j/yT+inZimUozezEzkSVY7mg0P4lngeiMJiwJPj1vG0hBGtUQuRe5fyPpxjicVduJXo3tRnKA7uaKoMZ2Y9YE1gcjnURBCJoy31iUCBEKopEgJnsTFmD777DP+9Kc/cdNv+3P79TN54okn+Mc//sFzDz1ETseO/H7Va8yZM4enn34agOrqatatWwfA1q1bmTBhAueeey4As2fPpnfv3owcOZJx48ZpyTBmcFlY/h9+PMTqZQt59LVPuWbaFFavWskf//hHhgwZQllZGSUlJUnNU20RS4EDZKX5OHCk2mFNw6B1arF4sKfS6zey3eFXl5ZqLQHt070crgqET5NwfHNcCkWJpFC0bLfwgmNzMjg2JyPusft37aDvNMZlc9U78OMuTYEbpVot5WSvOKUnEwZ2idrMaOKbtIGin1MoRgEtTUZtXTs9M/Rnh8tpH0rMsgshYnLgCvULI0zzeZh9+vEJxylCiSj/kFYfBX7GfeZHe1J8LOLq8A/b+SZYQVdvJgdrOnGosoY0n8pxDkXVYqF79+4MHz6cj3cd5Myzz+f5PzzKpk2bmKA3U6gUQQq69zTHX3DBBTH3dfvtt3PhhRfy+uuv8+yzz7J48WJeeSO6bt5Zp49ACEGvPv3IzskxC1P179+fnTt3Np4Cj0GhmOv1vy6FkgSy0jQHT6cMzUowlENUCeNWqsA7pPn4+kAFhywOPI/RdcfJAseZQvGqSpLWlwVmhmKcyyY9FxBwaLc+Nswn/3qCc89rRY9bl8k6loUggGr2h3Qeo60bVFnFC3sP0efIweT2jeWhb3cSU79EnqSPL4SNQmna29SJK68teWR/28vMzKR///68/Yc/APBlLvTJDVflM4paxUJhYSHXXHMNM2bMICcnJ6Lka9f2qXhVBb9Pz0RWFLN6JBBRjrYxYFrgsS6NRtTgrZMIjgMzVMunZyWarYts1lQDZWI2Na7+SSGgdX8BUCR0CQQ4//jzGZo/NGq8UffYIzzhHCehlXeN57B0hKnA48ydxwcZuXDw68ht4sCguQbkDEwwMowgagIKRafQgL5HDtZK/cSywDsEg3RIwopvCFjLBDcUhVJbCCHiJmDFw1dffcXq1asBWP6vvzNs2DD27dvHB2VlANQEavjkk08ct83MzOTw4cPm93/9619mOdetW7eiqirt27c313fK8JOR0oy2aBLZoI2FNmeBmw4ZPfpEsdVCCQ+r26lnpXqTyppsLIwvyo+IIRdIPEhuO+k2x/HWMELDKlKFQFUEtQ6PTcYCB2jXBfZ8qI9NrHy8ipdnxz9LQVZB0qIEhZpUFEpdoBhcse0B90zJDaTmNVwt53iIsMATOD0bGuFoE2E2y6gtevfuzRNPPMH69evp168fs2bNYuzYscy8/HIOlZdzVAS56fqb6N+/f9S2U6ZMYcaMGTz66KMsWbKEv/zlL8yePZu0tDQ8Hg+LFi0ye5Q2RDZnfSFMBe5SKPWGMMvF6tSB0SDWHoVSRwrlg1tH11m2xoDmXooNM9TQkkqvKIYCr+XFbyjFhAq8a1iBJ1nkqygnuWxUAyHUcNEpJ9TDSW1SKDbrs8OQGXXeZ20RKwqlKSEIx++H7AHjcVBQUMCnn34atbykpIQ3Fi4EYGdn6JutPQzt9bmHDx8eEQf+3HPPOR7nV1f9inSvRr0sWLDAvOa6dj+Gt1evM8c1ZgQKJH6IZKR46JWXGVFNtKHQ5hS4/TVfMcMIbTG9dXw1TJSE0dTQYpNjr49M5DGWCVQlOqww8cGMt5skFLi5TePMVxAlKQ68LhBWrqmZYCTyKEJrQdeUsFrghgIPNjD33xCWc4bP2el+fCMpy1gwfCWxZsijKDSWOG1OgZtJCKpdgdvHtQ36X3hSUDr0ibk+IgrF0r1dVZwzMeMfLFkL3BJp0ki+hpBIZIHXg0IxnZjNrMAFLLh0KAP1ZghNDSHCb2mBWljgyaAx+eKmNrLaqSl8V1NOe0/8tnaNgTanwE3L24h+MEqV2m5GpY34bxXVj5LWMfb6iDhwbZmqaM4pp4YOcZE0B974Fnhaih+/N048cj0UuPHwb85kL8OJOeL4nCY/tjXj0iwW1cAWeNO4gpsGPsVL/+pqSG/6+kptToELe/y33t0kXtW11gwRIwPTgFM5WVURzDi1Z8K47+idJanAs4+zCli7YyQJv88Hvjgp+PWiUAzHd/MpcCsH3vQH1/4I6uAnSYCQT0GpbiT1nd270d744sK8/5r+B2tzCjzcSi2ynKywR6G0FQpFOBccMuBUTlYRgunDe8bcJv4BlcQ3SX5J5PjGgOKJL4d9nScVAhXJ7Vp1jgNvSlgTeZoaqUKhXSiET3ga/CEWzPbzVaCyQfdpwtf0FAYQNlKa4fdqG1rMArOVmh7/bXY8t0ehtIDwo4aAov+LhSx/FmmeNLpmdLVY4PU4oFATW+BCwM9fgM7FkJEXf2xdkVCB22RMz05+1yaF0nzXSEg0T1wxgFcodA8EUIVIujdlslCEMFsAthk044O+rU2lhULRb8JYUSj/JRRKpi+TVVNXMSx/GEeqtHrJHdJqWf0v4oBKciF6x4+Fq99tPKtI8cSnSezrUuLXH4nYNEbuQFOiWSkUI7rDm9og98ncuXN54IEHuP3221mxYlXMcfYysrfffjtvvvkmACNHjjRrpRQUFFBUVERJSQlFRUW89NJLtZbpkUce4ejRo+b3p59+mqKiIoqLixkwYIC5T6sMMeFSKA2HcDNj3ZlpcuDNJVHjQhBfgYMWgQLQPk17G/nNxOjkiaShqLGLWTUlFDWBBW6bE3/8Oh6pJSVU6FmCLcGJqZWTbaaLNq2jNl9q+HeudcipA+68804qf9jJF8EjjuvtZWTvvPPOmPtavnw52dnZfPbZZ4wZM4ZJkyYlLUcwGOSRRx7hoosuIi0tjV27dnH33XezYcMGsrKyKC8vZ9++fQllMOFNg/bHgL+WPqUGQJtT4CYHrlMoZqGkNsJ526Fx28md25UjjmVSSRd6dIpfdyIukuHAmwKKJ/6bgH1dAgXe49lFZjELk0Jpxno5oQaywH+75rd8eiA6qaY2MHtBa1Vp6dOxDzcNvSnuNnfffTcLFy4kNzeX7t27c+KJJzJ9+nTGjSql6MwRPHznw6x6cxUej4cxY8Zw9tlnR5WR/b//+7+IqoROOHToEB06dDC///Wvf+XRRx+lurqa0tJSnnzySVRVJSMjg6uuuoo333yTc845hz179jBq1Ciys7N58MEHyczMJCNDU8AZGRnm5+nTp5syFBQUMHXqVF599VU8Hg/z58/nlltuYdu2bdx4441cffXV9ZjluqHNKXCzlrMZBx7Z1LitIRkL3ECKV62f8obkOPCmgOKJ/1C2K19/O7jsdTj8jfNwi7VtdHFqzkQempNCsaG207B+/Xqee+45ysrKCAQCDBo0iBNPPBEABcHBAwd565W32L51O0IIDh48SPv27Zk4cWJChW1g1KhRSCnZvn07L7zwAgBbtmzh+eefZ+XKlXi9Xq699loWLVrEJZdcwpEjRygtLeXBBx8ENMrEsOKDwSB5eXn07NmT0aNHc/bZZ3PWWWc5HveYY46hrKyM2bNnM336dFauXEllZSUDBgxofQpcCDEO+B1aobY/SinvS7BJ48OMQglz3yFBs/KZjQkhRNM6ZIVoGQq84FTwxGkt5mSBH1Oa1K6FR2v9IJrxTaOhnJiJLOXGwLvvvsvkyZNJS9P8HxMnTjTXCdVLRrsMfCk+Lr/8ciZMmMCECRNqfQxD+X7xxReMHj2akSNH8tZbb7F+/XqGDBkCQEVFBbm5uYDWCOKcc85x3Jeqqrz22musXbuWt956i9mzZ7N+/XqzdZsVxrkUFRVRXl5OZmYmmZmZ+P1+80HUlKjznSi098sngNOBXcBaIcTLUsrN8bdsXJgcuCXdOyTajtPSjtpQKA1zwBZigf/0jvjr7co3AYUSsamiEtQ+1FqshkKzOjEbEcKXjsfj4bl/P8c3H33DkiVLePzxx3n77bfrtL/CwkLy8vLYvHkzUkqmTZvGvffeGzUuJSUFVY39QBZCMHToUIYOHcrpp5/OpZde6qjA/X7NaFAUxfxsfG/MkrWxUJ8rdCiwTUq5XUpZDTwHJO9JaCQo9hoo6DdCG1XgtaFQGuaALYQDTwT7nKS2T3pTw/Hd/E7MZjt8vTBixAiWLl1KRUUFhw8fZtmyZeGVioej5Uc5fOgw48eP5+GHH+ajjz4CosvIJoO9e/eyY8cOevTowejRo1myZAl79+4F4MCBA3z55ZeO21mPtWfPHjZs2GCuKysro0ePHrWSo7lQH1OqK/C15fsuIOodVQhxJXAlaPxRY6NzyansznmfQb2Hmct29/CQ2Td2vZDWDI/iwdOUFrFQIqITWiysc3LidBh6VdKb5h5fyrocQZeS4Q0vV5I42CMNJSNx67KWiEGDBnHBBRcwcOBAcnNzTUrDwJHyI8y6ZBYiIJBS8tBDDwHRZWTjYdSoUaiqSk1NDffddx95eXnk5eVx1113MWbMGEKhEF6vlyeeeMJRGV955ZWMGzeOLl26sGDBAm644Qb27NlDSkoKOTk5/P73v2+4CWlEiLrWOBBCnAuMk1JeoX+/GCiVUs6Mtc3gwYOlEcvZElC0UCthunHaxmaWpO5YtXsVOWk59OrQq2kO+GBfKBgO5/yxaY5XV1QfgXu6aIr89v2Jx7chbNmyhb59+za3GDHxyfdaI4f+2fUIZ23DcPr9hBDrpZSD7WPrY7rtBrpbvnfTl7loQpzc9eSmPaDiaRlx4Alh1A1oAXy9CxeNhPpc3WuBXkKInmiKewrw8waRykXLxdi7oH0r4Ae9qTD4MhjoXpIu2i7qrMCllAEhxEzg32hhhE9LKZ2b3LloO+jX7H7q5CAETHi4uaVw4YDj2h9HqE0VlG0+1Ov9Ukr5CvBKA8niwoWL/wL448Xvu6gV2mZ+uQsXLlz8F8BV4C5cuHDRSuEqcBcuXDQ5VqxYUacUeisWLFjAnj17Eo6bPn06PXv2pKSkhD59+vCb3/ym1seyl7p9//33KS0tpaSkhL59+5pZmy+//DL33dd0FUVcBe7ChYtGg5SSUKjhHZbBYDBpBQ4wb948ysrKKCsrY+HChezYsSPpYwUCgSgFPm3aNObPn09ZWRmbNm3i/PPPB7RaKTfffHPtTqYecINkXbhow/j2nnuo2lK/crJ2+Pv2ofOtt8Zcv3PnTsaOHUtpaSnr169n6NChrF27FiEEv/71r7ngggsArRTsmWeeybZt2xg1ahRPPvkkiqLw+uuvc8cdd1BVVUVhYSHPPPMMGRkZFBQUcMEFF/DGG29w3XXXsW7dOi688EJSU1NZvXo18+bNY9myZVRUVHDyySfz1FNPRdVAqqzU2rmlp2tVOdevX891111HeXk52dnZLFiwgPz8fEaOHElJSQnvvfcekydPjip1u3fvXvLz8wGtGJZRw3zBggWsW7eOxx9/nOnTp5OamsqHH37I3r17efrpp/nzn//M6tWrKS0tZcGCBfX+LVwL3IULFw2OrVu3cu2113LnnXeya9cuPvroI958801uvPFGvvlGK+m7Zs0aHnvsMTZv3swXX3zB3//+d77//nvuuusu3nzzTTZs2MDgwYPNVHuATp06sWHDBi666CIGDx7MokWLKCsrIzU1lZkzZ7J27Vo2bdpERUUF//znP83tbrzxRkpKSujWrRtTpkwhNzeXmpoaZs2axZIlS1i/fj2XXXYZc+bMMbeprq5m3bp1zJkzh4kTJ5pWfGFhIbNnz6Z3795MnjyZp556ynww2PHDDz+wevVqHn74YSZOnMjs2bP55JNP2LhxI2V6A5H6wLXAXbhow4hnKTcmevTowbBhw5g9ezZTp05FVVXy8vL4yU9+wtq1a2nXrh1Dhw7l2GOPBWDq1Km89957pKSksHnzZoYP1+rQVFdXc9JJJ5n7Nax3Jyxfvpz777+fo0ePcuDAAfr372/W9Z43bx7nnnsu5eXljB49mlWrVtGuXTs2bdrE6aefDmi0jGFVJzrW7bffzoUXXsjrr7/Os88+y+LFi1mxYkXUuLPOOgshBEVFReTl5VFUpJXv6N+/Pzt37qSkpCS5CY0BV4G7cOGiwWFQFPFgpzeE0IpbnX766SxevLhW+62srOTaa69l3bp1dO/enblz5zpaxRkZGYwcOZL33nuPM844g/79+7N69eo6nUNhYSHXXHMNM2bMICcnh/37o2vuNHb5WZdCceHCRaPh1FNP5fnnnycYDLJv3z7eeecdhg4dCmgUyo4dOwiFQjz//POccsopDBs2jJUrV7Jt2zYAjhw5wueff+64b2tJWENZZ2dnU15eHrOaYSAQ4IMPPqCwsJDevXuzb98+U4HX1NTwySfOyeT2Urf/+te/MAoBbt26FVVVm7yZA7gK3IULF42IyZMnU1xczMCBAznttNO4//776dy5MwBDhgxh5syZ9O3bl549ezJ58mRycnJYsGABU6dOpbi4mJNOOolPP3V2wk6fPp2rr76akpIS/H4/M2bMYMCAAYwdOzaqhK3BgRcXF1NUVMTZZ5+Nz+djyZIl3HTTTQwcOJCSkhJWrVrleKwpU6Ywb948TjjhBL744gv+8pe/0Lt3b0pKSrj44otZtGhR3IYRjYU6l5OtC1paOdllXywjLy2PoflDm1sUFy4aDC29nKyL+GiqcrKtHmcVOjcudeHChYvWAJdCceHChYtWCleBu3DRBtGU1KiLhkNtfzdXgbtw0caQkpLC/v37XSXeyiClZP/+/aSkpCS9zX81B+7CRVtEt27d2LVrF/v27WtuUVzUEikpKXTr1i3p8a4Cd+GijcHr9dKzZ8/mFsNFE8ClUFy4cOGilcJV4C5cuHDRSuEqcBcuXLhopWjSTEwhxD7gyzpung1834DiNDZceRsPrUlWcOVtTLQmWaHu8vaQUubYFzapAq8PhBDrnFJJWypceRsPrUlWcOVtTLQmWaHh5XUpFBcuXLhopXAVuAsXLly0UrQmBT6/uQWoJVx5Gw+tSVZw5W1MtCZZoYHlbTUcuAsXLly4iERrssBduHDhwoUFrgJ34cKFi1aKVqHAhRDjhBCfCSG2CSFubm557BBC7BRCbBRClAkh1unLOgoh3hBCbNX/dmhG+Z4WQuwVQmyyLHOUT2h4VJ/rj4UQg1qIvHOFELv1OS4TQoy3rLtFl/czIcTYJpa1uxBiuRBisxDiEyHEr/TlLXJ+48jbUuc3RQixRgjxkS7vb/TlPYUQH+hyPS+E8OnL/fr3bfr6ghYg6wIhxA7L3Jboy+t/LUgpW/R/QAW+AI4FfMBHQL/mlssm404g27bsfuBm/fPNwG+bUb4RwCBgUyL5gPHAq4AAhgEftBB55wI3OIztp18TfqCnfq2oTShrPjBI/5wJfK7L1CLnN468LXV+BZChf/YCH+jz9gIwRV/+e+Aa/fO1wO/1z1OA51uArAuAcx3G1/taaA0W+FBgm5Ryu5SyGngOmNTMMiWDScBC/fNC4GfNJYiU8h3ggG1xLPkmAX+WGt4H2gsh8ptEUB0x5I2FScBzUsoqKeUOYBvaNdMkkFJ+I6XcoH8+DGwButJC5zeOvLHQ3PMrpZTl+lev/l8CpwFG63n7/BrzvgQYLYQQzSxrLNT7WmgNCrwr8LXl+y7iX3DNAQm8LoRYL4S4Ul+WJ6X8Rv/8LZDXPKLFRCz5WvJ8z9RfNZ+2UFItRl79df0ENMurxc+vTV5oofMrhFCFEGXAXuANtLeAg1LKgINMprz6+h+BTs0lq5TSmNu79bl9WAjht8uqo9Zz2xoUeGvAKVLKQcAZwC+EECOsK6X2vtRi4zVbunw6/h9QCJQA3wAPNqs0NgghMoAXgf+RUh6yrmuJ8+sgb4udXyllUEpZAnRDs/77NK9EsWGXVQgxALgFTeYhQEfgpoY6XmtQ4LuB7pbv3fRlLQZSyt36373AP9Ausu+M1yH9797mk9ARseRrkfMtpfxOvzlCwB8Iv8Y3u7xCCC+aMlwkpfy7vrjFzq+TvC15fg1IKQ8Cy4GT0OgGoyGNVSZTXn19FrC/aSWNkHWcTltJKWUV8AwNOLetQYGvBXrpXmcfmmPi5WaWyYQQIl0IkWl8BsYAm9BknKYPmwa81DwSxkQs+V4GLtE95MOAHy1UQLPBxg1ORptj0OSdokcf9AR6AWuaUC4B/AnYIqV8yLKqRc5vLHlb8PzmCCHa659TgdPRePvlwLn6MPv8GvN+LvC2/gbUXLJ+anmQCzSu3jq39bsWmspDW5//aN7az9G4rznNLY9NtmPRvPQfAZ8Y8qHxbm8BW4E3gY7NKONitNfiGjSe7fJY8qF5xJ/Q53ojMLiFyPsXXZ6P9Qs/3zJ+ji7vZ8AZTSzrKWj0yMdAmf5/fEud3zjyttT5LQY+1OXaBNyuLz8W7UGyDfgb4NeXp+jft+nrj20Bsr6tz+0m4K+EI1XqfS24qfQuXLhw0UrRGigUFy5cuHDhAFeBu3DhwkUrhavAXbhw4aKVwlXgLly4cNFK4SpwFy5cuGilcBW4CxcuXLRSuArchQsXLlop/j+bObxeOWf4gAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "wordsimDF1.plot.line()" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "id": "appointed-tablet", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# cosine_similarity([encodingsMap['Q847337']], [encodingsMap['Q551800']])" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "adaptive-bride", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "beautiful-wages", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37975882843235137, pvalue=5.235465664921023e-26)" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "equivalent-wireless", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37556037504702056, pvalue=1.7903693658447951e-25)" - ] - }, - "execution_count": 126, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLargeSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "informal-error", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3529686820781901, pvalue=1.0899920454225404e-22)" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['distilBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "allied-vulnerability", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3156122362936971, pvalue=1.8520533516011967e-18)" - ] - }, - "execution_count": 139, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBaseBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "victorian-seeking", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3583059753020537, pvalue=2.481962318957373e-23)" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fallen-action", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "smart-musician", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5388523544692222, pvalue=1.1269721214604893e-27)" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "stock-agent", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5316995237579449, pvalue=7.350680368606645e-27)" - ] - }, - "execution_count": 127, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLargeSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "wrapped-batman", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5043971026064306, pvalue=6.35665360448366e-24)" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['distilBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "fallen-professor", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4564962071637959, pvalue=2.286865863469491e-19)" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBaseBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "fewer-stock", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5120576203985243, pvalue=1.0133475563672188e-24)" - ] - }, - "execution_count": 98, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBertSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "attractive-dressing", - "metadata": {}, - "source": [ - "# Version 1 - Embeddings of Labels" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "royal-bahrain", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "threatened-roman", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "31" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "flexible-metropolitan", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1 = wordsimDF.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "superb-machinery", - "metadata": {}, - "outputs": [], - "source": [ - "def getV1Embeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.node2_labelsDF.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " maxVal = 0\n", - " for elem1 in [pT.strip().split('_')[-1] for pT in row['G_qnode'].split('|')]:\n", - " for elem2 in [pT.strip().split('_')[-1] for pT in row['P_qnode'].split('|')]:\n", - "# print(elem1)\n", - "# print(elem2)\n", - " if elem1 in encodingsMap and elem2 in encodingsMap:\n", - " maxVal = max(maxVal, cosine_similarity([encodingsMap[elem1]], [encodingsMap[elem2]]))\n", - " return maxVal\n", - "\n", - "def getCoverage(row, encodingsMap):\n", - " if row['G_qnode'] in encodingsMap and row['P_qnode'] in encodingsMap:\n", - " return 1\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "compatible-stick", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.7211705]], dtype=float32)" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "max(cosine_similarity([bertLabelsEncMap['Q2285706']], [bertLabelsEncMap['Q17221']]), \\\n", - " cosine_similarity([bertLabelsEncMap['Q48352']], [bertLabelsEncMap['Q17221']]))" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "excess-sight", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.16066622734069824 s\n" - ] - } - ], - "source": [ - "bertLabelsEnc = getV1Embeddings('bert-base-nli-mean-tokens')\n", - "bertLabelsEncMap = getMap(bertLabelsEnc)\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "# wordsimDF1.bertLabelsSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "metropolitan-sunglasses", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(118, 118, 1.0)" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertLabelsEncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "entire-branch", - "metadata": {}, - "outputs": [], - "source": [ - "# stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "positive-clone", - "metadata": {}, - "outputs": [], - "source": [ - "# stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "choice-alfred", - "metadata": {}, - "source": [ - "# Amandeep's file generation" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "attached-persian", - "metadata": {}, - "outputs": [], - "source": [ - "# q1 = \"kgtk query -i ../data/wikidataos.for.text-embedding.tsv.gz --match '(node1)-[]->(node2)' --where 'node1 in [\" + \",\".join(['\"'+word1+'\"' for word1 in wordsimQNodesListWAbstractsLabelsDF2.index.to_list()]) + \"]' -o ../data/wikidataos.for.text-embedding.subset2.tsv\"\n" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "fleet-finder", - "metadata": {}, - "outputs": [], - "source": [ - "# import os\n", - "# os.system(\"screen -dm \"+q1)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "fancy-personality", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataOSDF = pd.read_csv('../data/wikidataos.for.text-embedding.subset2.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "broke-grave", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2ranknode2;wikidatatype
0Q104021-P1245-868aab-b3f18d7b-0Q104021P12451412normalexternal-id
1Q104021-P1296-7a59c3-5f49b5a7-0Q104021P12960108342normalexternal-id
2Q104021-P1343-Q19180675-e305e6f3-0Q104021P1343Q19180675normalwikibase-item
3Q104021-P1343-Q2657718-2d01d189-0Q104021P1343Q2657718normalwikibase-item
4Q104021-P1343-Q4091875-50bd890f-0Q104021P1343Q4091875normalwikibase-item
\n", - "
" - ], - "text/plain": [ - " id node1 label node2 rank \\\n", - "0 Q104021-P1245-868aab-b3f18d7b-0 Q104021 P1245 1412 normal \n", - "1 Q104021-P1296-7a59c3-5f49b5a7-0 Q104021 P1296 0108342 normal \n", - "2 Q104021-P1343-Q19180675-e305e6f3-0 Q104021 P1343 Q19180675 normal \n", - "3 Q104021-P1343-Q2657718-2d01d189-0 Q104021 P1343 Q2657718 normal \n", - "4 Q104021-P1343-Q4091875-50bd890f-0 Q104021 P1343 Q4091875 normal \n", - "\n", - " node2;wikidatatype \n", - "0 external-id \n", - "1 external-id \n", - "2 wikibase-item \n", - "3 wikibase-item \n", - "4 wikibase-item " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikidataOSDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "behavioral-layout", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk query -i ../data/wikidataos.for.text-embedding.subset2.tsv \\\n", - "# --match '(node1)-[]->()' \\\n", - "# --return 'count(distinct node1)'" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "resistant-jungle", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk text-embedding -i ../data/wikidataos.for.text-embedding.subset2.tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/wikidataos-text-embeddings-subset2.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "humanitarian-divide", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(set(wordsimQNodesListWAbstractsLabelsDF2.index.to_list()))" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "unique-accuracy", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataOSEmbDF = pd.read_csv('../data/wikidataos-text-embeddings-subset2.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "smooth-librarian", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataOSEmbDF1 = wikidataOSEmbDF[wikidataOSEmbDF.property == 'text_embedding'].loc[:,['node','value']]" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "wired-surveillance", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodevalue
0Q9980.50568223,-0.10802102,-0.3486761,0.78598565,-...
2Q99496317-0.663889,1.3066527,0.7410443,0.7310645,-0.086...
4Q980698770.79087067,0.6158045,0.18239851,-0.44384396,-0...
6Q964401-0.4146536,0.36972183,-0.9731038,0.72235125,0....
8Q96350.085437864,0.50590533,-0.7758463,0.575578,1.1...
\n", - "
" - ], - "text/plain": [ - " node value\n", - "0 Q998 0.50568223,-0.10802102,-0.3486761,0.78598565,-...\n", - "2 Q99496317 -0.663889,1.3066527,0.7410443,0.7310645,-0.086...\n", - "4 Q98069877 0.79087067,0.6158045,0.18239851,-0.44384396,-0...\n", - "6 Q964401 -0.4146536,0.36972183,-0.9731038,0.72235125,0....\n", - "8 Q9635 0.085437864,0.50590533,-0.7758463,0.575578,1.1..." - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikidataOSEmbDF1.head()" - ] - }, - { - "cell_type": "markdown", - "id": "loved-serial", - "metadata": {}, - "source": [ - "# Version 2 - Comparison of cosine similarity measures with Amandeep's original file new pairs" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "novel-milwaukee", - "metadata": {}, - "outputs": [], - "source": [ - "import json" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "computational-vinyl", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['amanSim'] = amanEncSim * 10\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['amanSim'] = wordsimDF1.amanSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "amanEncMap = {row['node']: json.loads('['+row['value']+']') for _, row in wikidataOSEmbDF1.iterrows()}\n", - "amanEncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(amanEncMap, ))\n", - "wordsimDF1['amanSim'] = amanEncSim * 10\n", - "wordsimDF1['amanSim'] = wordsimDF1.amanSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "virtual-sodium", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(330, 349, 0.9455587392550143)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(amanEncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "dated-delta", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3654839025870469, pvalue=3.731075991381434e-24)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['amanSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "realistic-belize", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5075204852629356, pvalue=3.0234963712614295e-24)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['amanSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "hourly-armor", - "metadata": {}, - "source": [ - "# Version 3 - P31, P279 edges from lexicalized version" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "empty-laugh", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# !kgtk text-embedding -i ../data/wikidataos.for.text-embedding.subset2.tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 \\\n", - "# --save-embedding-sentence > ../data/wikidataos-text-embeddings-subset3.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "biological-enhancement", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataV3DF = pd.read_csv('../data/wikidataos-text-embeddings-subset3.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "silent-logging", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataV3DF = wikidataV3DF[wikidataV3DF.property == 'text_embedding'].loc[:,['node','value']]" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "color-sword", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodevalue
0Q9980.60533667,-0.32207027,-0.19160181,0.70176995,...
2Q99496317-0.663889,1.3066527,0.7410443,0.7310645,-0.086...
4Q980698770.79087067,0.6158045,0.18239851,-0.44384396,-0...
6Q964401-0.3510175,0.29355207,-1.0211854,0.35043457,1....
8Q9635-0.010522888,0.4303582,-0.76446587,0.26379517,...
\n", - "
" - ], - "text/plain": [ - " node value\n", - "0 Q998 0.60533667,-0.32207027,-0.19160181,0.70176995,...\n", - "2 Q99496317 -0.663889,1.3066527,0.7410443,0.7310645,-0.086...\n", - "4 Q98069877 0.79087067,0.6158045,0.18239851,-0.44384396,-0...\n", - "6 Q964401 -0.3510175,0.29355207,-1.0211854,0.35043457,1....\n", - "8 Q9635 -0.010522888,0.4303582,-0.76446587,0.26379517,..." - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikidataV3DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "essential-virtue", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['wikiV3EncSim'] = wikiV3EncSim * 10\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['wikiV3EncSim'] = wordsimDF1.wikiV3EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "import json\n", - "wikiV3EncMap = {row['node']: json.loads('['+row['value']+']') for _, row in wikidataV3DF.iterrows()}\n", - "wikiV3EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(wikiV3EncMap, ))\n", - "wordsimDF1['wikiV3EncSim'] = wikiV3EncSim * 10\n", - "wordsimDF1['wikiV3EncSim'] = wordsimDF1.wikiV3EncSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "charming-indicator", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(330, 349, 0.9455587392550143)" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(wikiV3EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "dependent-sensitivity", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.33429987563573715, pvalue=1.805960166533804e-20)" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['wikiV3EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "fresh-correspondence", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4737260118146468, pvalue=6.343179394616253e-21)" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['wikiV3EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "specified-tomorrow", - "metadata": {}, - "source": [ - "# Version 4 - First sentence of abstract vs human" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "opposite-discipline", - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "single-antigua", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "324" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "structured-specialist", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.abstract.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "unnecessary-outdoors", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1['abstractFirstSent'] = wordsimQNodesListWAbstractsLabelsDF1.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "breathing-purchase", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDFabstractFirstSent
node1
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...floodA flood is an overflow of water that submerges...
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...moneyMoney is any item or verifiable record that is...
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radioRadio is the technology of signaling and commu...
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergencyAn emergency is a situation that poses an imme...
Q213449EatingQ213449-wikipedia_sitelink-1e88be-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Eating104645.0<http://dbpedia.org/resource/Eating><http://www.w3.org/2000/01/rdf-schema#comment>Eating (also known as consuming) is the ingest...eatingEating (also known as consuming) is the ingest...
\n", - "
" - ], - "text/plain": [ - " index id label \\\n", - "node1 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 wikipedia_sitelink \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 wikipedia_sitelink \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 wikipedia_sitelink \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 wikipedia_sitelink \n", - "Q213449 Eating Q213449-wikipedia_sitelink-1e88be-0 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q8068 http://en.wikipedia.org/wiki/Flood 23841.0 \n", - "Q1368 http://en.wikipedia.org/wiki/Money 1312979.0 \n", - "Q872 http://en.wikipedia.org/wiki/Radio 1866867.0 \n", - "Q5070802 http://en.wikipedia.org/wiki/Emergency 80429.0 \n", - "Q213449 http://en.wikipedia.org/wiki/Eating 104645.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "Q213449 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "Q213449 \n", - "\n", - " abstract node2_labelsDF \\\n", - "node1 \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency \n", - "Q213449 Eating (also known as consuming) is the ingest... eating \n", - "\n", - " abstractFirstSent \n", - "node1 \n", - "Q8068 A flood is an overflow of water that submerges... \n", - "Q1368 Money is any item or verifiable record that is... \n", - "Q872 Radio is the technology of signaling and commu... \n", - "Q5070802 An emergency is a situation that poses an imme... \n", - "Q213449 Eating (also known as consuming) is the ingest... " - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "surgical-title", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "grateful-harassment", - "metadata": {}, - "outputs": [], - "source": [ - "def getFirstSentEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF1.abstractFirstSent.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getFirstSentMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF1.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['G_qnode'] in encodingsMap and row['P_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['G_qnode']]], [encodingsMap[row['P_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "owned-helen", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.5808649063110352 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV4EncSim'] = bertV4EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV4EncSim'] = wordsimDF1.bertV4EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV4Enc = getFirstSentEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV4EncMap = getFirstSentMap(bertV4Enc)\n", - "bertV4EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV4EncMap, ))\n", - "wordsimDF1['bertV4EncSim'] = bertV4EncSim\n", - "wordsimDF1['bertV4EncSim'] = wordsimDF1.bertV4EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV4EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "christian-median", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(239, 349, 0.6848137535816619)" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV4EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "nervous-cycling", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSim
05.53606.8096724.9497385.1456013.770548
14.12504.5548774.8182313.9870474.168040
26.62507.6438156.4070515.6696314.997217
32.06257.1948996.1864976.1864970.000000
47.18758.1378798.5566649.0984080.000000
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548\n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040\n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217\n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000\n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "retired-cookie", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "future-boring", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3633652092919623, pvalue=2.1070516667335453e-22)" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV4EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "composite-lebanon", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.49261494527923566, pvalue=9.798975953928462e-23)" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV4EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "occupational-rough", - "metadata": {}, - "source": [ - "# Version 5 - DBPedia's short abstracts vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "effective-elements", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "22" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "graduate-congress", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "little-yukon", - "metadata": {}, - "outputs": [], - "source": [ - "def getAbsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF1.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getAbsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF1.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['G_qnode'] in encodingsMap and row['P_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['G_qnode']]], [encodingsMap[row['P_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "choice-seating", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.15574932098388672 s\n" - ] - } - ], - "source": [ - "bertV5Enc = getAbsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV5EncMap = getAbsMap(bertV5Enc)\n", - "bertV5EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV5EncMap, ))\n", - "wordsimDF1['bertV5EncSim'] = bertV5EncSim\n", - "wordsimDF1['bertV5EncSim'] = wordsimDF1.bertV5EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV5EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "computational-crime", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(58, 118, 0.4915254237288136)" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV5EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "durable-import", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Indexg_qnodep_qnodeq1_labelq2_labelcomplextransetextclassnode2vec-v0H_3x6H_5x8bertLabelsSimbertV5EncSim
011Q17221Q189290spokespersonmilitary officer0.250.110.620.650.270.680.455.6703994.803427
13Q702269Q2285706professionalhead of government0.290.390.590.570.130.470.294.4716325.585540
25Q2285706Q82955head of governmentpolitician0.360.260.840.550.050.610.647.2598486.529090
311Q107711Q189290firefightermilitary officer0.290.220.580.520.340.780.494.5959714.234194
43Q702269Q48352professionalhead of state0.300.270.610.520.040.490.335.1300804.503454
\n", - "
" - ], - "text/plain": [ - " Index g_qnode p_qnode q1_label q2_label complex \\\n", - "0 11 Q17221 Q189290 spokesperson military officer 0.25 \n", - "1 3 Q702269 Q2285706 professional head of government 0.29 \n", - "2 5 Q2285706 Q82955 head of government politician 0.36 \n", - "3 11 Q107711 Q189290 firefighter military officer 0.29 \n", - "4 3 Q702269 Q48352 professional head of state 0.30 \n", - "\n", - " transe text class node2vec-v0 H_3x6 H_5x8 bertLabelsSim bertV5EncSim \n", - "0 0.11 0.62 0.65 0.27 0.68 0.45 5.670399 4.803427 \n", - "1 0.39 0.59 0.57 0.13 0.47 0.29 4.471632 5.585540 \n", - "2 0.26 0.84 0.55 0.05 0.61 0.64 7.259848 6.529090 \n", - "3 0.22 0.58 0.52 0.34 0.78 0.49 4.595971 4.234194 \n", - "4 0.27 0.61 0.52 0.04 0.49 0.33 5.130080 4.503454 " - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "champion-waste", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "pretty-observation", - "metadata": {}, - "outputs": [], - "source": [ - "# stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV5EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "adverse-calculator", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV5EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "sexual-leone", - "metadata": {}, - "source": [ - "# Version 6 - DBPedia's short abstracts + labels vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "elder-refund", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q2855502Chief_of_policeQ2855502-wikipedia_sitelink-2cf037-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Chief_of_police248977.0<http://dbpedia.org/resource/Chief_of_police><http://www.w3.org/2000/01/rdf-schema#comment>A chief of police is the title given to an app...chief of police
Q107711FirefighterQ107711-wikipedia_sitelink-4a93a6-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Firefighter80424.0<http://dbpedia.org/resource/Firefighter><http://www.w3.org/2000/01/rdf-schema#comment>A firefighter (also known as a fireman or fire...firefighter
Q7188GovernmentQ7188-wikipedia_sitelink-481ab9-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Government5382.0<http://dbpedia.org/resource/Government><http://www.w3.org/2000/01/rdf-schema#comment>A government is the system or group of people ...government
Q16334295NaNNaNNaNNaNNaNNaNNaNgroup of humansgroup of humans
Q11499147NaNNaNNaNNaNNaNNaNNaNpolitical activistpolitical activist
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q2855502 Chief_of_police Q2855502-wikipedia_sitelink-2cf037-0 \n", - "Q107711 Firefighter Q107711-wikipedia_sitelink-4a93a6-0 \n", - "Q7188 Government Q7188-wikipedia_sitelink-481ab9-0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q2855502 wikipedia_sitelink http://en.wikipedia.org/wiki/Chief_of_police \n", - "Q107711 wikipedia_sitelink http://en.wikipedia.org/wiki/Firefighter \n", - "Q7188 wikipedia_sitelink http://en.wikipedia.org/wiki/Government \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q2855502 248977.0 \n", - "Q107711 80424.0 \n", - "Q7188 5382.0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q2855502 \n", - "Q107711 \n", - "Q7188 \n", - "Q16334295 NaN \n", - "Q11499147 NaN \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q2855502 A chief of police is the title given to an app... \n", - "Q107711 A firefighter (also known as a fireman or fire... \n", - "Q7188 A government is the system or group of people ... \n", - "Q16334295 group of humans \n", - "Q11499147 political activist \n", - "\n", - " node2_labelsDF \n", - "node1 \n", - "Q2855502 chief of police \n", - "Q107711 firefighter \n", - "Q7188 government \n", - "Q16334295 group of humans \n", - "Q11499147 political activist " - ] - }, - "execution_count": 88, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "inclusive-gender", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "31" - ] - }, - "execution_count": 89, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "dental-choice", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "understanding-insured", - "metadata": {}, - "outputs": [], - "source": [ - "def getAbsLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getAbsLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " maxVal = 0\n", - " for elem1 in [pT.strip().split('_')[-1] for pT in row['G_qnode'].split('|')]:\n", - " for elem2 in [pT.strip().split('_')[-1] for pT in row['P_qnode'].split('|')]:\n", - "# print(elem1)\n", - "# print(elem2)\n", - " if elem1 in encodingsMap and elem2 in encodingsMap:\n", - " maxVal = max(maxVal, cosine_similarity([encodingsMap[elem1]], [encodingsMap[elem2]]))\n", - " return maxVal" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "political-manufacturer", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.22603774070739746 s\n" - ] - } - ], - "source": [ - "bertV6Enc = getAbsLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV6EncMap = getAbsLabsMap(bertV6Enc)\n", - "bertV6EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV6EncMap, ))\n", - "wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - "wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV6EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "oriental-olympus", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 24, 0.0)" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV6EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "simplified-recipient", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IndexG_tokenP_tokenG_entityG_qnodeP_entityP_qnodetoken_mismatch_typeP_event_confidenceOriginal_Textcomplextransetextclassnode2vec-v0H_3x6H_5x8bertLabelsSimbertV6EncSim
01PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.spokespersonspokesperson_Q17221same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.520.420.7211704.817058
12PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.ministerminister_Q83307same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.790.730.8035067.783970
23PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalpositionprofessional_Q702269 | firefighter_Q107711 | s...same0.008333Why not be more accurate and state that those ...xNaNNaNNaNNaN0.540.420.7211705.585539
34Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.militarypersonnelmilitary personnel_Q47064same0.401134Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.700.440.5793805.473495
45Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.politicianpolitician_Q82955same0.099668Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.610.640.7313486.529088
\n", - "
" - ], - "text/plain": [ - " Index G_token P_token G_entity \\\n", - "0 1 Putin Putin per.politician.headofgovernment \n", - "1 2 Putin Putin per.politician.headofgovernment \n", - "2 3 Putin Putin per.politician.headofgovernment \n", - "3 4 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "4 5 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "\n", - " G_qnode \\\n", - "0 head_of_government_Q2285706 | head_of state_Q4... \n", - "1 head_of_government_Q2285706 | head_of state_Q4... \n", - "2 head_of_government_Q2285706 | head_of state_Q4... \n", - "3 head_of_government_Q2285706 | head_of state_Q4... \n", - "4 head_of_government_Q2285706 | head_of state_Q4... \n", - "\n", - " P_entity \\\n", - "0 per.professionalposition.spokesperson \n", - "1 per.professionalposition.minister \n", - "2 per.professionalposition \n", - "3 per.militarypersonnel \n", - "4 per.politician \n", - "\n", - " P_qnode token_mismatch_type \\\n", - "0 spokesperson_Q17221 same \n", - "1 minister_Q83307 same \n", - "2 professional_Q702269 | firefighter_Q107711 | s... same \n", - "3 military personnel_Q47064 same \n", - "4 politician_Q82955 same \n", - "\n", - " P_event_confidence Original_Text \\\n", - "0 0.016665 Why not be more accurate and state that those ... \n", - "1 0.016665 Why not be more accurate and state that those ... \n", - "2 0.008333 Why not be more accurate and state that those ... \n", - "3 0.401134 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "4 0.099668 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "\n", - " complex transe text class node2vec-v0 H_3x6 H_5x8 bertLabelsSim \\\n", - "0 x NaN NaN NaN NaN 0.52 0.42 0.721170 \n", - "1 x NaN NaN NaN NaN 0.79 0.73 0.803506 \n", - "2 x NaN NaN NaN NaN 0.54 0.42 0.721170 \n", - "3 x NaN NaN NaN NaN 0.70 0.44 0.579380 \n", - "4 x NaN NaN NaN NaN 0.61 0.64 0.731348 \n", - "\n", - " bertV6EncSim \n", - "0 4.817058 \n", - "1 7.783970 \n", - "2 5.585539 \n", - "3 5.473495 \n", - "4 6.529088 " - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "convenient-glory", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "split-doctor", - "metadata": {}, - "outputs": [], - "source": [ - "# stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "criminal-tragedy", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "certified-compact", - "metadata": {}, - "source": [ - "# Version 7 - 1st sentence + label vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "billion-southwest", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "id": "relevant-looking", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2['abstractFirstSent'] = wordsimQNodesListWAbstractsLabelsDF2.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "id": "based-duplicate", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDFabstractFirstSent
node1
Q2855502Chief_of_policeQ2855502-wikipedia_sitelink-2cf037-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Chief_of_police248977.0<http://dbpedia.org/resource/Chief_of_police><http://www.w3.org/2000/01/rdf-schema#comment>A chief of police is the title given to an app...chief of policeA chief of police is the title given to an app...
Q107711FirefighterQ107711-wikipedia_sitelink-4a93a6-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Firefighter80424.0<http://dbpedia.org/resource/Firefighter><http://www.w3.org/2000/01/rdf-schema#comment>A firefighter (also known as a fireman or fire...firefighterA firefighter (also known as a fireman or fire...
Q7188GovernmentQ7188-wikipedia_sitelink-481ab9-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Government5382.0<http://dbpedia.org/resource/Government><http://www.w3.org/2000/01/rdf-schema#comment>A government is the system or group of people ...governmentA government is the system or group of people ...
Q16334295NaNNaNNaNNaNNaNNaNNaNgroup of humansgroup of humansgroup of humans
Q11499147NaNNaNNaNNaNNaNNaNNaNpolitical activistpolitical activistpolitical activist
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q2855502 Chief_of_police Q2855502-wikipedia_sitelink-2cf037-0 \n", - "Q107711 Firefighter Q107711-wikipedia_sitelink-4a93a6-0 \n", - "Q7188 Government Q7188-wikipedia_sitelink-481ab9-0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q2855502 wikipedia_sitelink http://en.wikipedia.org/wiki/Chief_of_police \n", - "Q107711 wikipedia_sitelink http://en.wikipedia.org/wiki/Firefighter \n", - "Q7188 wikipedia_sitelink http://en.wikipedia.org/wiki/Government \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q2855502 248977.0 \n", - "Q107711 80424.0 \n", - "Q7188 5382.0 \n", - "Q16334295 NaN NaN \n", - "Q11499147 NaN NaN \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q2855502 \n", - "Q107711 \n", - "Q7188 \n", - "Q16334295 NaN \n", - "Q11499147 NaN \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q2855502 A chief of police is the title given to an app... \n", - "Q107711 A firefighter (also known as a fireman or fire... \n", - "Q7188 A government is the system or group of people ... \n", - "Q16334295 group of humans \n", - "Q11499147 political activist \n", - "\n", - " node2_labelsDF \\\n", - "node1 \n", - "Q2855502 chief of police \n", - "Q107711 firefighter \n", - "Q7188 government \n", - "Q16334295 group of humans \n", - "Q11499147 political activist \n", - "\n", - " abstractFirstSent \n", - "node1 \n", - "Q2855502 A chief of police is the title given to an app... \n", - "Q107711 A firefighter (also known as a fireman or fire... \n", - "Q7188 A government is the system or group of people ... \n", - "Q16334295 group of humans \n", - "Q11499147 political activist " - ] - }, - "execution_count": 106, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "starting-parcel", - "metadata": {}, - "outputs": [], - "source": [ - "def get1stSentLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstractFirstSent.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def get1stSentLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " maxVal = 0\n", - " for elem1 in [pT.strip().split('_')[-1] for pT in row['G_qnode'].split('|')]:\n", - " for elem2 in [pT.strip().split('_')[-1] for pT in row['P_qnode'].split('|')]:\n", - "# print(elem1)\n", - "# print(elem2)\n", - " if elem1 in encodingsMap and elem2 in encodingsMap:\n", - " maxVal = max(maxVal, cosine_similarity([encodingsMap[elem1]], [encodingsMap[elem2]]))\n", - " return maxVal" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "independent-consultancy", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.16777896881103516 s\n" - ] - } - ], - "source": [ - "bertV7Enc = get1stSentLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV7EncMap = get1stSentLabsMap(bertV7Enc)\n", - "bertV7EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV7EncMap, ))\n", - "wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - "wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV7EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "incomplete-dispute", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 24, 0.0)" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV7EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "pregnant-message", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IndexG_tokenP_tokenG_entityG_qnodeP_entityP_qnodetoken_mismatch_typeP_event_confidenceOriginal_Textcomplextransetextclassnode2vec-v0H_3x6H_5x8bertLabelsSimbertV6EncSimbertV7EncSim
01PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.spokespersonspokesperson_Q17221same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.520.420.7211704.8170586.096483
12PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.ministerminister_Q83307same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.790.730.8035067.7839707.349318
23PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalpositionprofessional_Q702269 | firefighter_Q107711 | s...same0.008333Why not be more accurate and state that those ...xNaNNaNNaNNaN0.540.420.7211705.5855396.096483
34Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.militarypersonnelmilitary personnel_Q47064same0.401134Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.700.440.5793805.4734956.397786
45Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.politicianpolitician_Q82955same0.099668Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.610.640.7313486.5290885.945703
\n", - "
" - ], - "text/plain": [ - " Index G_token P_token G_entity \\\n", - "0 1 Putin Putin per.politician.headofgovernment \n", - "1 2 Putin Putin per.politician.headofgovernment \n", - "2 3 Putin Putin per.politician.headofgovernment \n", - "3 4 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "4 5 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "\n", - " G_qnode \\\n", - "0 head_of_government_Q2285706 | head_of state_Q4... \n", - "1 head_of_government_Q2285706 | head_of state_Q4... \n", - "2 head_of_government_Q2285706 | head_of state_Q4... \n", - "3 head_of_government_Q2285706 | head_of state_Q4... \n", - "4 head_of_government_Q2285706 | head_of state_Q4... \n", - "\n", - " P_entity \\\n", - "0 per.professionalposition.spokesperson \n", - "1 per.professionalposition.minister \n", - "2 per.professionalposition \n", - "3 per.militarypersonnel \n", - "4 per.politician \n", - "\n", - " P_qnode token_mismatch_type \\\n", - "0 spokesperson_Q17221 same \n", - "1 minister_Q83307 same \n", - "2 professional_Q702269 | firefighter_Q107711 | s... same \n", - "3 military personnel_Q47064 same \n", - "4 politician_Q82955 same \n", - "\n", - " P_event_confidence Original_Text \\\n", - "0 0.016665 Why not be more accurate and state that those ... \n", - "1 0.016665 Why not be more accurate and state that those ... \n", - "2 0.008333 Why not be more accurate and state that those ... \n", - "3 0.401134 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "4 0.099668 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "\n", - " complex transe text class node2vec-v0 H_3x6 H_5x8 bertLabelsSim \\\n", - "0 x NaN NaN NaN NaN 0.52 0.42 0.721170 \n", - "1 x NaN NaN NaN NaN 0.79 0.73 0.803506 \n", - "2 x NaN NaN NaN NaN 0.54 0.42 0.721170 \n", - "3 x NaN NaN NaN NaN 0.70 0.44 0.579380 \n", - "4 x NaN NaN NaN NaN 0.61 0.64 0.731348 \n", - "\n", - " bertV6EncSim bertV7EncSim \n", - "0 4.817058 6.096483 \n", - "1 7.783970 7.349318 \n", - "2 5.585539 6.096483 \n", - "3 5.473495 6.397786 \n", - "4 6.529088 5.945703 " - ] - }, - "execution_count": 110, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "broke-oregon", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "recent-moment", - "metadata": {}, - "outputs": [], - "source": [ - "# stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "varying-prescription", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "accessible-serum", - "metadata": {}, - "source": [ - "# Version 8, 9, 10 - complex, transe, text, class" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "japanese-cattle", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['complex'] = wordsimDF.complex * 10\n", - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['transe'] = wordsimDF.transe * 10\n", - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['text'] = wordsimDF.text * 10\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['class'] = wordsimDF['class'] * 10\n" - ] - } - ], - "source": [ - "wordsimDF1['complex'] = wordsimDF.complex * 10\n", - "wordsimDF1['transe'] = wordsimDF.transe * 10\n", - "wordsimDF1['text'] = wordsimDF.text * 10\n", - "wordsimDF1['class'] = wordsimDF['class'] * 10" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "fitting-jamaica", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "educational-phoenix", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1 = wordsimDF1.fillna(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "bored-northwest", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1['bertLabelsSim'] /= 10\n", - "wordsimDF1['bertV5EncSim'] /= 10\n", - "wordsimDF1['bertV6EncSim'] /= 10\n", - "wordsimDF1['bertV7EncSim'] /= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "classical-bandwidth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IndexG_tokenP_tokenG_entityG_qnodeP_entityP_qnodetoken_mismatch_typeP_event_confidenceOriginal_Textcomplextransetextclassnode2vec-v0H_3x6H_5x8bertLabelsSim
01PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.spokespersonspokesperson_Q17221same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.520.420
12PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.ministerminister_Q83307same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.790.730
23PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalpositionprofessional_Q702269 | firefighter_Q107711 | s...same0.008333Why not be more accurate and state that those ...xNaNNaNNaNNaN0.540.420
34Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.militarypersonnelmilitary personnel_Q47064same0.401134Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.700.440
45Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.politicianpolitician_Q82955same0.099668Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.610.640
\n", - "
" - ], - "text/plain": [ - " Index G_token P_token G_entity \\\n", - "0 1 Putin Putin per.politician.headofgovernment \n", - "1 2 Putin Putin per.politician.headofgovernment \n", - "2 3 Putin Putin per.politician.headofgovernment \n", - "3 4 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "4 5 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "\n", - " G_qnode \\\n", - "0 head_of_government_Q2285706 | head_of state_Q4... \n", - "1 head_of_government_Q2285706 | head_of state_Q4... \n", - "2 head_of_government_Q2285706 | head_of state_Q4... \n", - "3 head_of_government_Q2285706 | head_of state_Q4... \n", - "4 head_of_government_Q2285706 | head_of state_Q4... \n", - "\n", - " P_entity \\\n", - "0 per.professionalposition.spokesperson \n", - "1 per.professionalposition.minister \n", - "2 per.professionalposition \n", - "3 per.militarypersonnel \n", - "4 per.politician \n", - "\n", - " P_qnode token_mismatch_type \\\n", - "0 spokesperson_Q17221 same \n", - "1 minister_Q83307 same \n", - "2 professional_Q702269 | firefighter_Q107711 | s... same \n", - "3 military personnel_Q47064 same \n", - "4 politician_Q82955 same \n", - "\n", - " P_event_confidence Original_Text \\\n", - "0 0.016665 Why not be more accurate and state that those ... \n", - "1 0.016665 Why not be more accurate and state that those ... \n", - "2 0.008333 Why not be more accurate and state that those ... \n", - "3 0.401134 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "4 0.099668 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "\n", - " complex transe text class node2vec-v0 H_3x6 H_5x8 bertLabelsSim \n", - "0 x NaN NaN NaN NaN 0.52 0.42 0 \n", - "1 x NaN NaN NaN NaN 0.79 0.73 0 \n", - "2 x NaN NaN NaN NaN 0.54 0.42 0 \n", - "3 x NaN NaN NaN NaN 0.70 0.44 0 \n", - "4 x NaN NaN NaN NaN 0.61 0.64 0 " - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "id": "powered-excess", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1.to_csv('../data/SimIP_new_max_OP.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "amazing-expense", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSimbertV7EncSimcomplextransetextclass
count349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000
mean4.0527356.3611625.5098275.6001053.2721643.7335674.6559974.4642474.2869583.4385955.5786971.937397
std2.0449711.6012042.0151741.9959422.7369182.9126492.2797422.0775331.6451632.0334672.0215482.753170
min0.3125000.0000000.0000000.0000000.0000000.000000-0.483480-0.5267450.000000-1.4366330.0000000.000000
25%2.3750005.3043734.5482044.7396250.0000000.0000003.0156423.1203103.3177982.1516624.6264980.145023
50%3.9375006.4615155.5975135.7874253.4638574.4370844.7742734.2067564.1716863.2401095.7677450.639914
75%5.3750007.3997606.7358636.7444765.1833375.9991696.2186095.6755794.9960304.7319906.8129772.350565
max10.00000010.00000210.00000010.00000010.00000210.00000110.00000110.00000210.00000010.00000010.00000010.000000
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "count 349.000000 349.000000 349.000000 349.000000 349.000000 \n", - "mean 4.052735 6.361162 5.509827 5.600105 3.272164 \n", - "std 2.044971 1.601204 2.015174 1.995942 2.736918 \n", - "min 0.312500 0.000000 0.000000 0.000000 0.000000 \n", - "25% 2.375000 5.304373 4.548204 4.739625 0.000000 \n", - "50% 3.937500 6.461515 5.597513 5.787425 3.463857 \n", - "75% 5.375000 7.399760 6.735863 6.744476 5.183337 \n", - "max 10.000000 10.000002 10.000000 10.000000 10.000002 \n", - "\n", - " bertV5EncSim bertV6EncSim bertV7EncSim complex transe \\\n", - "count 349.000000 349.000000 349.000000 349.000000 349.000000 \n", - "mean 3.733567 4.655997 4.464247 4.286958 3.438595 \n", - "std 2.912649 2.279742 2.077533 1.645163 2.033467 \n", - "min 0.000000 -0.483480 -0.526745 0.000000 -1.436633 \n", - "25% 0.000000 3.015642 3.120310 3.317798 2.151662 \n", - "50% 4.437084 4.774273 4.206756 4.171686 3.240109 \n", - "75% 5.999169 6.218609 5.675579 4.996030 4.731990 \n", - "max 10.000001 10.000001 10.000002 10.000000 10.000000 \n", - "\n", - " text class \n", - "count 349.000000 349.000000 \n", - "mean 5.578697 1.937397 \n", - "std 2.021548 2.753170 \n", - "min 0.000000 0.000000 \n", - "25% 4.626498 0.145023 \n", - "50% 5.767745 0.639914 \n", - "75% 6.812977 2.350565 \n", - "max 10.000000 10.000000 " - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "headed-reality", - "metadata": {}, - "source": [ - "# Agreement Matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "typical-highland", - "metadata": {}, - "outputs": [], - "source": [ - "versionNames = ['bertLabelsSim', 'amanSim', 'wikiV3EncSim', 'bertV4EncSim', 'bertV5EncSim', 'bertV6EncSim', 'bertV7EncSim', 'complex', 'transe', 'text', 'class']" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "irish-yesterday", - "metadata": {}, - "outputs": [], - "source": [ - "kendallAM = []\n", - "spearmanAM = []\n", - "for ver in versionNames:\n", - " kAMTemp = []\n", - " sAMTemp = []\n", - " for ver2 in versionNames:\n", - " kAMTemp.append(stats.kendalltau(wordsimDF1[ver], wordsimDF1[ver2]).correlation)\n", - " sAMTemp.append(stats.spearmanr(wordsimDF1[ver], wordsimDF1[ver2]).correlation)\n", - " kendallAM.append(kAMTemp)\n", - " spearmanAM.append(sAMTemp)" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "massive-optimum", - "metadata": {}, - "outputs": [], - "source": [ - "kendallAMDF = pd.DataFrame(kendallAM, columns=['Version '+str(i+1) for i in range(len(versionNames))], index=['Version '+str(i+1) for i in range(len(versionNames))])" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "higher-shirt", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Version 1Version 2Version 3Version 4Version 5Version 6Version 7Version 8Version 9Version 10Version 11
Version 11.0000000.4120890.3835230.1605670.1464980.2870180.3836730.2089110.2099330.4004000.174948
Version 20.4120891.0000000.8389470.2968930.2662320.3692770.4585660.3092170.2478390.9123770.238586
Version 30.3835230.8389471.0000000.2753860.2505810.3512520.4298530.3042720.2490970.8398940.235619
Version 40.1605670.2968930.2753861.0000000.8205040.6117400.6198860.2296700.1355320.2994090.259318
Version 50.1464980.2662320.2505810.8205041.0000000.7821500.4495130.2463730.1433460.2694720.248043
Version 60.2870180.3692770.3512520.6117400.7821501.0000000.6505650.2651990.2016920.3680890.220891
Version 70.3836730.4585660.4298530.6198860.4495130.6505651.0000000.2600210.2398190.4533710.241190
Version 80.2089110.3092170.3042720.2296700.2463730.2651990.2600211.0000000.4476560.3095830.334855
Version 90.2099330.2478390.2490970.1355320.1433460.2016920.2398190.4476561.0000000.2445930.255377
Version 100.4004000.9123770.8398940.2994090.2694720.3680890.4533710.3095830.2445931.0000000.232037
Version 110.1749480.2385860.2356190.2593180.2480430.2208910.2411900.3348550.2553770.2320371.000000
\n", - "
" - ], - "text/plain": [ - " Version 1 Version 2 Version 3 Version 4 Version 5 Version 6 \\\n", - "Version 1 1.000000 0.412089 0.383523 0.160567 0.146498 0.287018 \n", - "Version 2 0.412089 1.000000 0.838947 0.296893 0.266232 0.369277 \n", - "Version 3 0.383523 0.838947 1.000000 0.275386 0.250581 0.351252 \n", - "Version 4 0.160567 0.296893 0.275386 1.000000 0.820504 0.611740 \n", - "Version 5 0.146498 0.266232 0.250581 0.820504 1.000000 0.782150 \n", - "Version 6 0.287018 0.369277 0.351252 0.611740 0.782150 1.000000 \n", - "Version 7 0.383673 0.458566 0.429853 0.619886 0.449513 0.650565 \n", - "Version 8 0.208911 0.309217 0.304272 0.229670 0.246373 0.265199 \n", - "Version 9 0.209933 0.247839 0.249097 0.135532 0.143346 0.201692 \n", - "Version 10 0.400400 0.912377 0.839894 0.299409 0.269472 0.368089 \n", - "Version 11 0.174948 0.238586 0.235619 0.259318 0.248043 0.220891 \n", - "\n", - " Version 7 Version 8 Version 9 Version 10 Version 11 \n", - "Version 1 0.383673 0.208911 0.209933 0.400400 0.174948 \n", - "Version 2 0.458566 0.309217 0.247839 0.912377 0.238586 \n", - "Version 3 0.429853 0.304272 0.249097 0.839894 0.235619 \n", - "Version 4 0.619886 0.229670 0.135532 0.299409 0.259318 \n", - "Version 5 0.449513 0.246373 0.143346 0.269472 0.248043 \n", - "Version 6 0.650565 0.265199 0.201692 0.368089 0.220891 \n", - "Version 7 1.000000 0.260021 0.239819 0.453371 0.241190 \n", - "Version 8 0.260021 1.000000 0.447656 0.309583 0.334855 \n", - "Version 9 0.239819 0.447656 1.000000 0.244593 0.255377 \n", - "Version 10 0.453371 0.309583 0.244593 1.000000 0.232037 \n", - "Version 11 0.241190 0.334855 0.255377 0.232037 1.000000 " - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "kendallAMDF" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "distant-level", - "metadata": {}, - "outputs": [], - "source": [ - "spearmanAMDF = pd.DataFrame(spearmanAM, columns=['Version '+str(i+1) for i in range(len(versionNames))], index=['Version '+str(i+1) for i in range(len(versionNames))])" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "skilled-battery", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Version 1Version 2Version 3Version 4Version 5Version 6Version 7Version 8Version 9Version 10Version 11
Version 11.0000000.5764250.5394160.2137440.1920740.4001620.5329500.3019240.3054900.5636280.253590
Version 20.5764251.0000000.9590020.3923780.3509080.5158530.6286260.4403260.3523660.9859720.339260
Version 30.5394160.9590021.0000000.3711060.3370870.4937460.5962810.4307920.3529820.9591310.336037
Version 40.2137440.3923780.3711061.0000000.9465270.7335770.6282220.3250080.1891240.3993800.355801
Version 50.1920740.3509080.3370870.9465271.0000000.7931770.5562560.3437650.2033960.3566450.343931
Version 60.4001620.5158530.4937460.7335770.7931771.0000000.8299590.3810970.2987560.5130840.321041
Version 70.5329500.6286260.5962810.6282220.5562560.8299591.0000000.3734460.3479570.6240480.345162
Version 80.3019240.4403260.4307920.3250080.3437650.3810970.3734461.0000000.6190560.4391020.477997
Version 90.3054900.3523660.3529820.1891240.2033960.2987560.3479570.6190561.0000000.3467780.364509
Version 100.5636280.9859720.9591310.3993800.3566450.5130840.6240480.4391020.3467781.0000000.333301
Version 110.2535900.3392600.3360370.3558010.3439310.3210410.3451620.4779970.3645090.3333011.000000
\n", - "
" - ], - "text/plain": [ - " Version 1 Version 2 Version 3 Version 4 Version 5 Version 6 \\\n", - "Version 1 1.000000 0.576425 0.539416 0.213744 0.192074 0.400162 \n", - "Version 2 0.576425 1.000000 0.959002 0.392378 0.350908 0.515853 \n", - "Version 3 0.539416 0.959002 1.000000 0.371106 0.337087 0.493746 \n", - "Version 4 0.213744 0.392378 0.371106 1.000000 0.946527 0.733577 \n", - "Version 5 0.192074 0.350908 0.337087 0.946527 1.000000 0.793177 \n", - "Version 6 0.400162 0.515853 0.493746 0.733577 0.793177 1.000000 \n", - "Version 7 0.532950 0.628626 0.596281 0.628222 0.556256 0.829959 \n", - "Version 8 0.301924 0.440326 0.430792 0.325008 0.343765 0.381097 \n", - "Version 9 0.305490 0.352366 0.352982 0.189124 0.203396 0.298756 \n", - "Version 10 0.563628 0.985972 0.959131 0.399380 0.356645 0.513084 \n", - "Version 11 0.253590 0.339260 0.336037 0.355801 0.343931 0.321041 \n", - "\n", - " Version 7 Version 8 Version 9 Version 10 Version 11 \n", - "Version 1 0.532950 0.301924 0.305490 0.563628 0.253590 \n", - "Version 2 0.628626 0.440326 0.352366 0.985972 0.339260 \n", - "Version 3 0.596281 0.430792 0.352982 0.959131 0.336037 \n", - "Version 4 0.628222 0.325008 0.189124 0.399380 0.355801 \n", - "Version 5 0.556256 0.343765 0.203396 0.356645 0.343931 \n", - "Version 6 0.829959 0.381097 0.298756 0.513084 0.321041 \n", - "Version 7 1.000000 0.373446 0.347957 0.624048 0.345162 \n", - "Version 8 0.373446 1.000000 0.619056 0.439102 0.477997 \n", - "Version 9 0.347957 0.619056 1.000000 0.346778 0.364509 \n", - "Version 10 0.624048 0.439102 0.346778 1.000000 0.333301 \n", - "Version 11 0.345162 0.477997 0.364509 0.333301 1.000000 " - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spearmanAMDF" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "indoor-coordinator", - "metadata": {}, - "outputs": [], - "source": [ - "kendallAMDF.to_csv('../data/kendallAMDF.csv')\n", - "spearmanAMDF.to_csv('../data/spearmanAMDF.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "innocent-prerequisite", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "active-leisure", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "boolean-impossible", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "suitable-brazil", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "desirable-collect", - "metadata": {}, - "outputs": [], - "source": [ - "for ver in versionNames:\n", - " wordsimDF[ver] = wordsimDF1[ver]" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "flexible-fifth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclassbertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSimbertV7EncSim
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53603.6111544.4663244.8565290.0000006.8096724.9497385.1456013.7705484.2686334.2686333.770548
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12503.0216352.7438834.7931350.0585114.5548774.8182313.9870474.1680403.3992173.3992174.168040
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62506.9446184.2928946.2678413.9365717.6438156.4070515.6696314.9972176.8657826.8657824.997217
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06253.2482493.7907676.1864422.0881257.1948996.1864976.1864970.0000000.0000002.9617555.296330
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18753.6121443.6038348.6384588.8862118.1378798.5566649.0984080.0000000.0000003.4081125.621890
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class bertLabelsSim \\\n", - "0 5.5360 3.611154 4.466324 4.856529 0.000000 6.809672 \n", - "1 4.1250 3.021635 2.743883 4.793135 0.058511 4.554877 \n", - "2 6.6250 6.944618 4.292894 6.267841 3.936571 7.643815 \n", - "3 2.0625 3.248249 3.790767 6.186442 2.088125 7.194899 \n", - "4 7.1875 3.612144 3.603834 8.638458 8.886211 8.137879 \n", - "\n", - " amanSim wikiV3EncSim bertV4EncSim bertV5EncSim bertV6EncSim \\\n", - "0 4.949738 5.145601 3.770548 4.268633 4.268633 \n", - "1 4.818231 3.987047 4.168040 3.399217 3.399217 \n", - "2 6.407051 5.669631 4.997217 6.865782 6.865782 \n", - "3 6.186497 6.186497 0.000000 0.000000 2.961755 \n", - "4 8.556664 9.098408 0.000000 0.000000 3.408112 \n", - "\n", - " bertV7EncSim \n", - "0 3.770548 \n", - "1 4.168040 \n", - "2 4.997217 \n", - "3 5.296330 \n", - "4 5.621890 " - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "ambient-netherlands", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF.to_csv('../data/wordsim_updated.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "tested-screening", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "assigned-identifier", - "metadata": {}, - "source": [ - "# Part 2 - Pedro's updated file" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "casual-research", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDFNew = pd.read_csv('../data/SimIP_new.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "capable-brisbane", - "metadata": {}, - "outputs": [], - "source": [ - "list(set(wordsimDFNew['G_qnode'].to_list() + wordsimDFNew['P_qnode'].to_list()))" - ] - }, - { - "cell_type": "markdown", - "id": "valid-agriculture", - "metadata": {}, - "source": [ - "# Version 1 - Embeddings of Labels" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "worst-posting", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "quick-asbestos", - "metadata": {}, - "outputs": [], - "source": [ - "def getV1Embeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.node2_labelsDF.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['G_qnode'] in encodingsMap and row['P_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['G_qnode']]], [encodingsMap[row['P_qnode']]])\n", - " else:\n", - " return 0\n", - "\n", - "def getCoverage(row, encodingsMap):\n", - " if row['G_qnode'] in encodingsMap and row['P_qnode'] in encodingsMap:\n", - " return 1\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "democratic-assignment", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4.580217361450195 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertLabelsEnc = getV1Embeddings('bert-base-nli-mean-tokens')\n", - "bertLabelsEncMap = getMap(bertLabelsEnc)\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertLabelsSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "extraordinary-motivation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertLabelsEncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "recovered-assignment", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.25719783185089823, pvalue=9.11953585838357e-13)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "southern-berry", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.37036443456409784, pvalue=8.677074016866423e-13)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "public-arizona", - "metadata": {}, - "source": [ - "# Version 6 - DBPedia's short abstracts + labels vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "breathing-bennett", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNschool holidayschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...flood
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...money
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radio
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergency
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \n", - "node1 \n", - "Q1514190 school holiday school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency " - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "communist-destination", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "cardiac-coral", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "original-combat", - "metadata": {}, - "outputs": [], - "source": [ - "def getAbsLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getAbsLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['G_qnode'] in encodingsMap and row['P_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['G_qnode']]], [encodingsMap[row['P_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "fossil-blame", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.902165412902832 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV6Enc = getAbsLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV6EncMap = getAbsLabsMap(bertV6Enc)\n", - "bertV6EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV6EncMap, ))\n", - "wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - "wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV6EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "touched-response", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV6EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "senior-chase", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSim
05.53606.8096724.9497385.1456013.7705484.2686334.268633
14.12504.5548774.8182313.9870474.1680403.3992173.399217
26.62507.6438156.4070515.6696314.9972176.8657826.865782
32.06257.1948996.1864976.1864970.0000000.0000002.961755
47.18758.1378798.5566649.0984080.0000000.0000003.408112
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548 \n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040 \n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217 \n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000 \n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000 \n", - "\n", - " bertV5EncSim bertV6EncSim \n", - "0 4.268633 4.268633 \n", - "1 3.399217 3.399217 \n", - "2 6.865782 6.865782 \n", - "3 0.000000 2.961755 \n", - "4 0.000000 3.408112 " - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "considerable-assignment", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "cutting-floor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37975882843235137, pvalue=5.235465664921023e-26)" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "centered-chosen", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5388523544692222, pvalue=1.1269721214604893e-27)" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "unable-humor", - "metadata": {}, - "source": [ - "# Version 7 - 1st sentence + label vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "quarterly-amendment", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "latest-fountain", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2['abstractFirstSent'] = wordsimQNodesListWAbstractsLabelsDF2.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "experienced-uganda", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDFabstractFirstSent
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNschool holidayschool holidayschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...floodA flood is an overflow of water that submerges...
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...moneyMoney is any item or verifiable record that is...
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radioRadio is the technology of signaling and commu...
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergencyAn emergency is a situation that poses an imme...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \\\n", - "node1 \n", - "Q1514190 school holiday school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency \n", - "\n", - " abstractFirstSent \n", - "node1 \n", - "Q1514190 school holiday \n", - "Q8068 A flood is an overflow of water that submerges... \n", - "Q1368 Money is any item or verifiable record that is... \n", - "Q872 Radio is the technology of signaling and commu... \n", - "Q5070802 An emergency is a situation that poses an imme... " - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "adequate-stocks", - "metadata": {}, - "outputs": [], - "source": [ - "def get1stSentLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstractFirstSent.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def get1stSentLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['G_qnode'] in encodingsMap and row['P_qnode'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['G_qnode']]], [encodingsMap[row['P_qnode']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "static-partition", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.48781871795654297 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV7Enc = get1stSentLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV7EncMap = get1stSentLabsMap(bertV7Enc)\n", - "bertV7EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV7EncMap, ))\n", - "wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - "wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV7EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "approved-sharp", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV7EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "banner-techno", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IndexG_tokenP_tokenG_entityG_qnodeP_entityP_qnodetoken_mismatch_typeP_event_confidenceOriginal_Textcomplextransetextclassnode2vec-v0H_3x6H_5x8bertLabelsSim
01PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.spokespersonspokesperson_Q17221same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.520.420
12PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalposition.ministerminister_Q83307same0.016665Why not be more accurate and state that those ...xNaNNaNNaNNaN0.790.730
23PutinPutinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.professionalpositionprofessional_Q702269 | firefighter_Q107711 | s...same0.008333Why not be more accurate and state that those ...xNaNNaNNaNNaN0.540.420
34Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.militarypersonnelmilitary personnel_Q47064same0.401134Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.700.440
45Vladimir PutinVladimir Putinper.politician.headofgovernmenthead_of_government_Q2285706 | head_of state_Q4...per.politicianpolitician_Q82955same0.099668Their leader, Vyacheslav Ponomaryov, a soap ma...xNaNNaNNaNNaN0.610.640
\n", - "
" - ], - "text/plain": [ - " Index G_token P_token G_entity \\\n", - "0 1 Putin Putin per.politician.headofgovernment \n", - "1 2 Putin Putin per.politician.headofgovernment \n", - "2 3 Putin Putin per.politician.headofgovernment \n", - "3 4 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "4 5 Vladimir Putin Vladimir Putin per.politician.headofgovernment \n", - "\n", - " G_qnode \\\n", - "0 head_of_government_Q2285706 | head_of state_Q4... \n", - "1 head_of_government_Q2285706 | head_of state_Q4... \n", - "2 head_of_government_Q2285706 | head_of state_Q4... \n", - "3 head_of_government_Q2285706 | head_of state_Q4... \n", - "4 head_of_government_Q2285706 | head_of state_Q4... \n", - "\n", - " P_entity \\\n", - "0 per.professionalposition.spokesperson \n", - "1 per.professionalposition.minister \n", - "2 per.professionalposition \n", - "3 per.militarypersonnel \n", - "4 per.politician \n", - "\n", - " P_qnode token_mismatch_type \\\n", - "0 spokesperson_Q17221 same \n", - "1 minister_Q83307 same \n", - "2 professional_Q702269 | firefighter_Q107711 | s... same \n", - "3 military personnel_Q47064 same \n", - "4 politician_Q82955 same \n", - "\n", - " P_event_confidence Original_Text \\\n", - "0 0.016665 Why not be more accurate and state that those ... \n", - "1 0.016665 Why not be more accurate and state that those ... \n", - "2 0.008333 Why not be more accurate and state that those ... \n", - "3 0.401134 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "4 0.099668 Their leader, Vyacheslav Ponomaryov, a soap ma... \n", - "\n", - " complex transe text class node2vec-v0 H_3x6 H_5x8 bertLabelsSim \n", - "0 x NaN NaN NaN NaN 0.52 0.42 0 \n", - "1 x NaN NaN NaN NaN 0.79 0.73 0 \n", - "2 x NaN NaN NaN NaN 0.54 0.42 0 \n", - "3 x NaN NaN NaN NaN 0.70 0.44 0 \n", - "4 x NaN NaN NaN NaN 0.61 0.64 0 " - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "aggregate-lighter", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "functioning-donor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3793557735858387, pvalue=5.886665529373508e-26)" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "adjusted-commission", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5330950015966213, pvalue=5.11634460488722e-27)" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "presidential-penetration", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "after-reward", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "outer-symposium", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "165px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Similarity Work.ipynb b/Similarity Work.ipynb deleted file mode 100644 index 67f4860..0000000 --- a/Similarity Work.ipynb +++ /dev/null @@ -1,9864 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "protecting-craft", - "metadata": {}, - "source": [ - "Downloaded dataset from [DBPedia Short Abstracts - 2020.07.01](https://downloads.dbpedia.org/repo/dbpedia/text/short-abstracts/2020.07.01/short-abstracts_lang=en.ttl.bz2)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "indirect-kingdom", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm.notebook import tqdm\n", - "import pandas as pd\n", - "from time import time" - ] - }, - { - "cell_type": "markdown", - "id": "elder-russian", - "metadata": {}, - "source": [ - "# Process and format DBPedia dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "characteristic-orientation", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c3db8345a6c34dbe8f54427985216b25", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cnt = 0\n", - "\n", - "p1s = []\n", - "p11s = []\n", - "p2s = []\n", - "lines = []\n", - "with open(\"../data/short-abstracts_lang=en.ttl\", 'r', encoding='utf-8') as f:\n", - " for line in tqdm(f):\n", - " p1 = line[:line.find(\" \")]\n", - "# p11 = p1.split(\"/\")[-1][:-1]\n", - " p11 = p1[len(\"\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ignoreurlignore2abstract
node1
NaN0#startedNaN
Animalia_(book)1<http://dbpedia.org/resource/Animalia_(book)><http://www.w3.org/2000/01/rdf-schema#comment>Animalia is an illustrated children's book by ...
Agricultural_science2<http://dbpedia.org/resource/Agricultural_scie...<http://www.w3.org/2000/01/rdf-schema#comment>Agricultural science is a broad multidisciplin...
Albedo3<http://dbpedia.org/resource/Albedo><http://www.w3.org/2000/01/rdf-schema#comment>Albedo () (Latin: albedo, meaning 'whiteness')...
Alain_Connes4<http://dbpedia.org/resource/Alain_Connes><http://www.w3.org/2000/01/rdf-schema#comment>Alain Connes (French: [alɛ̃ kɔn]; born 1 April...
\n", - "" - ], - "text/plain": [ - " ignore \\\n", - "node1 \n", - "NaN 0 \n", - "Animalia_(book) 1 \n", - "Agricultural_science 2 \n", - "Albedo 3 \n", - "Alain_Connes 4 \n", - "\n", - " url \\\n", - "node1 \n", - "NaN # \n", - "Animalia_(book) \n", - "Agricultural_science \n", - "Alain_Connes \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "NaN started \n", - "Animalia_(book) \n", - "Agricultural_science \n", - "Albedo \n", - "Alain_Connes \n", - "\n", - " abstract \n", - "node1 \n", - "NaN NaN \n", - "Animalia_(book) Animalia is an illustrated children's book by ... \n", - "Agricultural_science Agricultural science is a broad multidisciplin... \n", - "Albedo Albedo () (Latin: albedo, meaning 'whiteness')... \n", - "Alain_Connes Alain Connes (French: [alɛ̃ kɔn]; born 1 April... " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "specified-emission", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ignoreurlignore2abstract
node1
NaN0#startedNaN
\n", - "
" - ], - "text/plain": [ - " ignore url ignore2 abstract\n", - "node1 \n", - "NaN 0 # started NaN" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1[df1.url.apply(lambda p: 'http://dbpedia.org/resource' not in p)]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "streaming-watch", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DBPedia dataset has 5732949 records with unique 5732947 index values\n" - ] - } - ], - "source": [ - "print(f\"DBPedia dataset has {len(df1)} records with unique {df1.index.nunique()} index values\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "clean-brook", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ignoreurlignore2abstract
node1
NaN0#startedNaN
NaN23399<http://dbpedia.org/resource/NaN><http://www.w3.org/2000/01/rdf-schema#comment>In computing, NaN, standing for Not a Number, ...
\n", - "
" - ], - "text/plain": [ - " ignore url \\\n", - "node1 \n", - "NaN 0 # \n", - "NaN 23399 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "NaN started \n", - "NaN \n", - "\n", - " abstract \n", - "node1 \n", - "NaN NaN \n", - "NaN In computing, NaN, standing for Not a Number, ... " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1.loc[df1[df1.index.duplicated()].index]" - ] - }, - { - "cell_type": "markdown", - "id": "residential-bunch", - "metadata": {}, - "source": [ - "There are many duplicate element names with different abstracts. For example, 390 corresponds to year 390, ibm 390 systemss." - ] - }, - { - "cell_type": "markdown", - "id": "whole-retirement", - "metadata": {}, - "source": [ - "# Wikidata Sitelinks" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "usual-albuquerque", - "metadata": {}, - "outputs": [], - "source": [ - "sitelinksDF = pd.read_csv(\"../data/sitelinks.en.tsv.gz\", sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "classical-tamil", - "metadata": {}, - "outputs": [], - "source": [ - "sitelinksDF['trimmedNode2'] = sitelinksDF.node2.apply(lambda p: p.split(\"/\")[-1] if p.split(\"/\")[-1] != '' else p.split(\"/\")[-2])" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "undefined-gospel", - "metadata": {}, - "outputs": [], - "source": [ - "sitelinksDF1 = sitelinksDF[sitelinksDF.label == 'wikipedia_sitelink']" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "backed-criminal", - "metadata": {}, - "outputs": [], - "source": [ - "sitelinksDF2 = sitelinksDF1.set_index('trimmedNode2')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "armed-gardening", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2
trimmedNode2
UniverseQ1-wikipedia_sitelink-5e459a-0Q1wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Universe
BostonQ100-wikipedia_sitelink-c612f2-0Q100wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Boston
GabonQ1000-wikipedia_sitelink-b7f1ee-0Q1000wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Gabon
Dutch_WikipediaQ10000-wikipedia_sitelink-16adbd-0Q10000wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Dutch_Wikipedia
Cadier_en_KeerQ100000-wikipedia_sitelink-d81a0a-0Q100000wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Cadier_en_Keer
\n", - "
" - ], - "text/plain": [ - " id node1 \\\n", - "trimmedNode2 \n", - "Universe Q1-wikipedia_sitelink-5e459a-0 Q1 \n", - "Boston Q100-wikipedia_sitelink-c612f2-0 Q100 \n", - "Gabon Q1000-wikipedia_sitelink-b7f1ee-0 Q1000 \n", - "Dutch_Wikipedia Q10000-wikipedia_sitelink-16adbd-0 Q10000 \n", - "Cadier_en_Keer Q100000-wikipedia_sitelink-d81a0a-0 Q100000 \n", - "\n", - " label \\\n", - "trimmedNode2 \n", - "Universe wikipedia_sitelink \n", - "Boston wikipedia_sitelink \n", - "Gabon wikipedia_sitelink \n", - "Dutch_Wikipedia wikipedia_sitelink \n", - "Cadier_en_Keer wikipedia_sitelink \n", - "\n", - " node2 \n", - "trimmedNode2 \n", - "Universe http://en.wikipedia.org/wiki/Universe \n", - "Boston http://en.wikipedia.org/wiki/Boston \n", - "Gabon http://en.wikipedia.org/wiki/Gabon \n", - "Dutch_Wikipedia http://en.wikipedia.org/wiki/Dutch_Wikipedia \n", - "Cadier_en_Keer http://en.wikipedia.org/wiki/Cadier_en_Keer " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sitelinksDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "thousand-marriage", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "There are 8472828 sitelinks present in the dataset corresponding to 8472828 unique node1s (Qxxx), 8401883 unique labels (text)\n" - ] - } - ], - "source": [ - "print(f\"There are {len(sitelinksDF2)} sitelinks present in the dataset corresponding to {sitelinksDF2.node1.nunique()} unique node1s (Qxxx), {sitelinksDF2.index.nunique()} unique labels (text)\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "alpha-sport", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2
trimmedNode2
A-2_(Michigan_county_highway)Q100149995-wikipedia_sitelink-029972-0Q100149995wikipedia_sitelinkhttp://en.wikipedia.org/wiki/A-2_(Michigan_cou...
A-2_(Michigan_county_highway)Q100150013-wikipedia_sitelink-14ff5e-0Q100150013wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Attached...
colorQ100231096-wikipedia_sitelink-832b42-0Q100231096wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Communis...
colorQ100231099-wikipedia_sitelink-f5327d-0Q100231099wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Movement...
colorQ100231125-wikipedia_sitelink-b3524d-0Q100231125wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Serbian_...
...............
New_Hampshire_Route_47Q999979-wikipedia_sitelink-069c8c-0Q999979wikipedia_sitelinkhttp://en.wikipedia.org/wiki/New_Hampshire_Rou...
New_Hampshire_Route_12Q26346274-wikipedia_sitelink-bd20c7-0Q26346274wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Attached...
New_Hampshire_Route_12Q999984-wikipedia_sitelink-d64e95-0Q999984wikipedia_sitelinkhttp://en.wikipedia.org/wiki/New_Hampshire_Rou...
New_Hampshire_Route_13Q26346384-wikipedia_sitelink-61fe02-0Q26346384wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Template:Attached...
New_Hampshire_Route_13Q999992-wikipedia_sitelink-025e0c-0Q999992wikipedia_sitelinkhttp://en.wikipedia.org/wiki/New_Hampshire_Rou...
\n", - "

22572010 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " id \\\n", - "trimmedNode2 \n", - "A-2_(Michigan_county_highway) Q100149995-wikipedia_sitelink-029972-0 \n", - "A-2_(Michigan_county_highway) Q100150013-wikipedia_sitelink-14ff5e-0 \n", - "color Q100231096-wikipedia_sitelink-832b42-0 \n", - "color Q100231099-wikipedia_sitelink-f5327d-0 \n", - "color Q100231125-wikipedia_sitelink-b3524d-0 \n", - "... ... \n", - "New_Hampshire_Route_47 Q999979-wikipedia_sitelink-069c8c-0 \n", - "New_Hampshire_Route_12 Q26346274-wikipedia_sitelink-bd20c7-0 \n", - "New_Hampshire_Route_12 Q999984-wikipedia_sitelink-d64e95-0 \n", - "New_Hampshire_Route_13 Q26346384-wikipedia_sitelink-61fe02-0 \n", - "New_Hampshire_Route_13 Q999992-wikipedia_sitelink-025e0c-0 \n", - "\n", - " node1 label \\\n", - "trimmedNode2 \n", - "A-2_(Michigan_county_highway) Q100149995 wikipedia_sitelink \n", - "A-2_(Michigan_county_highway) Q100150013 wikipedia_sitelink \n", - "color Q100231096 wikipedia_sitelink \n", - "color Q100231099 wikipedia_sitelink \n", - "color Q100231125 wikipedia_sitelink \n", - "... ... ... \n", - "New_Hampshire_Route_47 Q999979 wikipedia_sitelink \n", - "New_Hampshire_Route_12 Q26346274 wikipedia_sitelink \n", - "New_Hampshire_Route_12 Q999984 wikipedia_sitelink \n", - "New_Hampshire_Route_13 Q26346384 wikipedia_sitelink \n", - "New_Hampshire_Route_13 Q999992 wikipedia_sitelink \n", - "\n", - " node2 \n", - "trimmedNode2 \n", - "A-2_(Michigan_county_highway) http://en.wikipedia.org/wiki/A-2_(Michigan_cou... \n", - "A-2_(Michigan_county_highway) http://en.wikipedia.org/wiki/Template:Attached... \n", - "color http://en.wikipedia.org/wiki/Template:Communis... \n", - "color http://en.wikipedia.org/wiki/Template:Movement... \n", - "color http://en.wikipedia.org/wiki/Template:Serbian_... \n", - "... ... \n", - "New_Hampshire_Route_47 http://en.wikipedia.org/wiki/New_Hampshire_Rou... \n", - "New_Hampshire_Route_12 http://en.wikipedia.org/wiki/Template:Attached... \n", - "New_Hampshire_Route_12 http://en.wikipedia.org/wiki/New_Hampshire_Rou... \n", - "New_Hampshire_Route_13 http://en.wikipedia.org/wiki/Template:Attached... \n", - "New_Hampshire_Route_13 http://en.wikipedia.org/wiki/New_Hampshire_Rou... \n", - "\n", - "[22572010 rows x 4 columns]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sitelinksDF2.loc[sitelinksDF2[sitelinksDF2.index.duplicated()].index]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "editorial-cache", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "naval-morrison", - "metadata": {}, - "source": [ - "# Join DBPedia file with sitelinks - File X" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "incorrect-beach", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF = df1.join(sitelinksDF2).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "answering-rhythm", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexignoreurlignore2abstractidnode1labelnode2
0!!!211415<http://dbpedia.org/resource/!!!><http://www.w3.org/2000/01/rdf-schema#comment>!!! ( chk-chk-chk) is an American dance-punk b...Q371-wikipedia_sitelink-628937-0Q371wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!
1!!!_(album)584428<http://dbpedia.org/resource/!!!_(album)><http://www.w3.org/2000/01/rdf-schema#comment>!!! is the eponymous debut studio album by dan...Q2705922-wikipedia_sitelink-e96003-0Q2705922wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!_(album)
2!Action_Pact!650560<http://dbpedia.org/resource/!Action_Pact!><http://www.w3.org/2000/01/rdf-schema#comment>!Action Pact! was a London-based punk rock ban...Q343686-wikipedia_sitelink-d81157-0Q343686wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!Action_Pact!
3!Arriba!_La_Pachanga4498318<http://dbpedia.org/resource/!Arriba!_La_Pacha...<http://www.w3.org/2000/01/rdf-schema#comment>!Arriba! La Pachanga is an album by Mongo Sant...Q15411145-wikipedia_sitelink-9fed64-0Q15411145wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!Arriba!_La_Pachanga
4!Hero474306<http://dbpedia.org/resource/!Hero><http://www.w3.org/2000/01/rdf-schema#comment>!HERO is a 2003 Christian rock opera about Jes...Q3596099-wikipedia_sitelink-5956bd-0Q3596099wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!Hero
\n", - "
" - ], - "text/plain": [ - " index ignore \\\n", - "0 !!! 211415 \n", - "1 !!!_(album) 584428 \n", - "2 !Action_Pact! 650560 \n", - "3 !Arriba!_La_Pachanga 4498318 \n", - "4 !Hero 474306 \n", - "\n", - " url \\\n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "\n", - " ignore2 \\\n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "\n", - " abstract \\\n", - "0 !!! ( chk-chk-chk) is an American dance-punk b... \n", - "1 !!! is the eponymous debut studio album by dan... \n", - "2 !Action Pact! was a London-based punk rock ban... \n", - "3 !Arriba! La Pachanga is an album by Mongo Sant... \n", - "4 !HERO is a 2003 Christian rock opera about Jes... \n", - "\n", - " id node1 label \\\n", - "0 Q371-wikipedia_sitelink-628937-0 Q371 wikipedia_sitelink \n", - "1 Q2705922-wikipedia_sitelink-e96003-0 Q2705922 wikipedia_sitelink \n", - "2 Q343686-wikipedia_sitelink-d81157-0 Q343686 wikipedia_sitelink \n", - "3 Q15411145-wikipedia_sitelink-9fed64-0 Q15411145 wikipedia_sitelink \n", - "4 Q3596099-wikipedia_sitelink-5956bd-0 Q3596099 wikipedia_sitelink \n", - "\n", - " node2 \n", - "0 http://en.wikipedia.org/wiki/!!! \n", - "1 http://en.wikipedia.org/wiki/!!!_(album) \n", - "2 http://en.wikipedia.org/wiki/!Action_Pact! \n", - "3 http://en.wikipedia.org/wiki/!Arriba!_La_Pachanga \n", - "4 http://en.wikipedia.org/wiki/!Hero " - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "peripheral-edinburgh", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(5785371, 5785371, 5731254)" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(abstractsDF), abstractsDF.index.nunique(), abstractsDF.node1.nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "first-encoding", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "From 5785371 Qnodes, there are 54117 dbpedia statements which do not have a sitelink i.e 5731254 have a sitelink\n" - ] - } - ], - "source": [ - "print(f\"From {len(abstractsDF)} Qnodes, there are {abstractsDF.node2.isna().sum()} dbpedia statements which do not have a sitelink i.e {len(abstractsDF) - abstractsDF.node2.isna().sum()} have a sitelink\")\n" - ] - }, - { - "cell_type": "markdown", - "id": "modular-spirituality", - "metadata": {}, - "source": [ - "# Similarity file" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "wired-hayes", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF = pd.read_csv(\"../data/wordsim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "referenced-newport", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "persistent-electronics", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesList = set(wordsimDF.word1_kg_id.to_list() + wordsimDF.word2_kg_id.to_list())" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "billion-syndrome", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "From the similarity file having 349 records, we have list1 with 200 unique Qnodes and list2 with 286 unique Qnodes. Taking their union, we get 422 unique Qnodes and by taking their intersection, we get 64 unique Qnodes\n" - ] - } - ], - "source": [ - "print(f\"From the similarity file having {len(wordsimDF)} records, we have list1 with {len(set(wordsimDF.word1_kg_id.to_list()))} unique Qnodes and list2 with {len(set(wordsimDF.word2_kg_id.to_list()))} unique Qnodes. Taking their union, we get {len(set(wordsimDF.word1_kg_id.to_list() + wordsimDF.word2_kg_id.to_list()))} unique Qnodes and by taking their intersection, we get {len(set(wordsimDF.word1_kg_id.to_list()).intersection(set(wordsimDF.word2_kg_id.to_list())))} unique Qnodes\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "affecting-people", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListDF1 = pd.DataFrame({'node1': list(wordsimQNodesList)}).set_index('node1')\n" - ] - }, - { - "cell_type": "markdown", - "id": "hourly-document", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Filtering File X Qnodes using similarity file Qnodes list" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "universal-romance", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF1 = abstractsDF[abstractsDF.node1.apply(lambda p:p in wordsimQNodesList)]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "secure-default", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexignoreurlignore2abstractidnode1labelnode2
4002100159716<http://dbpedia.org/resource/100><http://www.w3.org/2000/01/rdf-schema#comment>100 or one hundred (Roman numeral: C) is the n...Q37413-wikipedia_sitelink-c0dbd3-0Q37413wikipedia_sitelinkhttp://en.wikipedia.org/wiki/100
30649251074621<http://dbpedia.org/resource/5><http://www.w3.org/2000/01/rdf-schema#comment>5 (five) is a number, numeral, and glyph. It i...Q203-wikipedia_sitelink-c8e811-0Q203wikipedia_sitelinkhttp://en.wikipedia.org/wiki/5
3129867103187<http://dbpedia.org/resource/7><http://www.w3.org/2000/01/rdf-schema#comment>7 (seven) is the natural number following 6 an...Q23350-wikipedia_sitelink-6dd502-0Q23350wikipedia_sitelinkhttp://en.wikipedia.org/wiki/7
363000Abuse165447<http://dbpedia.org/resource/Abuse><http://www.w3.org/2000/01/rdf-schema#comment>Abuse is the improper usage or treatment of a ...Q600571-wikipedia_sitelink-5719bc-0Q600571wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Abuse
364696Academic_discipline1830099<http://dbpedia.org/resource/Academic_discipline><http://www.w3.org/2000/01/rdf-schema#comment>An academic discipline or academic field is a ...Q11862829-wikipedia_sitelink-cdefe0-0Q11862829wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Academic_discipline
\n", - "
" - ], - "text/plain": [ - " index ignore \\\n", - "4002 100 159716 \n", - "306492 5 1074621 \n", - "312986 7 103187 \n", - "363000 Abuse 165447 \n", - "364696 Academic_discipline 1830099 \n", - "\n", - " url \\\n", - "4002 \n", - "306492 \n", - "312986 \n", - "363000 \n", - "364696 \n", - "\n", - " ignore2 \\\n", - "4002 \n", - "306492 \n", - "312986 \n", - "363000 \n", - "364696 \n", - "\n", - " abstract \\\n", - "4002 100 or one hundred (Roman numeral: C) is the n... \n", - "306492 5 (five) is a number, numeral, and glyph. It i... \n", - "312986 7 (seven) is the natural number following 6 an... \n", - "363000 Abuse is the improper usage or treatment of a ... \n", - "364696 An academic discipline or academic field is a ... \n", - "\n", - " id node1 label \\\n", - "4002 Q37413-wikipedia_sitelink-c0dbd3-0 Q37413 wikipedia_sitelink \n", - "306492 Q203-wikipedia_sitelink-c8e811-0 Q203 wikipedia_sitelink \n", - "312986 Q23350-wikipedia_sitelink-6dd502-0 Q23350 wikipedia_sitelink \n", - "363000 Q600571-wikipedia_sitelink-5719bc-0 Q600571 wikipedia_sitelink \n", - "364696 Q11862829-wikipedia_sitelink-cdefe0-0 Q11862829 wikipedia_sitelink \n", - "\n", - " node2 \n", - "4002 http://en.wikipedia.org/wiki/100 \n", - "306492 http://en.wikipedia.org/wiki/5 \n", - "312986 http://en.wikipedia.org/wiki/7 \n", - "363000 http://en.wikipedia.org/wiki/Abuse \n", - "364696 http://en.wikipedia.org/wiki/Academic_discipline " - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "abroad-donna", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Initially, there were 5732949 short abstracts. From 5785371 Qnodes with short abstracts, there are 324 Qnodes which have some similarity measure\n" - ] - } - ], - "source": [ - "print(f\"Initially, there were {len(df1)} short abstracts. From {len(abstractsDF)} Qnodes with short abstracts, there are {len(abstractsDF1)} Qnodes which have some similarity measure\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "extensive-giving", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "absDFLabelList = abstractsDF1['index'].to_list()" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "charged-valuable", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "324" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF1['index'].nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "recent-kansas", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "terminal-offer", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Join sitelinks with DBPedia file - File Y" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "particular-nerve", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "abstractsDF2 = sitelinksDF2.join(df1).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "dimensional-preserve", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidnode1labelnode2ignoreurlignore2abstract
0Q956244-wikipedia_sitelink-539183-0Q956244wikipedia_sitelinkhttp://en.wikipedia.org/wiki///NaNNaNNaNNaN
1!!Q353153-wikipedia_sitelink-d716fb-0Q353153wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!NaNNaNNaNNaN
2!!!Q371-wikipedia_sitelink-628937-0Q371wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!211415.0<http://dbpedia.org/resource/!!!><http://www.w3.org/2000/01/rdf-schema#comment>!!! ( chk-chk-chk) is an American dance-punk b...
3!!!!!!!Q91868926-wikipedia_sitelink-d58178-0Q91868926wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!!!!!NaNNaNNaNNaN
4!!!_(album)Q2705922-wikipedia_sitelink-e96003-0Q2705922wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!_(album)584428.0<http://dbpedia.org/resource/!!!_(album)><http://www.w3.org/2000/01/rdf-schema#comment>!!! is the eponymous debut studio album by dan...
\n", - "
" - ], - "text/plain": [ - " index id node1 \\\n", - "0 Q956244-wikipedia_sitelink-539183-0 Q956244 \n", - "1 !! Q353153-wikipedia_sitelink-d716fb-0 Q353153 \n", - "2 !!! Q371-wikipedia_sitelink-628937-0 Q371 \n", - "3 !!!!!!! Q91868926-wikipedia_sitelink-d58178-0 Q91868926 \n", - "4 !!!_(album) Q2705922-wikipedia_sitelink-e96003-0 Q2705922 \n", - "\n", - " label node2 ignore \\\n", - "0 wikipedia_sitelink http://en.wikipedia.org/wiki/// NaN \n", - "1 wikipedia_sitelink http://en.wikipedia.org/wiki/!! NaN \n", - "2 wikipedia_sitelink http://en.wikipedia.org/wiki/!!! 211415.0 \n", - "3 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!!!!! NaN \n", - "4 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!_(album) 584428.0 \n", - "\n", - " url \\\n", - "0 NaN \n", - "1 NaN \n", - "2 \n", - "3 NaN \n", - "4 \n", - "\n", - " ignore2 \\\n", - "0 NaN \n", - "1 NaN \n", - "2 \n", - "3 NaN \n", - "4 \n", - "\n", - " abstract \n", - "0 NaN \n", - "1 NaN \n", - "2 !!! ( chk-chk-chk) is an American dance-punk b... \n", - "3 NaN \n", - "4 !!! is the eponymous debut studio album by dan... " - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "existing-disabled", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "From 8472828 Qnodes, there are 2741574 sitelink Qnodes which do not have a short abstract i.e 5731254 have a short abstract\n" - ] - } - ], - "source": [ - "print(f\"From {len(abstractsDF2)} Qnodes, there are {abstractsDF2.ignore2.isna().sum()} sitelink Qnodes which do not have a short abstract i.e {len(abstractsDF2) - abstractsDF2.ignore2.isna().sum()} have a short abstract\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "normal-rachel", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "attempted-scotland", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Join list of similarity file Qnodes with File Y" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "premier-attack", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "temp1 = sitelinksDF2.join(df1)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "disturbed-windsor", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "temp2 = temp1.reset_index().set_index('node1')" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "southern-cookbook", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstract
node1
Q956244Q956244-wikipedia_sitelink-539183-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki///NaNNaNNaNNaN
Q353153!!Q353153-wikipedia_sitelink-d716fb-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!NaNNaNNaNNaN
Q371!!!Q371-wikipedia_sitelink-628937-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!211415.0<http://dbpedia.org/resource/!!!><http://www.w3.org/2000/01/rdf-schema#comment>!!! ( chk-chk-chk) is an American dance-punk b...
Q91868926!!!!!!!Q91868926-wikipedia_sitelink-d58178-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!!!!!NaNNaNNaNNaN
Q2705922!!!_(album)Q2705922-wikipedia_sitelink-e96003-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/!!!_(album)584428.0<http://dbpedia.org/resource/!!!_(album)><http://www.w3.org/2000/01/rdf-schema#comment>!!! is the eponymous debut studio album by dan...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q956244 Q956244-wikipedia_sitelink-539183-0 \n", - "Q353153 !! Q353153-wikipedia_sitelink-d716fb-0 \n", - "Q371 !!! Q371-wikipedia_sitelink-628937-0 \n", - "Q91868926 !!!!!!! Q91868926-wikipedia_sitelink-d58178-0 \n", - "Q2705922 !!!_(album) Q2705922-wikipedia_sitelink-e96003-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q956244 wikipedia_sitelink http://en.wikipedia.org/wiki/// \n", - "Q353153 wikipedia_sitelink http://en.wikipedia.org/wiki/!! \n", - "Q371 wikipedia_sitelink http://en.wikipedia.org/wiki/!!! \n", - "Q91868926 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!!!!! \n", - "Q2705922 wikipedia_sitelink http://en.wikipedia.org/wiki/!!!_(album) \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q956244 NaN NaN \n", - "Q353153 NaN NaN \n", - "Q371 211415.0 \n", - "Q91868926 NaN NaN \n", - "Q2705922 584428.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q956244 NaN \n", - "Q353153 NaN \n", - "Q371 \n", - "Q91868926 NaN \n", - "Q2705922 \n", - "\n", - " abstract \n", - "node1 \n", - "Q956244 NaN \n", - "Q353153 NaN \n", - "Q371 !!! ( chk-chk-chk) is an American dance-punk b... \n", - "Q91868926 NaN \n", - "Q2705922 !!! is the eponymous debut studio album by dan... " - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "ordinary-connectivity", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsDF = wordsimQNodesListDF1.join(temp2)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "married-prior", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstract
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNNaN
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract \n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 A flood is an overflow of water that submerges... \n", - "Q1368 Money is any item or verifiable record that is... \n", - "Q872 Radio is the technology of signaling and commu... \n", - "Q5070802 An emergency is a situation that poses an imme... " - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "durable-keeping", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "98" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsDF.abstract.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "oriental-devices", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "324" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(set(wordsimQNodesListWAbstractsDF[~wordsimQNodesListWAbstractsDF.abstract.isna()].index.to_list()))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dominican-illinois", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "afraid-asian", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "422" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(set(wordsimQNodesListWAbstractsDF.index.to_list()))" - ] - }, - { - "cell_type": "markdown", - "id": "beneficial-dynamics", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Adding labels from labels.en" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "satisfactory-nickname", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "potential-vegetable", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2
0P10-label-enP10label'video'@en
1P1000-label-enP1000label'record held'@en
2P1001-label-enP1001label'applies to jurisdiction'@en
3P1002-label-enP1002label'engine configuration'@en
4P1003-label-enP1003label'National Library of Romania ID'@en
\n", - "
" - ], - "text/plain": [ - " id node1 label node2\n", - "0 P10-label-en P10 label 'video'@en\n", - "1 P1000-label-en P1000 label 'record held'@en\n", - "2 P1001-label-en P1001 label 'applies to jurisdiction'@en\n", - "3 P1002-label-en P1002 label 'engine configuration'@en\n", - "4 P1003-label-en P1003 label 'National Library of Romania ID'@en" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "labelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "significant-cross", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF = wordsimQNodesListWAbstractsDF.join(labelsDF.set_index('node1'), rsuffix='_labelsDF')" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "bigger-separation", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractid_labelsDFlabel_labelsDFnode2_labelsDF
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNNaNQ1514190-label-enlabel'school holiday'@en
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...Q8068-label-enlabel'flood'@en
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...Q1368-label-enlabel'money'@en
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...Q872-label-enlabel'radio'@en
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...Q5070802-label-enlabel'emergency'@en
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 A flood is an overflow of water that submerges... \n", - "Q1368 Money is any item or verifiable record that is... \n", - "Q872 Radio is the technology of signaling and commu... \n", - "Q5070802 An emergency is a situation that poses an imme... \n", - "\n", - " id_labelsDF label_labelsDF node2_labelsDF \n", - "node1 \n", - "Q1514190 Q1514190-label-en label 'school holiday'@en \n", - "Q8068 Q8068-label-en label 'flood'@en \n", - "Q1368 Q1368-label-en label 'money'@en \n", - "Q872 Q872-label-en label 'radio'@en \n", - "Q5070802 Q5070802-label-en label 'emergency'@en " - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "native-british", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF = wordsimQNodesListWAbstractsLabelsDF.drop(columns=['id_labelsDF', 'label_labelsDF'])" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "popular-harmony", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "temp123 = wordsimQNodesListWAbstractsLabelsDF.node2_labelsDF.apply(lambda p: type(p))" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "adolescent-panama", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q25472932NaNNaNNaNNaNNaNNaNNaNNaNNaN
Q105427573NaNNaNNaNNaNNaNNaNNaNNaNNaN
Q1746570NaNNaNNaNNaNNaNNaNNaNNaNNaN
Q12897867NaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", - "
" - ], - "text/plain": [ - " index id label node2 ignore url ignore2 abstract node2_labelsDF\n", - "node1 \n", - "Q25472932 NaN NaN NaN NaN NaN NaN NaN NaN NaN\n", - "Q105427573 NaN NaN NaN NaN NaN NaN NaN NaN NaN\n", - "Q1746570 NaN NaN NaN NaN NaN NaN NaN NaN NaN\n", - "Q12897867 NaN NaN NaN NaN NaN NaN NaN NaN NaN" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF[temp123 != str]" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "twenty-purpose", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF.node2_labelsDF = wordsimQNodesListWAbstractsLabelsDF.node2_labelsDF.apply(lambda p: p[1:-4] if type(p) == str else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "beginning-department", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNNaNschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...flood
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...money
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radio
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergency
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \n", - "node1 \n", - "Q1514190 NaN school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency " - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "fifteen-patent", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1 = wordsimQNodesListWAbstractsLabelsDF[~wordsimQNodesListWAbstractsLabelsDF.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "structured-archive", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "324" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "shared-secretariat", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.abstract.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "fossil-courtesy", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...flood
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...money
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radio
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergency
Q213449EatingQ213449-wikipedia_sitelink-1e88be-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Eating104645.0<http://dbpedia.org/resource/Eating><http://www.w3.org/2000/01/rdf-schema#comment>Eating (also known as consuming) is the ingest...eating
\n", - "
" - ], - "text/plain": [ - " index id label \\\n", - "node1 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 wikipedia_sitelink \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 wikipedia_sitelink \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 wikipedia_sitelink \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 wikipedia_sitelink \n", - "Q213449 Eating Q213449-wikipedia_sitelink-1e88be-0 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q8068 http://en.wikipedia.org/wiki/Flood 23841.0 \n", - "Q1368 http://en.wikipedia.org/wiki/Money 1312979.0 \n", - "Q872 http://en.wikipedia.org/wiki/Radio 1866867.0 \n", - "Q5070802 http://en.wikipedia.org/wiki/Emergency 80429.0 \n", - "Q213449 http://en.wikipedia.org/wiki/Eating 104645.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "Q213449 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "Q213449 \n", - "\n", - " abstract node2_labelsDF \n", - "node1 \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency \n", - "Q213449 Eating (also known as consuming) is the ingest... eating " - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "compatible-september", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.to_csv('../data/wordsimQNodesListWAbstractsLabelsDF1.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "subject-access", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF1.csv').set_index('node1')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "silver-structure", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = wordsimQNodesListWAbstractsLabelsDF.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "dramatic-projection", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2['abstract'] = wordsimQNodesListWAbstractsLabelsDF2.apply(lambda row: row.node2_labelsDF if pd.isna(row.abstract) else row.abstract, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "accessible-trunk", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNschool holidayschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...flood
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...money
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radio
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergency
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \n", - "node1 \n", - "Q1514190 school holiday school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency " - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "colored-imagination", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "422" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "labeled-eagle", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = wordsimQNodesListWAbstractsLabelsDF2[~wordsimQNodesListWAbstractsLabelsDF2.abstract.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "welcome-orleans", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.to_csv('../data/wordsimQNodesListWAbstractsLabelsDF2.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "quick-chicken", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF2.csv')" - ] - }, - { - "cell_type": "markdown", - "id": "potential-format", - "metadata": {}, - "source": [ - "# Fetch saved files" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "defined-harris", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF1.csv').set_index('node1')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "documented-replication", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2 = pd.read_csv('../data/wordsimQNodesListWAbstractsLabelsDF2.csv').set_index('node1')" - ] - }, - { - "cell_type": "markdown", - "id": "apart-divide", - "metadata": { - "heading_collapsed": true - }, - "source": [ - "# Sentence Transformers" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "parental-craps", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "initial-coating", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def getEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "documented-alignment", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8.550719976425171 s\n" - ] - } - ], - "source": [ - "bertEnc = getEmbeddings('bert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "id": "continuing-impression", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1.24G/1.24G [02:08<00:00, 9.68MB/s] \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.648171424865723 s\n" - ] - } - ], - "source": [ - "bertLargeEnc = getEmbeddings('bert-large-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "responsible-national", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0568156242370605 s\n" - ] - } - ], - "source": [ - "distilBertEnc = getEmbeddings('distilbert-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "interracial-mitchell", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [], - "source": [ - "robertaBaseEnc = getEmbeddings('roberta-base-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "amended-powell", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.765424489974976 s\n" - ] - } - ], - "source": [ - "robertaEnc = getEmbeddings('roberta-large-nli-mean-tokens')" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "divided-donna", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "characteristic-religious", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def getMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "quality-sponsorship", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertEncMap = getMap(bertEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "id": "electronic-parcel", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertLargeEncMap = getMap(bertLargeEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "confused-snake", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "distilBertMap = getMap(distilBertEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "id": "vanilla-subject", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaBaseEncMap = getMap(robertaBaseEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "familiar-soundtrack", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaEncMap = getMap(robertaEnc)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "subjective-leeds", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "bronze-sally", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "detailed-imperial", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def checkSimilarity(row, encodingsMap):\n", - "# print(row)\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['word1_kg_id']]], [encodingsMap[row['word2_kg_id']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "funded-prototype", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertEncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "improving-nevada", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "bertLargeEncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLargeEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "conventional-white", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "distilBertSim = wordsimDF.apply(checkSimilarity, axis=1, args=(distilBertMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "related-garage", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaBaseBertSim = wordsimDF.apply(checkSimilarity, axis=1, args=(robertaBaseEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "portable-joint", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "robertaBertSim = wordsimDF.apply(checkSimilarity, axis=1, args=(robertaEncMap, ))" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "mental-forestry", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "wordsimDF1 = wordsimDF[['Human (Mean)']]" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "round-cornell", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertSim'] = bertEncSim\n" - ] - } - ], - "source": [ - "wordsimDF1['bertSim'] = bertEncSim" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "exotic-fundamental", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLargeSim'] = bertLargeEncSim\n" - ] - } - ], - "source": [ - "wordsimDF1['bertLargeSim'] = bertLargeEncSim" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "latter-cleanup", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['distilBertSim'] = distilBertSim\n" - ] - } - ], - "source": [ - "wordsimDF1['distilBertSim'] = distilBertSim" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "excellent-meeting", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBaseBertSim'] = robertaBaseBertSim\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBaseBertSim'] = robertaBaseBertSim" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "south-rwanda", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBertSim'] = robertaBertSim\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBertSim'] = robertaBertSim" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "proper-stations", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertSim'] = wordsimDF1.bertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['bertSim'] = wordsimDF1.bertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "legendary-campus", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLargeSim'] = wordsimDF1.bertLargeSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['bertLargeSim'] = wordsimDF1.bertLargeSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "ambient-victor", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['distilBertSim'] = wordsimDF1.distilBertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['distilBertSim'] = wordsimDF1.distilBertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "velvet-ethics", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBaseBertSim'] = wordsimDF1.robertaBaseBertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBaseBertSim'] = wordsimDF1.robertaBaseBertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "colonial-coordination", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['robertaBertSim'] = wordsimDF1.robertaBertSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "wordsimDF1['robertaBertSim'] = wordsimDF1.robertaBertSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "informational-fountain", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "numpy.float64" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(wordsimDF1.iloc[0][1])" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "japanese-order", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertSimdistilBertSimrobertaBertSim
05.53600.4268630.3602190.436207
14.12500.3399220.4331000.427664
26.62500.6865780.7069780.645407
32.06250.2961750.3736790.371295
47.18750.3408110.3905400.488393
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertSim distilBertSim robertaBertSim\n", - "0 5.5360 0.426863 0.360219 0.436207\n", - "1 4.1250 0.339922 0.433100 0.427664\n", - "2 6.6250 0.686578 0.706978 0.645407\n", - "3 2.0625 0.296175 0.373679 0.371295\n", - "4 7.1875 0.340811 0.390540 0.488393" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "id": "marine-general", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "wordsimDF1.bertLargeSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "living-condition", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "wordsimDF1.robertaBaseBertSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "hearing-adjustment", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "wordsimDF1.bertSim *= 10\n", - "wordsimDF1.distilBertSim *= 10\n", - "wordsimDF1.robertaBertSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "suspected-plumbing", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertSimdistilBertSimrobertaBertSimamanSimbertLargeSimrobertaBaseBertSim
05.53604.2686333.6021924.362067[[0.4949737852167514]]4.1961185.313815
14.12503.3992174.3310054.276645[[0.4818230866992358]]4.0459335.239753
26.62506.8657827.0697766.454071[[0.6407051485261465]]6.2152236.513252
32.06252.9617553.7367903.712948[[0.6186497481059658]]3.5818334.266170
47.18753.4081123.9053974.883926[[0.8556663921383962]]4.3223805.111274
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertSim distilBertSim robertaBertSim \\\n", - "0 5.5360 4.268633 3.602192 4.362067 \n", - "1 4.1250 3.399217 4.331005 4.276645 \n", - "2 6.6250 6.865782 7.069776 6.454071 \n", - "3 2.0625 2.961755 3.736790 3.712948 \n", - "4 7.1875 3.408112 3.905397 4.883926 \n", - "\n", - " amanSim bertLargeSim robertaBaseBertSim \n", - "0 [[0.4949737852167514]] 4.196118 5.313815 \n", - "1 [[0.4818230866992358]] 4.045933 5.239753 \n", - "2 [[0.6407051485261465]] 6.215223 6.513252 \n", - "3 [[0.6186497481059658]] 3.581833 4.266170 \n", - "4 [[0.8556663921383962]] 4.322380 5.111274 " - ] - }, - "execution_count": 137, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "incorporate-punishment", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 89, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "wordsimDF1.sort_values(by=['Human (Mean)']).plot.line()" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "prospective-international", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "wordsimDF1.plot.line()" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "id": "appointed-tablet", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "# cosine_similarity([encodingsMap['Q847337']], [encodingsMap['Q551800']])" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "adaptive-bride", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "beautiful-wages", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37975882843235137, pvalue=5.235465664921023e-26)" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "equivalent-wireless", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37556037504702056, pvalue=1.7903693658447951e-25)" - ] - }, - "execution_count": 126, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLargeSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "informal-error", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3529686820781901, pvalue=1.0899920454225404e-22)" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['distilBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "allied-vulnerability", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3156122362936971, pvalue=1.8520533516011967e-18)" - ] - }, - "execution_count": 139, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBaseBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "victorian-seeking", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3583059753020537, pvalue=2.481962318957373e-23)" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fallen-action", - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "smart-musician", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5388523544692222, pvalue=1.1269721214604893e-27)" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "stock-agent", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5316995237579449, pvalue=7.350680368606645e-27)" - ] - }, - "execution_count": 127, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLargeSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "wrapped-batman", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5043971026064306, pvalue=6.35665360448366e-24)" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['distilBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "fallen-professor", - "metadata": { - "hidden": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4564962071637959, pvalue=2.286865863469491e-19)" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBaseBertSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "fewer-stock", - "metadata": { - "hidden": true, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5120576203985243, pvalue=1.0133475563672188e-24)" - ] - }, - "execution_count": 98, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['robertaBertSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "attractive-dressing", - "metadata": {}, - "source": [ - "# Version 1 - Embeddings of Labels" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "royal-bahrain", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "threatened-roman", - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'wordsimQNodesListWAbstractsLabelsDF2' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwordsimQNodesListWAbstractsLabelsDF2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'wordsimQNodesListWAbstractsLabelsDF2' is not defined" - ] - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "flexible-metropolitan", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1 = wordsimDF[['Human (Mean)']]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "superb-machinery", - "metadata": {}, - "outputs": [], - "source": [ - "def getV1Embeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.node2_labelsDF.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['word1_kg_id']]], [encodingsMap[row['word2_kg_id']]])\n", - " else:\n", - " return 0\n", - "\n", - "def getCoverage(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return 1\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "excess-sight", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4.580217361450195 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertLabelsEnc = getV1Embeddings('bert-base-nli-mean-tokens')\n", - "bertLabelsEncMap = getMap(bertLabelsEnc)\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertLabelsSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "metropolitan-sunglasses", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertLabelsEncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "entire-branch", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.25719783185089823, pvalue=9.11953585838357e-13)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "positive-clone", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.37036443456409784, pvalue=8.677074016866423e-13)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "choice-alfred", - "metadata": {}, - "source": [ - "# Amandeep's file generation" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "attached-persian", - "metadata": {}, - "outputs": [], - "source": [ - "# q1 = \"kgtk query -i ../data/wikidataos.for.text-embedding.tsv.gz --match '(node1)-[]->(node2)' --where 'node1 in [\" + \",\".join(['\"'+word1+'\"' for word1 in wordsimQNodesListWAbstractsLabelsDF2.index.to_list()]) + \"]' -o ../data/wikidataos.for.text-embedding.subset2.tsv\"\n" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "fleet-finder", - "metadata": {}, - "outputs": [], - "source": [ - "# import os\n", - "# os.system(\"screen -dm \"+q1)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "fancy-personality", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataOSDF = pd.read_csv('../data/wikidataos.for.text-embedding.subset2.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "broke-grave", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnode1labelnode2ranknode2;wikidatatype
0Q104021-P1245-868aab-b3f18d7b-0Q104021P12451412normalexternal-id
1Q104021-P1296-7a59c3-5f49b5a7-0Q104021P12960108342normalexternal-id
2Q104021-P1343-Q19180675-e305e6f3-0Q104021P1343Q19180675normalwikibase-item
3Q104021-P1343-Q2657718-2d01d189-0Q104021P1343Q2657718normalwikibase-item
4Q104021-P1343-Q4091875-50bd890f-0Q104021P1343Q4091875normalwikibase-item
\n", - "
" - ], - "text/plain": [ - " id node1 label node2 rank \\\n", - "0 Q104021-P1245-868aab-b3f18d7b-0 Q104021 P1245 1412 normal \n", - "1 Q104021-P1296-7a59c3-5f49b5a7-0 Q104021 P1296 0108342 normal \n", - "2 Q104021-P1343-Q19180675-e305e6f3-0 Q104021 P1343 Q19180675 normal \n", - "3 Q104021-P1343-Q2657718-2d01d189-0 Q104021 P1343 Q2657718 normal \n", - "4 Q104021-P1343-Q4091875-50bd890f-0 Q104021 P1343 Q4091875 normal \n", - "\n", - " node2;wikidatatype \n", - "0 external-id \n", - "1 external-id \n", - "2 wikibase-item \n", - "3 wikibase-item \n", - "4 wikibase-item " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikidataOSDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "behavioral-layout", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk query -i ../data/wikidataos.for.text-embedding.subset2.tsv \\\n", - "# --match '(node1)-[]->()' \\\n", - "# --return 'count(distinct node1)'" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "resistant-jungle", - "metadata": {}, - "outputs": [], - "source": [ - "# !kgtk text-embedding -i ../data/wikidataos.for.text-embedding.subset2.tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/wikidataos-text-embeddings-subset2.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "humanitarian-divide", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(set(wordsimQNodesListWAbstractsLabelsDF2.index.to_list()))" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "unique-accuracy", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataOSEmbDF = pd.read_csv('../data/wikidataos-text-embeddings-subset2.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "smooth-librarian", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataOSEmbDF1 = wikidataOSEmbDF[wikidataOSEmbDF.property == 'text_embedding'].loc[:,['node','value']]" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "wired-surveillance", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodevalue
0Q9980.50568223,-0.10802102,-0.3486761,0.78598565,-...
2Q99496317-0.663889,1.3066527,0.7410443,0.7310645,-0.086...
4Q980698770.79087067,0.6158045,0.18239851,-0.44384396,-0...
6Q964401-0.4146536,0.36972183,-0.9731038,0.72235125,0....
8Q96350.085437864,0.50590533,-0.7758463,0.575578,1.1...
\n", - "
" - ], - "text/plain": [ - " node value\n", - "0 Q998 0.50568223,-0.10802102,-0.3486761,0.78598565,-...\n", - "2 Q99496317 -0.663889,1.3066527,0.7410443,0.7310645,-0.086...\n", - "4 Q98069877 0.79087067,0.6158045,0.18239851,-0.44384396,-0...\n", - "6 Q964401 -0.4146536,0.36972183,-0.9731038,0.72235125,0....\n", - "8 Q9635 0.085437864,0.50590533,-0.7758463,0.575578,1.1..." - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikidataOSEmbDF1.head()" - ] - }, - { - "cell_type": "markdown", - "id": "loved-serial", - "metadata": {}, - "source": [ - "# Version 2 - Comparison of cosine similarity measures with Amandeep's original file new pairs" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "novel-milwaukee", - "metadata": {}, - "outputs": [], - "source": [ - "import json" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "computational-vinyl", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['amanSim'] = amanEncSim * 10\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['amanSim'] = wordsimDF1.amanSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "amanEncMap = {row['node']: json.loads('['+row['value']+']') for _, row in wikidataOSEmbDF1.iterrows()}\n", - "amanEncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(amanEncMap, ))\n", - "wordsimDF1['amanSim'] = amanEncSim * 10\n", - "wordsimDF1['amanSim'] = wordsimDF1.amanSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "virtual-sodium", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(330, 349, 0.9455587392550143)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(amanEncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "dated-delta", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3654839025870469, pvalue=3.731075991381434e-24)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['amanSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "realistic-belize", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5075204852629356, pvalue=3.0234963712614295e-24)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['amanSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "hourly-armor", - "metadata": {}, - "source": [ - "# Version 3 - P31, P279 edges from lexicalized version" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "empty-laugh", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# !kgtk text-embedding -i ../data/wikidataos.for.text-embedding.subset2.tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 \\\n", - "# --save-embedding-sentence > ../data/wikidataos-text-embeddings-subset3.tsv" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "biological-enhancement", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataV3DF = pd.read_csv('../data/wikidataos-text-embeddings-subset3.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "silent-logging", - "metadata": {}, - "outputs": [], - "source": [ - "wikidataV3DF = wikidataV3DF[wikidataV3DF.property == 'text_embedding'].loc[:,['node','value']]" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "color-sword", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodevalue
0Q9980.60533667,-0.32207027,-0.19160181,0.70176995,...
2Q99496317-0.663889,1.3066527,0.7410443,0.7310645,-0.086...
4Q980698770.79087067,0.6158045,0.18239851,-0.44384396,-0...
6Q964401-0.3510175,0.29355207,-1.0211854,0.35043457,1....
8Q9635-0.010522888,0.4303582,-0.76446587,0.26379517,...
\n", - "
" - ], - "text/plain": [ - " node value\n", - "0 Q998 0.60533667,-0.32207027,-0.19160181,0.70176995,...\n", - "2 Q99496317 -0.663889,1.3066527,0.7410443,0.7310645,-0.086...\n", - "4 Q98069877 0.79087067,0.6158045,0.18239851,-0.44384396,-0...\n", - "6 Q964401 -0.3510175,0.29355207,-1.0211854,0.35043457,1....\n", - "8 Q9635 -0.010522888,0.4303582,-0.76446587,0.26379517,..." - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikidataV3DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "essential-virtue", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['wikiV3EncSim'] = wikiV3EncSim * 10\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['wikiV3EncSim'] = wordsimDF1.wikiV3EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n" - ] - } - ], - "source": [ - "import json\n", - "wikiV3EncMap = {row['node']: json.loads('['+row['value']+']') for _, row in wikidataV3DF.iterrows()}\n", - "wikiV3EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(wikiV3EncMap, ))\n", - "wordsimDF1['wikiV3EncSim'] = wikiV3EncSim * 10\n", - "wordsimDF1['wikiV3EncSim'] = wordsimDF1.wikiV3EncSim.apply(lambda p: p[0][0] if p != 0 else p)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "charming-indicator", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(330, 349, 0.9455587392550143)" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(wikiV3EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "dependent-sensitivity", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.33429987563573715, pvalue=1.805960166533804e-20)" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['wikiV3EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "fresh-correspondence", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4737260118146468, pvalue=6.343179394616253e-21)" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['wikiV3EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "specified-tomorrow", - "metadata": {}, - "source": [ - "# Version 4 - First sentence of abstract vs human" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "opposite-discipline", - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "single-antigua", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "324" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "structured-specialist", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.abstract.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "unnecessary-outdoors", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1['abstractFirstSent'] = wordsimQNodesListWAbstractsLabelsDF1.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "breathing-purchase", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDFabstractFirstSent
node1
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...floodA flood is an overflow of water that submerges...
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...moneyMoney is any item or verifiable record that is...
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radioRadio is the technology of signaling and commu...
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergencyAn emergency is a situation that poses an imme...
Q213449EatingQ213449-wikipedia_sitelink-1e88be-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Eating104645.0<http://dbpedia.org/resource/Eating><http://www.w3.org/2000/01/rdf-schema#comment>Eating (also known as consuming) is the ingest...eatingEating (also known as consuming) is the ingest...
\n", - "
" - ], - "text/plain": [ - " index id label \\\n", - "node1 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 wikipedia_sitelink \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 wikipedia_sitelink \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 wikipedia_sitelink \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 wikipedia_sitelink \n", - "Q213449 Eating Q213449-wikipedia_sitelink-1e88be-0 wikipedia_sitelink \n", - "\n", - " node2 ignore \\\n", - "node1 \n", - "Q8068 http://en.wikipedia.org/wiki/Flood 23841.0 \n", - "Q1368 http://en.wikipedia.org/wiki/Money 1312979.0 \n", - "Q872 http://en.wikipedia.org/wiki/Radio 1866867.0 \n", - "Q5070802 http://en.wikipedia.org/wiki/Emergency 80429.0 \n", - "Q213449 http://en.wikipedia.org/wiki/Eating 104645.0 \n", - "\n", - " url \\\n", - "node1 \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "Q213449 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "Q213449 \n", - "\n", - " abstract node2_labelsDF \\\n", - "node1 \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency \n", - "Q213449 Eating (also known as consuming) is the ingest... eating \n", - "\n", - " abstractFirstSent \n", - "node1 \n", - "Q8068 A flood is an overflow of water that submerges... \n", - "Q1368 Money is any item or verifiable record that is... \n", - "Q872 Radio is the technology of signaling and commu... \n", - "Q5070802 An emergency is a situation that poses an imme... \n", - "Q213449 Eating (also known as consuming) is the ingest... " - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "surgical-title", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "grateful-harassment", - "metadata": {}, - "outputs": [], - "source": [ - "def getFirstSentEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF1.abstractFirstSent.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getFirstSentMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF1.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['word1_kg_id']]], [encodingsMap[row['word2_kg_id']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "owned-helen", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.5808649063110352 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV4EncSim'] = bertV4EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV4EncSim'] = wordsimDF1.bertV4EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV4Enc = getFirstSentEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV4EncMap = getFirstSentMap(bertV4Enc)\n", - "bertV4EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV4EncMap, ))\n", - "wordsimDF1['bertV4EncSim'] = bertV4EncSim\n", - "wordsimDF1['bertV4EncSim'] = wordsimDF1.bertV4EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV4EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "christian-median", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(239, 349, 0.6848137535816619)" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV4EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "nervous-cycling", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSim
05.53606.8096724.9497385.1456013.770548
14.12504.5548774.8182313.9870474.168040
26.62507.6438156.4070515.6696314.997217
32.06257.1948996.1864976.1864970.000000
47.18758.1378798.5566649.0984080.000000
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548\n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040\n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217\n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000\n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "retired-cookie", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "future-boring", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3633652092919623, pvalue=2.1070516667335453e-22)" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV4EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "composite-lebanon", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.49261494527923566, pvalue=9.798975953928462e-23)" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV4EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "occupational-rough", - "metadata": {}, - "source": [ - "# Version 5 - DBPedia's short abstracts vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "effective-elements", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "324" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF1)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "graduate-congress", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "little-yukon", - "metadata": {}, - "outputs": [], - "source": [ - "def getAbsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF1.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getAbsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF1.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['word1_kg_id']]], [encodingsMap[row['word2_kg_id']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "choice-seating", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.8821778297424316 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV5EncSim'] = bertV5EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV5EncSim'] = wordsimDF1.bertV5EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV5Enc = getAbsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV5EncMap = getAbsMap(bertV5Enc)\n", - "bertV5EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV5EncMap, ))\n", - "wordsimDF1['bertV5EncSim'] = bertV5EncSim\n", - "wordsimDF1['bertV5EncSim'] = wordsimDF1.bertV5EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV5EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "computational-crime", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(239, 349, 0.6848137535816619)" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV5EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "durable-import", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSim
05.53606.8096724.9497385.1456013.7705484.268633
14.12504.5548774.8182313.9870474.1680403.399217
26.62507.6438156.4070515.6696314.9972176.865782
32.06257.1948996.1864976.1864970.0000000.000000
47.18758.1378798.5566649.0984080.0000000.000000
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548 \n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040 \n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217 \n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000 \n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000 \n", - "\n", - " bertV5EncSim \n", - "0 4.268633 \n", - "1 3.399217 \n", - "2 6.865782 \n", - "3 0.000000 \n", - "4 0.000000 " - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "champion-waste", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "pretty-observation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3628353158835648, pvalue=2.428880959404515e-22)" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV5EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "adverse-calculator", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4963804164345332, pvalue=4.1353639478514766e-23)" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV5EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "sexual-leone", - "metadata": {}, - "source": [ - "# Version 6 - DBPedia's short abstracts + labels vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "elder-refund", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNschool holidayschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...flood
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...money
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radio
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergency
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \n", - "node1 \n", - "Q1514190 school holiday school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency " - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "inclusive-gender", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "dental-choice", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "understanding-insured", - "metadata": {}, - "outputs": [], - "source": [ - "def getAbsLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getAbsLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['word1_kg_id']]], [encodingsMap[row['word2_kg_id']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "political-manufacturer", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.902165412902832 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV6Enc = getAbsLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV6EncMap = getAbsLabsMap(bertV6Enc)\n", - "bertV6EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV6EncMap, ))\n", - "wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - "wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV6EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "oriental-olympus", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV6EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "simplified-recipient", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSim
05.53606.8096724.9497385.1456013.7705484.2686334.268633
14.12504.5548774.8182313.9870474.1680403.3992173.399217
26.62507.6438156.4070515.6696314.9972176.8657826.865782
32.06257.1948996.1864976.1864970.0000000.0000002.961755
47.18758.1378798.5566649.0984080.0000000.0000003.408112
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548 \n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040 \n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217 \n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000 \n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000 \n", - "\n", - " bertV5EncSim bertV6EncSim \n", - "0 4.268633 4.268633 \n", - "1 3.399217 3.399217 \n", - "2 6.865782 6.865782 \n", - "3 0.000000 2.961755 \n", - "4 0.000000 3.408112 " - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "convenient-glory", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "split-doctor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37975882843235137, pvalue=5.235465664921023e-26)" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "criminal-tragedy", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5388523544692222, pvalue=1.1269721214604893e-27)" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "certified-compact", - "metadata": {}, - "source": [ - "# Version 7 - 1st sentence + label vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "billion-southwest", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "relevant-looking", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2['abstractFirstSent'] = wordsimQNodesListWAbstractsLabelsDF2.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "based-duplicate", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDFabstractFirstSent
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNschool holidayschool holidayschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...floodA flood is an overflow of water that submerges...
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...moneyMoney is any item or verifiable record that is...
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radioRadio is the technology of signaling and commu...
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergencyAn emergency is a situation that poses an imme...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \\\n", - "node1 \n", - "Q1514190 school holiday school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency \n", - "\n", - " abstractFirstSent \n", - "node1 \n", - "Q1514190 school holiday \n", - "Q8068 A flood is an overflow of water that submerges... \n", - "Q1368 Money is any item or verifiable record that is... \n", - "Q872 Radio is the technology of signaling and commu... \n", - "Q5070802 An emergency is a situation that poses an imme... " - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "starting-parcel", - "metadata": {}, - "outputs": [], - "source": [ - "def get1stSentLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstractFirstSent.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def get1stSentLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['word1_kg_id']]], [encodingsMap[row['word2_kg_id']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "independent-consultancy", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.48781871795654297 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV7Enc = get1stSentLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV7EncMap = get1stSentLabsMap(bertV7Enc)\n", - "bertV7EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV7EncMap, ))\n", - "wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - "wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV7EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "incomplete-dispute", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV7EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "pregnant-message", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSimbertV7EncSim
05.53606.8096724.9497385.1456013.7705484.2686334.2686333.770548
14.12504.5548774.8182313.9870474.1680403.3992173.3992174.168040
26.62507.6438156.4070515.6696314.9972176.8657826.8657824.997217
32.06257.1948996.1864976.1864970.0000000.0000002.9617555.296330
47.18758.1378798.5566649.0984080.0000000.0000003.4081125.621890
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548 \n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040 \n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217 \n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000 \n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000 \n", - "\n", - " bertV5EncSim bertV6EncSim bertV7EncSim \n", - "0 4.268633 4.268633 3.770548 \n", - "1 3.399217 3.399217 4.168040 \n", - "2 6.865782 6.865782 4.997217 \n", - "3 0.000000 2.961755 5.296330 \n", - "4 0.000000 3.408112 5.621890 " - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "broke-oregon", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "recent-moment", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3793557735858387, pvalue=5.886665529373508e-26)" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "varying-prescription", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5330950015966213, pvalue=5.11634460488722e-27)" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "accessible-serum", - "metadata": {}, - "source": [ - "# Version 8, 9, 10 - complex, transe, text, class" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "japanese-cattle", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['complex'] = wordsimDF.complex * 10\n", - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['transe'] = wordsimDF.transe * 10\n", - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['text'] = wordsimDF.text * 10\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['class'] = wordsimDF['class'] * 10\n" - ] - } - ], - "source": [ - "wordsimDF1['complex'] = wordsimDF.complex * 10\n", - "wordsimDF1['transe'] = wordsimDF.transe * 10\n", - "wordsimDF1['text'] = wordsimDF.text * 10\n", - "wordsimDF1['class'] = wordsimDF['class'] * 10" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "fitting-jamaica", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclass
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53600.3611150.4466320.485653NaN
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12500.3021630.2743880.4793130.005851
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62500.6944620.4292890.6267840.393657
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06250.3248250.3790770.6186440.208812
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18750.3612140.3603830.8638460.888621
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class \n", - "0 5.5360 0.361115 0.446632 0.485653 NaN \n", - "1 4.1250 0.302163 0.274388 0.479313 0.005851 \n", - "2 6.6250 0.694462 0.429289 0.626784 0.393657 \n", - "3 2.0625 0.324825 0.379077 0.618644 0.208812 \n", - "4 7.1875 0.361214 0.360383 0.863846 0.888621 " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "educational-phoenix", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF1 = wordsimDF1.fillna(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "classical-bandwidth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)complextransetextclass
05.53603.6111544.4663244.8565290.000000
14.12503.0216352.7438834.7931350.058511
26.62506.9446184.2928946.2678413.936571
32.06253.2482493.7907676.1864422.088125
47.18753.6121443.6038348.6384588.886211
\n", - "
" - ], - "text/plain": [ - " Human (Mean) complex transe text class\n", - "0 5.5360 3.611154 4.466324 4.856529 0.000000\n", - "1 4.1250 3.021635 2.743883 4.793135 0.058511\n", - "2 6.6250 6.944618 4.292894 6.267841 3.936571\n", - "3 2.0625 3.248249 3.790767 6.186442 2.088125\n", - "4 7.1875 3.612144 3.603834 8.638458 8.886211" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "amazing-expense", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)complextransetextclass
count349.000000349.000000349.000000349.000000349.000000
mean4.0527354.2869583.4385955.5786971.937397
std2.0449711.6451632.0334672.0215482.753170
min0.3125000.000000-1.4366330.0000000.000000
25%2.3750003.3177982.1516624.6264980.145023
50%3.9375004.1716863.2401095.7677450.639914
75%5.3750004.9960304.7319906.8129772.350565
max10.00000010.00000010.00000010.00000010.000000
\n", - "
" - ], - "text/plain": [ - " Human (Mean) complex transe text class\n", - "count 349.000000 349.000000 349.000000 349.000000 349.000000\n", - "mean 4.052735 4.286958 3.438595 5.578697 1.937397\n", - "std 2.044971 1.645163 2.033467 2.021548 2.753170\n", - "min 0.312500 0.000000 -1.436633 0.000000 0.000000\n", - "25% 2.375000 3.317798 2.151662 4.626498 0.145023\n", - "50% 3.937500 4.171686 3.240109 5.767745 0.639914\n", - "75% 5.375000 4.996030 4.731990 6.812977 2.350565\n", - "max 10.000000 10.000000 10.000000 10.000000 10.000000" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.describe()" - ] - }, - { - "cell_type": "markdown", - "id": "headed-reality", - "metadata": {}, - "source": [ - "# Agreement Matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "typical-highland", - "metadata": {}, - "outputs": [], - "source": [ - "versionNames = ['bertLabelsSim', 'amanSim', 'wikiV3EncSim', 'bertV4EncSim', 'bertV5EncSim', 'bertV6EncSim', 'bertV7EncSim', 'complex', 'transe', 'text', 'class']" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "irish-yesterday", - "metadata": {}, - "outputs": [], - "source": [ - "kendallAM = []\n", - "spearmanAM = []\n", - "for ver in versionNames:\n", - " kAMTemp = []\n", - " sAMTemp = []\n", - " for ver2 in versionNames:\n", - " kAMTemp.append(stats.kendalltau(wordsimDF1[ver], wordsimDF1[ver2]).correlation)\n", - " sAMTemp.append(stats.spearmanr(wordsimDF1[ver], wordsimDF1[ver2]).correlation)\n", - " kendallAM.append(kAMTemp)\n", - " spearmanAM.append(sAMTemp)" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "massive-optimum", - "metadata": {}, - "outputs": [], - "source": [ - "kendallAMDF = pd.DataFrame(kendallAM, columns=['Version '+str(i+1) for i in range(len(versionNames))], index=['Version '+str(i+1) for i in range(len(versionNames))])" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "higher-shirt", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Version 1Version 2Version 3Version 4Version 5Version 6Version 7Version 8Version 9Version 10Version 11
Version 11.0000000.4120890.3835230.1605670.1464980.2870180.3836730.2089110.2099330.4004000.174948
Version 20.4120891.0000000.8389470.2968930.2662320.3692770.4585660.3092170.2478390.9123770.238586
Version 30.3835230.8389471.0000000.2753860.2505810.3512520.4298530.3042720.2490970.8398940.235619
Version 40.1605670.2968930.2753861.0000000.8205040.6117400.6198860.2296700.1355320.2994090.259318
Version 50.1464980.2662320.2505810.8205041.0000000.7821500.4495130.2463730.1433460.2694720.248043
Version 60.2870180.3692770.3512520.6117400.7821501.0000000.6505650.2651990.2016920.3680890.220891
Version 70.3836730.4585660.4298530.6198860.4495130.6505651.0000000.2600210.2398190.4533710.241190
Version 80.2089110.3092170.3042720.2296700.2463730.2651990.2600211.0000000.4476560.3095830.334855
Version 90.2099330.2478390.2490970.1355320.1433460.2016920.2398190.4476561.0000000.2445930.255377
Version 100.4004000.9123770.8398940.2994090.2694720.3680890.4533710.3095830.2445931.0000000.232037
Version 110.1749480.2385860.2356190.2593180.2480430.2208910.2411900.3348550.2553770.2320371.000000
\n", - "
" - ], - "text/plain": [ - " Version 1 Version 2 Version 3 Version 4 Version 5 Version 6 \\\n", - "Version 1 1.000000 0.412089 0.383523 0.160567 0.146498 0.287018 \n", - "Version 2 0.412089 1.000000 0.838947 0.296893 0.266232 0.369277 \n", - "Version 3 0.383523 0.838947 1.000000 0.275386 0.250581 0.351252 \n", - "Version 4 0.160567 0.296893 0.275386 1.000000 0.820504 0.611740 \n", - "Version 5 0.146498 0.266232 0.250581 0.820504 1.000000 0.782150 \n", - "Version 6 0.287018 0.369277 0.351252 0.611740 0.782150 1.000000 \n", - "Version 7 0.383673 0.458566 0.429853 0.619886 0.449513 0.650565 \n", - "Version 8 0.208911 0.309217 0.304272 0.229670 0.246373 0.265199 \n", - "Version 9 0.209933 0.247839 0.249097 0.135532 0.143346 0.201692 \n", - "Version 10 0.400400 0.912377 0.839894 0.299409 0.269472 0.368089 \n", - "Version 11 0.174948 0.238586 0.235619 0.259318 0.248043 0.220891 \n", - "\n", - " Version 7 Version 8 Version 9 Version 10 Version 11 \n", - "Version 1 0.383673 0.208911 0.209933 0.400400 0.174948 \n", - "Version 2 0.458566 0.309217 0.247839 0.912377 0.238586 \n", - "Version 3 0.429853 0.304272 0.249097 0.839894 0.235619 \n", - "Version 4 0.619886 0.229670 0.135532 0.299409 0.259318 \n", - "Version 5 0.449513 0.246373 0.143346 0.269472 0.248043 \n", - "Version 6 0.650565 0.265199 0.201692 0.368089 0.220891 \n", - "Version 7 1.000000 0.260021 0.239819 0.453371 0.241190 \n", - "Version 8 0.260021 1.000000 0.447656 0.309583 0.334855 \n", - "Version 9 0.239819 0.447656 1.000000 0.244593 0.255377 \n", - "Version 10 0.453371 0.309583 0.244593 1.000000 0.232037 \n", - "Version 11 0.241190 0.334855 0.255377 0.232037 1.000000 " - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "kendallAMDF" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "distant-level", - "metadata": {}, - "outputs": [], - "source": [ - "spearmanAMDF = pd.DataFrame(spearmanAM, columns=['Version '+str(i+1) for i in range(len(versionNames))], index=['Version '+str(i+1) for i in range(len(versionNames))])" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "skilled-battery", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Version 1Version 2Version 3Version 4Version 5Version 6Version 7Version 8Version 9Version 10Version 11
Version 11.0000000.5764250.5394160.2137440.1920740.4001620.5329500.3019240.3054900.5636280.253590
Version 20.5764251.0000000.9590020.3923780.3509080.5158530.6286260.4403260.3523660.9859720.339260
Version 30.5394160.9590021.0000000.3711060.3370870.4937460.5962810.4307920.3529820.9591310.336037
Version 40.2137440.3923780.3711061.0000000.9465270.7335770.6282220.3250080.1891240.3993800.355801
Version 50.1920740.3509080.3370870.9465271.0000000.7931770.5562560.3437650.2033960.3566450.343931
Version 60.4001620.5158530.4937460.7335770.7931771.0000000.8299590.3810970.2987560.5130840.321041
Version 70.5329500.6286260.5962810.6282220.5562560.8299591.0000000.3734460.3479570.6240480.345162
Version 80.3019240.4403260.4307920.3250080.3437650.3810970.3734461.0000000.6190560.4391020.477997
Version 90.3054900.3523660.3529820.1891240.2033960.2987560.3479570.6190561.0000000.3467780.364509
Version 100.5636280.9859720.9591310.3993800.3566450.5130840.6240480.4391020.3467781.0000000.333301
Version 110.2535900.3392600.3360370.3558010.3439310.3210410.3451620.4779970.3645090.3333011.000000
\n", - "
" - ], - "text/plain": [ - " Version 1 Version 2 Version 3 Version 4 Version 5 Version 6 \\\n", - "Version 1 1.000000 0.576425 0.539416 0.213744 0.192074 0.400162 \n", - "Version 2 0.576425 1.000000 0.959002 0.392378 0.350908 0.515853 \n", - "Version 3 0.539416 0.959002 1.000000 0.371106 0.337087 0.493746 \n", - "Version 4 0.213744 0.392378 0.371106 1.000000 0.946527 0.733577 \n", - "Version 5 0.192074 0.350908 0.337087 0.946527 1.000000 0.793177 \n", - "Version 6 0.400162 0.515853 0.493746 0.733577 0.793177 1.000000 \n", - "Version 7 0.532950 0.628626 0.596281 0.628222 0.556256 0.829959 \n", - "Version 8 0.301924 0.440326 0.430792 0.325008 0.343765 0.381097 \n", - "Version 9 0.305490 0.352366 0.352982 0.189124 0.203396 0.298756 \n", - "Version 10 0.563628 0.985972 0.959131 0.399380 0.356645 0.513084 \n", - "Version 11 0.253590 0.339260 0.336037 0.355801 0.343931 0.321041 \n", - "\n", - " Version 7 Version 8 Version 9 Version 10 Version 11 \n", - "Version 1 0.532950 0.301924 0.305490 0.563628 0.253590 \n", - "Version 2 0.628626 0.440326 0.352366 0.985972 0.339260 \n", - "Version 3 0.596281 0.430792 0.352982 0.959131 0.336037 \n", - "Version 4 0.628222 0.325008 0.189124 0.399380 0.355801 \n", - "Version 5 0.556256 0.343765 0.203396 0.356645 0.343931 \n", - "Version 6 0.829959 0.381097 0.298756 0.513084 0.321041 \n", - "Version 7 1.000000 0.373446 0.347957 0.624048 0.345162 \n", - "Version 8 0.373446 1.000000 0.619056 0.439102 0.477997 \n", - "Version 9 0.347957 0.619056 1.000000 0.346778 0.364509 \n", - "Version 10 0.624048 0.439102 0.346778 1.000000 0.333301 \n", - "Version 11 0.345162 0.477997 0.364509 0.333301 1.000000 " - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spearmanAMDF" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "indoor-coordinator", - "metadata": {}, - "outputs": [], - "source": [ - "kendallAMDF.to_csv('../data/kendallAMDF.csv')\n", - "spearmanAMDF.to_csv('../data/spearmanAMDF.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "innocent-prerequisite", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "active-leisure", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "boolean-impossible", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "suitable-brazil", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "desirable-collect", - "metadata": {}, - "outputs": [], - "source": [ - "for ver in versionNames:\n", - " wordsimDF[ver] = wordsimDF1[ver]" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "flexible-fifth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1word1_kg_idword1_kg_labelword1_kg_descriptionWord 2word2_kg_idword2_kg_labelword2_kg_descriptionHuman (Mean)complextransetextclassbertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSimbertV7EncSim
0admissionQ847337confessionstatement made by a person or a group of perso...ticketQ551800ticketpaper or cardboard document showing payment fo...5.53603.6111544.4663244.8565290.0000006.8096724.9497385.1456013.7705484.2686334.2686333.770548
1alcoholQ154alcoholic beveragedrink containing alcohols, typically ethanolchemistryQ2329chemistrybranch of physical science concerned with the ...4.12503.0216352.7438834.7931350.0585114.5548774.8182313.9870474.1680403.3992173.3992174.168040
2aluminumQ663aluminiummetallic chemical element of silvery appearanc...metalQ11426metalelement, compound or alloy that is a good cond...6.62506.9446184.2928946.2678413.9365717.6438156.4070515.6696314.9972176.8657826.8657824.997217
3announcementQ567303announcementprinted, spoken, or published statement or not...effortQ14536140exertionuse of physical or perceived energy by a person2.06253.2482493.7907676.1864422.0881257.1948996.1864976.1864970.0000000.0000002.9617555.296330
4announcementQ567303announcementprinted, spoken, or published statement or not...newsQ38926newscommunication of selected information on curre...7.18753.6121443.6038348.6384588.8862118.1378798.5566649.0984080.0000000.0000003.4081125.621890
\n", - "
" - ], - "text/plain": [ - " Word 1 word1_kg_id word1_kg_label \\\n", - "0 admission Q847337 confession \n", - "1 alcohol Q154 alcoholic beverage \n", - "2 aluminum Q663 aluminium \n", - "3 announcement Q567303 announcement \n", - "4 announcement Q567303 announcement \n", - "\n", - " word1_kg_description Word 2 word2_kg_id \\\n", - "0 statement made by a person or a group of perso... ticket Q551800 \n", - "1 drink containing alcohols, typically ethanol chemistry Q2329 \n", - "2 metallic chemical element of silvery appearanc... metal Q11426 \n", - "3 printed, spoken, or published statement or not... effort Q14536140 \n", - "4 printed, spoken, or published statement or not... news Q38926 \n", - "\n", - " word2_kg_label word2_kg_description \\\n", - "0 ticket paper or cardboard document showing payment fo... \n", - "1 chemistry branch of physical science concerned with the ... \n", - "2 metal element, compound or alloy that is a good cond... \n", - "3 exertion use of physical or perceived energy by a person \n", - "4 news communication of selected information on curre... \n", - "\n", - " Human (Mean) complex transe text class bertLabelsSim \\\n", - "0 5.5360 3.611154 4.466324 4.856529 0.000000 6.809672 \n", - "1 4.1250 3.021635 2.743883 4.793135 0.058511 4.554877 \n", - "2 6.6250 6.944618 4.292894 6.267841 3.936571 7.643815 \n", - "3 2.0625 3.248249 3.790767 6.186442 2.088125 7.194899 \n", - "4 7.1875 3.612144 3.603834 8.638458 8.886211 8.137879 \n", - "\n", - " amanSim wikiV3EncSim bertV4EncSim bertV5EncSim bertV6EncSim \\\n", - "0 4.949738 5.145601 3.770548 4.268633 4.268633 \n", - "1 4.818231 3.987047 4.168040 3.399217 3.399217 \n", - "2 6.407051 5.669631 4.997217 6.865782 6.865782 \n", - "3 6.186497 6.186497 0.000000 0.000000 2.961755 \n", - "4 8.556664 9.098408 0.000000 0.000000 3.408112 \n", - "\n", - " bertV7EncSim \n", - "0 3.770548 \n", - "1 4.168040 \n", - "2 4.997217 \n", - "3 5.296330 \n", - "4 5.621890 " - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "ambient-netherlands", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDF.to_csv('../data/wordsim_updated.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "careful-pharmacy", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "domestic-hello", - "metadata": {}, - "source": [ - "# Part 2 - Pedro's updated file" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "dated-lender", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimDFNew = pd.read_csv('../data/SimIP_new.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "patient-processor", - "metadata": {}, - "outputs": [], - "source": [ - "list(set(wordsimDFNew['g_qnode'].to_list() + wordsimDFNew['p_qnode'].to_list()))" - ] - }, - { - "cell_type": "markdown", - "id": "southern-today", - "metadata": {}, - "source": [ - "# Version 1 - Embeddings of Labels" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "theoretical-myanmar", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "cutting-construction", - "metadata": {}, - "outputs": [], - "source": [ - "def getV1Embeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.node2_labelsDF.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['word1_kg_id']]], [encodingsMap[row['word2_kg_id']]])\n", - " else:\n", - " return 0\n", - "\n", - "def getCoverage(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return 1\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "dominant-traveler", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4.580217361450195 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertLabelsEnc = getV1Embeddings('bert-base-nli-mean-tokens')\n", - "bertLabelsEncMap = getMap(bertLabelsEnc)\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF.apply(checkSimilarity, axis=1, args=(bertLabelsEncMap, ))\n", - "wordsimDF1['bertLabelsSim'] = wordsimDF1.bertLabelsSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertLabelsSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "equivalent-indicator", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertLabelsEncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "verbal-karma", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.25719783185089823, pvalue=9.11953585838357e-13)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "charitable-collaboration", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.37036443456409784, pvalue=8.677074016866423e-13)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertLabelsSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "changing-brazil", - "metadata": {}, - "source": [ - "# Version 6 - DBPedia's short abstracts + labels vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "accessible-potential", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDF
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNschool holidayschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...flood
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...money
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radio
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergency
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \n", - "node1 \n", - "Q1514190 school holiday school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency " - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "stainless-promotion", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "418" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordsimQNodesListWAbstractsLabelsDF2)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "owned-strap", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "hollow-consumer", - "metadata": {}, - "outputs": [], - "source": [ - "def getAbsLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstract.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def getAbsLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['word1_kg_id']]], [encodingsMap[row['word2_kg_id']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "leading-terrorism", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.902165412902832 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV6Enc = getAbsLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV6EncMap = getAbsLabsMap(bertV6Enc)\n", - "bertV6EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV6EncMap, ))\n", - "wordsimDF1['bertV6EncSim'] = bertV6EncSim\n", - "wordsimDF1['bertV6EncSim'] = wordsimDF1.bertV6EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV6EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "suitable-might", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV6EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "saving-harvey", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSim
05.53606.8096724.9497385.1456013.7705484.2686334.268633
14.12504.5548774.8182313.9870474.1680403.3992173.399217
26.62507.6438156.4070515.6696314.9972176.8657826.865782
32.06257.1948996.1864976.1864970.0000000.0000002.961755
47.18758.1378798.5566649.0984080.0000000.0000003.408112
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548 \n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040 \n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217 \n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000 \n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000 \n", - "\n", - " bertV5EncSim bertV6EncSim \n", - "0 4.268633 4.268633 \n", - "1 3.399217 3.399217 \n", - "2 6.865782 6.865782 \n", - "3 0.000000 2.961755 \n", - "4 0.000000 3.408112 " - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "accompanied-release", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "coordinate-display", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.37975882843235137, pvalue=5.235465664921023e-26)" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "weighted-istanbul", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5388523544692222, pvalue=1.1269721214604893e-27)" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV6EncSim'])" - ] - }, - { - "cell_type": "markdown", - "id": "integrated-marina", - "metadata": {}, - "source": [ - "# Version 7 - 1st sentence + label vs Human" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "limiting-clothing", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "patient-groove", - "metadata": {}, - "outputs": [], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2['abstractFirstSent'] = wordsimQNodesListWAbstractsLabelsDF2.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "thrown-initial", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexidlabelnode2ignoreurlignore2abstractnode2_labelsDFabstractFirstSent
node1
Q1514190School_holidayQ1514190-wikipedia_sitelink-a7b9f1-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/School_holidayNaNNaNNaNschool holidayschool holidayschool holiday
Q8068FloodQ8068-wikipedia_sitelink-410669-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Flood23841.0<http://dbpedia.org/resource/Flood><http://www.w3.org/2000/01/rdf-schema#comment>A flood is an overflow of water that submerges...floodA flood is an overflow of water that submerges...
Q1368MoneyQ1368-wikipedia_sitelink-59ade8-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Money1312979.0<http://dbpedia.org/resource/Money><http://www.w3.org/2000/01/rdf-schema#comment>Money is any item or verifiable record that is...moneyMoney is any item or verifiable record that is...
Q872RadioQ872-wikipedia_sitelink-1e49e4-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Radio1866867.0<http://dbpedia.org/resource/Radio><http://www.w3.org/2000/01/rdf-schema#comment>Radio is the technology of signaling and commu...radioRadio is the technology of signaling and commu...
Q5070802EmergencyQ5070802-wikipedia_sitelink-41cebc-0wikipedia_sitelinkhttp://en.wikipedia.org/wiki/Emergency80429.0<http://dbpedia.org/resource/Emergency><http://www.w3.org/2000/01/rdf-schema#comment>An emergency is a situation that poses an imme...emergencyAn emergency is a situation that poses an imme...
\n", - "
" - ], - "text/plain": [ - " index id \\\n", - "node1 \n", - "Q1514190 School_holiday Q1514190-wikipedia_sitelink-a7b9f1-0 \n", - "Q8068 Flood Q8068-wikipedia_sitelink-410669-0 \n", - "Q1368 Money Q1368-wikipedia_sitelink-59ade8-0 \n", - "Q872 Radio Q872-wikipedia_sitelink-1e49e4-0 \n", - "Q5070802 Emergency Q5070802-wikipedia_sitelink-41cebc-0 \n", - "\n", - " label node2 \\\n", - "node1 \n", - "Q1514190 wikipedia_sitelink http://en.wikipedia.org/wiki/School_holiday \n", - "Q8068 wikipedia_sitelink http://en.wikipedia.org/wiki/Flood \n", - "Q1368 wikipedia_sitelink http://en.wikipedia.org/wiki/Money \n", - "Q872 wikipedia_sitelink http://en.wikipedia.org/wiki/Radio \n", - "Q5070802 wikipedia_sitelink http://en.wikipedia.org/wiki/Emergency \n", - "\n", - " ignore url \\\n", - "node1 \n", - "Q1514190 NaN NaN \n", - "Q8068 23841.0 \n", - "Q1368 1312979.0 \n", - "Q872 1866867.0 \n", - "Q5070802 80429.0 \n", - "\n", - " ignore2 \\\n", - "node1 \n", - "Q1514190 NaN \n", - "Q8068 \n", - "Q1368 \n", - "Q872 \n", - "Q5070802 \n", - "\n", - " abstract node2_labelsDF \\\n", - "node1 \n", - "Q1514190 school holiday school holiday \n", - "Q8068 A flood is an overflow of water that submerges... flood \n", - "Q1368 Money is any item or verifiable record that is... money \n", - "Q872 Radio is the technology of signaling and commu... radio \n", - "Q5070802 An emergency is a situation that poses an imme... emergency \n", - "\n", - " abstractFirstSent \n", - "node1 \n", - "Q1514190 school holiday \n", - "Q8068 A flood is an overflow of water that submerges... \n", - "Q1368 Money is any item or verifiable record that is... \n", - "Q872 Radio is the technology of signaling and commu... \n", - "Q5070802 An emergency is a situation that poses an imme... " - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimQNodesListWAbstractsLabelsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "fifty-nashville", - "metadata": {}, - "outputs": [], - "source": [ - "def get1stSentLabsEmbeddings(modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(wordsimQNodesListWAbstractsLabelsDF2.abstractFirstSent.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "\n", - "def get1stSentLabsMap(encodings):\n", - " return {qnode: enc for qnode, enc in zip(wordsimQNodesListWAbstractsLabelsDF2.index.to_list(), encodings)}\n", - "\n", - "def checkSimilarity(row, encodingsMap):\n", - " if row['word1_kg_id'] in encodingsMap and row['word2_kg_id'] in encodingsMap:\n", - " return cosine_similarity([encodingsMap[row['word1_kg_id']]], [encodingsMap[row['word2_kg_id']]])\n", - " else:\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "stylish-encounter", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.48781871795654297 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/pandas/core/generic.py:5491: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " self[name] = value\n" - ] - } - ], - "source": [ - "bertV7Enc = get1stSentLabsEmbeddings('bert-base-nli-mean-tokens')\n", - "bertV7EncMap = get1stSentLabsMap(bertV7Enc)\n", - "bertV7EncSim = wordsimDF.apply(checkSimilarity, axis=1, args=(bertV7EncMap, ))\n", - "wordsimDF1['bertV7EncSim'] = bertV7EncSim\n", - "wordsimDF1['bertV7EncSim'] = wordsimDF1.bertV7EncSim.apply(lambda p: p[0][0] if p != 0 else p)\n", - "wordsimDF1.bertV7EncSim *= 10" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "cheap-anaheim", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(345, 349, 0.9885386819484241)" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnt = wordsimDF.apply(getCoverage, axis=1, args=(bertV7EncMap, )).sum()\n", - "cnt, len(wordsimDF), cnt / len(wordsimDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "conscious-remove", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Human (Mean)bertLabelsSimamanSimwikiV3EncSimbertV4EncSimbertV5EncSimbertV6EncSimbertV7EncSim
05.53606.8096724.9497385.1456013.7705484.2686334.2686333.770548
14.12504.5548774.8182313.9870474.1680403.3992173.3992174.168040
26.62507.6438156.4070515.6696314.9972176.8657826.8657824.997217
32.06257.1948996.1864976.1864970.0000000.0000002.9617555.296330
47.18758.1378798.5566649.0984080.0000000.0000003.4081125.621890
\n", - "
" - ], - "text/plain": [ - " Human (Mean) bertLabelsSim amanSim wikiV3EncSim bertV4EncSim \\\n", - "0 5.5360 6.809672 4.949738 5.145601 3.770548 \n", - "1 4.1250 4.554877 4.818231 3.987047 4.168040 \n", - "2 6.6250 7.643815 6.407051 5.669631 4.997217 \n", - "3 2.0625 7.194899 6.186497 6.186497 0.000000 \n", - "4 7.1875 8.137879 8.556664 9.098408 0.000000 \n", - "\n", - " bertV5EncSim bertV6EncSim bertV7EncSim \n", - "0 4.268633 4.268633 3.770548 \n", - "1 3.399217 3.399217 4.168040 \n", - "2 6.865782 6.865782 4.997217 \n", - "3 0.000000 2.961755 5.296330 \n", - "4 0.000000 3.408112 5.621890 " - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordsimDF1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "dress-soldier", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "local-specialist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KendalltauResult(correlation=0.3793557735858387, pvalue=5.886665529373508e-26)" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.kendalltau(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "studied-fluid", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5330950015966213, pvalue=5.11634460488722e-27)" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['bertV7EncSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "billion-parish", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "generic-allowance", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.45231140660502644, pvalue=5.300007087753043e-19)" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['complex'])" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "outer-symposium", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.3426034487185167, pvalue=4.783676915903063e-11)" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['transe'])" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "dated-fossil", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.5033109176274052, pvalue=8.216396781208269e-24)" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['text'])" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "intermediate-assumption", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.3995842133820817, pvalue=8.237702943903066e-15)" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordsimDF1['Human (Mean)'].to_list(), wordsimDF1['class'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "offensive-tamil", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "399px" - }, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/TextEmbed UnitTest.ipynb b/TextEmbed UnitTest.ipynb deleted file mode 100644 index 0bc93c9..0000000 --- a/TextEmbed UnitTest.ipynb +++ /dev/null @@ -1,1093 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 26, - "id": "addressed-titanium", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import gzip\n", - "from tqdm.notebook import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "returning-matthew", - "metadata": {}, - "outputs": [], - "source": [ - "text_emb = pd.read_csv('../output/text-embeddings/missing_nodes.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "familiar-investment", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['Q1000959', 'Q100156149', 'Q100276118', 'Q100287557', 'Q100306102',\n", - " 'Q100325978', 'Q100345932', 'Q100347932', 'Q100347974',\n", - " 'Q100348014', 'Q100348021', 'Q100348032', 'Q100348054',\n", - " 'Q100348078', 'Q100385591', 'Q100385624', 'Q100385642',\n", - " 'Q100385667', 'Q100388742', 'Q100388938'], dtype=object)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "text_emb.node1.unique()[:20]" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "announced-andorra", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['P279', 'P31', 'P373', 'P452', 'P1382', 'P106'], dtype=object)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "text_emb.label.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "upper-facing", - "metadata": {}, - "outputs": [], - "source": [ - "subset_nodes = set(['Q1000959', 'Q100156149', 'Q100276118', 'Q100287557', 'Q100306102',\n", - " 'Q1000959', 'Q105046695', 'Q105416259', 'Q105135334'])" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "separate-fishing", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "text_emb = text_emb[text_emb.node1.apply(lambda p: p in subset_nodes)].reset_index().drop(columns=['index'])" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "impossible-spanking", - "metadata": {}, - "outputs": [], - "source": [ - "text_emb.to_csv('../TEMP/kgtk_unittest/text_embedding.edges.tsv', sep='\\t', index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "permanent-worship", - "metadata": {}, - "outputs": [], - "source": [ - "def get_labels(node_set):\n", - " labels_dict = {}\n", - " lines = []\n", - " first_line = None\n", - " with gzip.open(\"../source_dataset_files/wikidata-20210215-dwd-v2/labels.en.tsv.gz\", 'r') as labelsFile:\n", - " for ogline in tqdm(labelsFile, total=41845781):\n", - " if first_line:\n", - " first_line = False\n", - " lines.append(ogline)\n", - " continue\n", - " line = ogline.decode('utf-8').strip().split('\\t')\n", - " line[3] = line[3][1:-5]\n", - " qnode, label = line[1], line[3]\n", - " # print(qnode, label)\n", - " if qnode in node_set:\n", - " lines.append(ogline)\n", - " return lines" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "visible-fashion", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e18b3e37f3ad45c5b4ecc4165cc1a08a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/41845781 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q105135334text_embedding-0.6744056,-0.2023162,-0.27134913,-0.13181135,...
1Q105135334embedding_sentenceNaN
2Q105046695text_embedding-0.6744056,-0.2023162,-0.27134913,-0.13181135,...
3Q105046695embedding_sentenceNaN
4Q100306102text_embedding-0.6744056,-0.2023162,-0.27134913,-0.13181135,...
5Q100306102embedding_sentenceNaN
6Q100287557text_embedding-0.6744056,-0.2023162,-0.27134913,-0.13181135,...
7Q100287557embedding_sentenceNaN
8Q100276118text_embedding-0.6744056,-0.2023162,-0.27134913,-0.13181135,...
9Q100276118embedding_sentenceNaN
10Q100156149text_embedding-0.6744056,-0.2023162,-0.27134913,-0.13181135,...
11Q100156149embedding_sentenceNaN
12Q1000959text_embedding-0.6744056,-0.2023162,-0.27134913,-0.13181135,...
13Q1000959embedding_sentenceNaN
\n", - "" - ], - "text/plain": [ - " node property \\\n", - "0 Q105135334 text_embedding \n", - "1 Q105135334 embedding_sentence \n", - "2 Q105046695 text_embedding \n", - "3 Q105046695 embedding_sentence \n", - "4 Q100306102 text_embedding \n", - "5 Q100306102 embedding_sentence \n", - "6 Q100287557 text_embedding \n", - "7 Q100287557 embedding_sentence \n", - "8 Q100276118 text_embedding \n", - "9 Q100276118 embedding_sentence \n", - "10 Q100156149 text_embedding \n", - "11 Q100156149 embedding_sentence \n", - "12 Q1000959 text_embedding \n", - "13 Q1000959 embedding_sentence \n", - "\n", - " value \n", - "0 -0.6744056,-0.2023162,-0.27134913,-0.13181135,... \n", - "1 NaN \n", - "2 -0.6744056,-0.2023162,-0.27134913,-0.13181135,... \n", - "3 NaN \n", - "4 -0.6744056,-0.2023162,-0.27134913,-0.13181135,... \n", - "5 NaN \n", - "6 -0.6744056,-0.2023162,-0.27134913,-0.13181135,... \n", - "7 NaN \n", - "8 -0.6744056,-0.2023162,-0.27134913,-0.13181135,... \n", - "9 NaN \n", - "10 -0.6744056,-0.2023162,-0.27134913,-0.13181135,... \n", - "11 NaN \n", - "12 -0.6744056,-0.2023162,-0.27134913,-0.13181135,... \n", - "13 NaN " - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp1" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "chronic-isaac", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q105416259text_embedding0.062068786,-0.04527851,0.08445225,0.020385189...
1Q105416259embedding_sentenceIt is Content creation, group of humans.
2Q105135334text_embedding-0.5932912,0.15151715,0.12169738,-0.57092476,0...
3Q105135334embedding_sentenceIt is costume component, hatband.
4Q105046695text_embedding0.78254557,0.7347305,-0.24301007,-0.40795732,0...
5Q105046695embedding_sentenceIt is field of work, health care industry, ser...
6Q100306102text_embedding1.0986179,0.4818771,-0.46546745,0.28162912,1.0...
7Q100306102embedding_sentenceIt is bridged compound, pair of enantiomers.
8Q100287557text_embedding0.91020757,0.6681585,-0.3698121,2.749119,1.556...
9Q100287557embedding_sentenceIt is mushroom dish, veggie burger.
10Q100276118text_embedding0.52650917,0.6521489,0.014877399,0.8474146,1.1...
11Q100276118embedding_sentenceIt is group of stereoisomers, sugar acid.
12Q100156149text_embedding-0.34179834,0.9796913,-1.2001768,0.9455819,0.6...
13Q100156149embedding_sentenceIt is food brand, meat analogue.
14Q1000959text_embedding0.026072552,1.0901248,-1.0570514,-0.83307713,1...
15Q1000959embedding_sentenceIt is Reanda (apple), apple, apple cultivar.
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q105416259 text_embedding \n", - "1 Q105416259 embedding_sentence \n", - "2 Q105135334 text_embedding \n", - "3 Q105135334 embedding_sentence \n", - "4 Q105046695 text_embedding \n", - "5 Q105046695 embedding_sentence \n", - "6 Q100306102 text_embedding \n", - "7 Q100306102 embedding_sentence \n", - "8 Q100287557 text_embedding \n", - "9 Q100287557 embedding_sentence \n", - "10 Q100276118 text_embedding \n", - "11 Q100276118 embedding_sentence \n", - "12 Q100156149 text_embedding \n", - "13 Q100156149 embedding_sentence \n", - "14 Q1000959 text_embedding \n", - "15 Q1000959 embedding_sentence \n", - "\n", - " value \n", - "0 0.062068786,-0.04527851,0.08445225,0.020385189... \n", - "1 It is Content creation, group of humans. \n", - "2 -0.5932912,0.15151715,0.12169738,-0.57092476,0... \n", - "3 It is costume component, hatband. \n", - "4 0.78254557,0.7347305,-0.24301007,-0.40795732,0... \n", - "5 It is field of work, health care industry, ser... \n", - "6 1.0986179,0.4818771,-0.46546745,0.28162912,1.0... \n", - "7 It is bridged compound, pair of enantiomers. \n", - "8 0.91020757,0.6681585,-0.3698121,2.749119,1.556... \n", - "9 It is mushroom dish, veggie burger. \n", - "10 0.52650917,0.6521489,0.014877399,0.8474146,1.1... \n", - "11 It is group of stereoisomers, sugar acid. \n", - "12 -0.34179834,0.9796913,-1.2001768,0.9455819,0.6... \n", - "13 It is food brand, meat analogue. \n", - "14 0.026072552,1.0901248,-1.0570514,-0.83307713,1... \n", - "15 It is Reanda (apple), apple, apple cultivar. " - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp2" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "specific-listening", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv2/lib/python3.8/site-packages/rdflib_jsonld/__init__.py:9: DeprecationWarning: The rdflib-jsonld package has been integrated into rdflib as of rdflib==6.0.1. Please remove rdflib-jsonld from your project's dependencies.\n", - " warnings.warn(\n", - "Batches: 0%| | 0/1 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q105416259text_embedding0.062068786,-0.04527851,0.08445225,0.020385189...
1Q105416259embedding_sentenceIt is Content creation, group of humans.
2Q105135334text_embedding-0.5932912,0.15151715,0.12169738,-0.57092476,0...
3Q105135334embedding_sentenceIt is costume component, hatband.
4Q105046695text_embedding0.78254557,0.7347305,-0.24301007,-0.40795732,0...
5Q105046695embedding_sentenceIt is field of work, health care industry, ser...
6Q100306102text_embedding1.0986179,0.4818771,-0.46546745,0.28162912,1.0...
7Q100306102embedding_sentenceIt is bridged compound, pair of enantiomers.
8Q100287557text_embedding0.91020757,0.6681585,-0.3698121,2.749119,1.556...
9Q100287557embedding_sentenceIt is mushroom dish, veggie burger.
10Q100276118text_embedding0.52650917,0.6521489,0.014877399,0.8474146,1.1...
11Q100276118embedding_sentenceIt is group of stereoisomers, sugar acid.
12Q100156149text_embedding-0.34179834,0.9796913,-1.2001768,0.9455819,0.6...
13Q100156149embedding_sentenceIt is food brand, meat analogue.
14Q1000959text_embedding0.026072552,1.0901248,-1.0570514,-0.83307713,1...
15Q1000959embedding_sentenceIt is Reanda (apple), apple, apple cultivar.
\n", - "" - ], - "text/plain": [ - " node property \\\n", - "0 Q105416259 text_embedding \n", - "1 Q105416259 embedding_sentence \n", - "2 Q105135334 text_embedding \n", - "3 Q105135334 embedding_sentence \n", - "4 Q105046695 text_embedding \n", - "5 Q105046695 embedding_sentence \n", - "6 Q100306102 text_embedding \n", - "7 Q100306102 embedding_sentence \n", - "8 Q100287557 text_embedding \n", - "9 Q100287557 embedding_sentence \n", - "10 Q100276118 text_embedding \n", - "11 Q100276118 embedding_sentence \n", - "12 Q100156149 text_embedding \n", - "13 Q100156149 embedding_sentence \n", - "14 Q1000959 text_embedding \n", - "15 Q1000959 embedding_sentence \n", - "\n", - " value \n", - "0 0.062068786,-0.04527851,0.08445225,0.020385189... \n", - "1 It is Content creation, group of humans. \n", - "2 -0.5932912,0.15151715,0.12169738,-0.57092476,0... \n", - "3 It is costume component, hatband. \n", - "4 0.78254557,0.7347305,-0.24301007,-0.40795732,0... \n", - "5 It is field of work, health care industry, ser... \n", - "6 1.0986179,0.4818771,-0.46546745,0.28162912,1.0... \n", - "7 It is bridged compound, pair of enantiomers. \n", - "8 0.91020757,0.6681585,-0.3698121,2.749119,1.556... \n", - "9 It is mushroom dish, veggie burger. \n", - "10 0.52650917,0.6521489,0.014877399,0.8474146,1.1... \n", - "11 It is group of stereoisomers, sugar acid. \n", - "12 -0.34179834,0.9796913,-1.2001768,0.9455819,0.6... \n", - "13 It is food brand, meat analogue. \n", - "14 0.026072552,1.0901248,-1.0570514,-0.83307713,1... \n", - "15 It is Reanda (apple), apple, apple cultivar. " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "out_df" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "sharing-equilibrium", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q105416259text_embedding0.062068786,-0.04527851,0.08445225,0.020385189...
1Q105416259embedding_sentenceIt is Content creation, group of humans.
2Q105135334text_embedding-0.5932912,0.15151715,0.12169738,-0.57092476,0...
3Q105135334embedding_sentenceIt is costume component, hatband.
4Q105046695text_embedding0.78254557,0.7347305,-0.24301007,-0.40795732,0...
5Q105046695embedding_sentenceIt is field of work, health care industry, ser...
6Q100306102text_embedding1.0986179,0.4818771,-0.46546745,0.28162912,1.0...
7Q100306102embedding_sentenceIt is bridged compound, pair of enantiomers.
8Q100287557text_embedding0.91020757,0.6681585,-0.3698121,2.749119,1.556...
9Q100287557embedding_sentenceIt is mushroom dish, veggie burger.
10Q100276118text_embedding0.52650917,0.6521489,0.014877399,0.8474146,1.1...
11Q100276118embedding_sentenceIt is group of stereoisomers, sugar acid.
12Q100156149text_embedding-0.34179834,0.9796913,-1.2001768,0.9455819,0.6...
13Q100156149embedding_sentenceIt is food brand, meat analogue.
14Q1000959text_embedding0.026072552,1.0901248,-1.0570514,-0.83307713,1...
15Q1000959embedding_sentenceIt is Reanda (apple), apple, apple cultivar.
\n", - "
" - ], - "text/plain": [ - " node property \\\n", - "0 Q105416259 text_embedding \n", - "1 Q105416259 embedding_sentence \n", - "2 Q105135334 text_embedding \n", - "3 Q105135334 embedding_sentence \n", - "4 Q105046695 text_embedding \n", - "5 Q105046695 embedding_sentence \n", - "6 Q100306102 text_embedding \n", - "7 Q100306102 embedding_sentence \n", - "8 Q100287557 text_embedding \n", - "9 Q100287557 embedding_sentence \n", - "10 Q100276118 text_embedding \n", - "11 Q100276118 embedding_sentence \n", - "12 Q100156149 text_embedding \n", - "13 Q100156149 embedding_sentence \n", - "14 Q1000959 text_embedding \n", - "15 Q1000959 embedding_sentence \n", - "\n", - " value \n", - "0 0.062068786,-0.04527851,0.08445225,0.020385189... \n", - "1 It is Content creation, group of humans. \n", - "2 -0.5932912,0.15151715,0.12169738,-0.57092476,0... \n", - "3 It is costume component, hatband. \n", - "4 0.78254557,0.7347305,-0.24301007,-0.40795732,0... \n", - "5 It is field of work, health care industry, ser... \n", - "6 1.0986179,0.4818771,-0.46546745,0.28162912,1.0... \n", - "7 It is bridged compound, pair of enantiomers. \n", - "8 0.91020757,0.6681585,-0.3698121,2.749119,1.556... \n", - "9 It is mushroom dish, veggie burger. \n", - "10 0.52650917,0.6521489,0.014877399,0.8474146,1.1... \n", - "11 It is group of stereoisomers, sugar acid. \n", - "12 -0.34179834,0.9796913,-1.2001768,0.9455819,0.6... \n", - "13 It is food brand, meat analogue. \n", - "14 0.026072552,1.0901248,-1.0570514,-0.83307713,1... \n", - "15 It is Reanda (apple), apple, apple cultivar. " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "expected_out_df" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Untitled.ipynb b/Untitled.ipynb deleted file mode 100644 index 363fcab..0000000 --- a/Untitled.ipynb +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cells": [], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Wikidata CS Exploration.ipynb b/Wikidata CS Exploration.ipynb deleted file mode 100644 index df3389c..0000000 --- a/Wikidata CS Exploration.ipynb +++ /dev/null @@ -1,10807 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "familiar-forest", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import os\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from matplotlib import pyplot" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "indonesian-mambo", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF = pd.read_csv('../data/wikidata-cs-20200504.tsv',sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "distributed-spice", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node1relationnode2node1;labelnode2;labelrelation;labelrelation;dimensionsourcesentence
0P1449/r/IsAP2561nicknamenamesubproperty ofNaNWDNaN
1P1449/r/RelatedToQ49614nicknamenicknamesubject item of this propertyNaNWDNaN
2P1547/r/RelatedToQ56859575depends on softwaresoftware dependencysubject item of this propertyNaNWDNaN
3P1592/r/RelatedToP1593prosecutordefendersee alsoNaNWDNaN
4P1593/r/RelatedToP1592defenderprosecutorsee alsoNaNWDNaN
\n", - "
" - ], - "text/plain": [ - " node1 relation node2 node1;label node2;label \\\n", - "0 P1449 /r/IsA P2561 nickname name \n", - "1 P1449 /r/RelatedTo Q49614 nickname nickname \n", - "2 P1547 /r/RelatedTo Q56859575 depends on software software dependency \n", - "3 P1592 /r/RelatedTo P1593 prosecutor defender \n", - "4 P1593 /r/RelatedTo P1592 defender prosecutor \n", - "\n", - " relation;label relation;dimension source sentence \n", - "0 subproperty of NaN WD NaN \n", - "1 subject item of this property NaN WD NaN \n", - "2 subject item of this property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 see also NaN WD NaN " - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "proof-toddler", - "metadata": {}, - "outputs": [], - "source": [ - "mapper1 = {'/r/DistinctFrom': 'distinctness',\n", - " '/r/Antonym': 'antonymy',\n", - " '/r/Synonym': 'synonymy',\n", - " '/r/SimilarTo': 'similarity',\n", - " '/r/DerivedFrom': 'derivation',\n", - " '/r/IsA': 'inheritance',\n", - " '/r/PartOf': 'meronymy',\n", - " '/r/MadeOf': 'material',\n", - " '/r/CreatedBy': 'attribution',\n", - " '/r/UsedFor': 'utility',\n", - " '/r/HasProperty': 'properties',\n", - " '/r/Causes': 'causation',\n", - " '/r/HasPrerequisite': 'ordering',\n", - " '/r/HasContext': 'context',\n", - " '/r/RelatedTo': 'other'}\n", - "\n", - "wikiDF['dim'] = wikiDF['relation'].apply(lambda p: mapper1[p])" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "offshore-millennium", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['category'] = wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' or p == 'similarity' else 'M')" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "finished-fashion", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "inheritance 72707\n", - "meronymy 6886\n", - "context 5541\n", - "distinctness 4934\n", - "utility 2243\n", - "antonymy 2184\n", - "ordering 2107\n", - "material 1426\n", - "synonymy 1070\n", - "properties 1049\n", - "derivation 540\n", - "causation 510\n", - "similarity 345\n", - "attribution 187\n", - "other 42\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF['dim'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "working-terrain", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 100701\n", - "I 1070\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF['dim'].apply(lambda p: 'I' if p == 'synonymy' else 'M').value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "artificial-publisher", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF[wikiDF.apply(lambda p: p['node1'].startswith('Q') and p['node2'].startswith('Q'), axis=1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "fourth-metabolism", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 100110\n", - "I 1415\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF1.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "numeric-optics", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1 = wikiDF1.rename(columns={'node1':'word1_kg_id', 'node2':'word2_kg_id'})" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "optical-bradley", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF1[['word1_kg_id', 'word2_kg_id', 'category', 'node1;label', 'node2;label']].to_csv('../data/wikidata-cs_categorized.csv',index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "confidential-pasta", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "waiting-layout", - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "masterP279Nodes = json.load(open('../data/Master_P279_dataset/P279ChildPar_transP279_filtered_nodes.json'))" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "advised-small", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idrelationword2_kg_idnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencedimcategory
119Q1006348/r/IsAQ15916540indirect speechsemantic unitsubclass ofNaNWDNaNinheritanceM
122Q1006428/r/HasContextQ11452two-body problem in general relativitygeneral relativityfacet ofNaNWDNaNcontextM
132Q10082670/r/AntonymQ10943095elder sisteryounger sisteropposite ofNaNWDNaNantonymyM
134Q10082670/r/AntonymQ3972282elder sisterelder brotheropposite ofNaNWDNaNantonymyM
146Q1010947/r/DistinctFromQ390104glamour photographyglamourdifferent fromNaNWDNaNdistinctnessM
....................................
101729Q996599/r/IsAQ211391long weekendweekendsubclass ofNaNWDNaNinheritanceM
101737Q997419/r/IsAQ1151733closerbaseball positioninstance ofNaNWDNaNinheritanceM
101738Q997419/r/IsAQ1198553closerrelief pitchersubclass ofNaNWDNaNinheritanceM
101759Q998922/r/UsedForQ1770547blackout light bulbblackoutuseNaNWDNaNutilityM
101767Q999803/r/IsAQ55387456sublimeaesthetic conceptinstance ofNaNWDNaNinheritanceM
\n", - "

13195 rows × 11 columns

\n", - "
" - ], - "text/plain": [ - " word1_kg_id relation word2_kg_id \\\n", - "119 Q1006348 /r/IsA Q15916540 \n", - "122 Q1006428 /r/HasContext Q11452 \n", - "132 Q10082670 /r/Antonym Q10943095 \n", - "134 Q10082670 /r/Antonym Q3972282 \n", - "146 Q1010947 /r/DistinctFrom Q390104 \n", - "... ... ... ... \n", - "101729 Q996599 /r/IsA Q211391 \n", - "101737 Q997419 /r/IsA Q1151733 \n", - "101738 Q997419 /r/IsA Q1198553 \n", - "101759 Q998922 /r/UsedFor Q1770547 \n", - "101767 Q999803 /r/IsA Q55387456 \n", - "\n", - " node1;label node2;label \\\n", - "119 indirect speech semantic unit \n", - "122 two-body problem in general relativity general relativity \n", - "132 elder sister younger sister \n", - "134 elder sister elder brother \n", - "146 glamour photography glamour \n", - "... ... ... \n", - "101729 long weekend weekend \n", - "101737 closer baseball position \n", - "101738 closer relief pitcher \n", - "101759 blackout light bulb blackout \n", - "101767 sublime aesthetic concept \n", - "\n", - " relation;label relation;dimension source sentence dim \\\n", - "119 subclass of NaN WD NaN inheritance \n", - "122 facet of NaN WD NaN context \n", - "132 opposite of NaN WD NaN antonymy \n", - "134 opposite of NaN WD NaN antonymy \n", - "146 different from NaN WD NaN distinctness \n", - "... ... ... ... ... ... \n", - "101729 subclass of NaN WD NaN inheritance \n", - "101737 instance of NaN WD NaN inheritance \n", - "101738 subclass of NaN WD NaN inheritance \n", - "101759 use NaN WD NaN utility \n", - "101767 instance of NaN WD NaN inheritance \n", - "\n", - " category \n", - "119 M \n", - "122 M \n", - "132 M \n", - "134 M \n", - "146 M \n", - "... ... \n", - "101729 M \n", - "101737 M \n", - "101738 M \n", - "101759 M \n", - "101767 M \n", - "\n", - "[13195 rows x 11 columns]" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF1[wikiDF1.word1_kg_id.apply(lambda p: p not in masterP279Nodes) & wikiDF1.word2_kg_id.apply(lambda p: p not in masterP279Nodes)]" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "alpine-password", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "238889" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(masterP279Nodes)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "civilian-induction", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimSet = list(set(wikiDF.node1.to_list() + wikiDF.node2.to_list()))" - ] - }, - { - "cell_type": "markdown", - "id": "peripheral-alignment", - "metadata": {}, - "source": [ - "# Fetch Embeddings" - ] - }, - { - "cell_type": "markdown", - "id": "alpine-magnet", - "metadata": {}, - "source": [ - "## Complex + Transe" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "advisory-tablet", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64865436\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74433572\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047190\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47708201\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16939336\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75815335\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638383\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74201282\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29352977\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047182\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61948580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57636639\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636435\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10384086\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18384500\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59618753\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49553430\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56003279\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7257714\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36708708\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71834669\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21993815\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84288054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5102\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78849858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047225\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71569224\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56267862\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61160732\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23699967\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3730867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4819858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45813532\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84687204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38456828\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036634\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48667794\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2842797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59158264\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705316\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P8047\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36249200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84266649\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92011189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91463293\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58306048\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46256183\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58991462\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81772066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068088\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21263930\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66571828\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23940203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21119540\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47452597\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34153889\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85509189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611037\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68154669\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35848856\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51917600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965794\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37761983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047185\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12860009\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36258590\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746648\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77667037\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61314006\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681853\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852604\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60669731\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625811\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734414\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49689498\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35588820\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61466331\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1208509\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56478376\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44687559\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3514338\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89680726\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19990790\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29543009\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70704507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032617\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20026782\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50332811\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60621802\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10520944\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84757986\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29578707\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5589518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12600952\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46785334\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17158079\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34768712\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42517203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3783318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50350470\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58902427\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22269594\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18603649\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50902564\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61798329\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5460182\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53556002\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5328\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59383129\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61090213\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10340288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17997011\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3411290\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54854669\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24632433\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q805333\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87977249\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61067884\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5502339\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2404985\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59475075\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2140654\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80432189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59211677\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77667126\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q140702\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915160\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46256234\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56977400\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59282004\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34200888\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7442\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73863282\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21162274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59044212\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872469\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6720214\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66368425\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047187\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58997978\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11194929\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60941978\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56021177\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64905317\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79679221\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2695\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37286659\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047211\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58979956\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11497457\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59618757\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965916\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52399926\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58603740\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77340449\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51881207\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17164790\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773855\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58998468\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2995983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667095\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59089601\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56680038\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56030389\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030324\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20975596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851517\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84271640\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69585136\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71470174\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17231698\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59089144\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68065658\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69585141\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5901\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36536067\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38069463\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038346\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60431603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1413969\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58647874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5280\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91515771\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53496919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59079146\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851567\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3746141\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56681204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78097957\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71283344\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915167\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73865001\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62404518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25504044\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6570\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58143241\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88178923\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29306015\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59078556\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84298834\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87938350\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2319440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1538854\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59475077\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45799055\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45266300\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59070578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72283908\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89184820\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3930265\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60723856\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25380544\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29545850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57604775\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705289\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915169\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62585847\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56114341\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59033819\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090823\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24899199\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60547335\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29037088\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85715771\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44294891\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693095\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12796995\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46830821\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28008313\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89769133\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681531\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1720112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667270\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43473459\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694213\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41835716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38506410\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58612101\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36734639\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78090690\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681942\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68199869\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63792261\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5004618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746666\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7936630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6938\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58240553\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56658227\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73848146\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21002290\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73756526\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61105129\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38313140\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36430165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54961374\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25039503\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37905234\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7233740\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66502807\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58876537\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59092008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24965030\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56701187\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73864535\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19828273\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3535978\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18683008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49614548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5563081\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16325409\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18203247\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636729\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64118912\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87929782\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56775315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89378209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681502\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57933188\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6503676\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34524288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038547\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681899\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60742379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708672\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7391\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92011183\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59005641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18557741\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10509119\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047210\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40531095\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89422969\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16631246\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63185173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37671364\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64810046\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73310208\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91702724\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734597\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694120\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84246603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047179\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78048467\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2366980\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2184\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59450702\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734473\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11002263\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42790808\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57072416\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5477678\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16937917\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72342517\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49585733\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58179448\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5028\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78090598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69361740\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047197\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51880054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59078410\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25507913\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61846484\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66572332\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41222313\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58487888\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30893837\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73572813\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15935592\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21597741\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47326539\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84275487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3933466\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10270022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58685254\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89680721\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29644036\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12104597\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57636900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12050975\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50168827\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59005418\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10885494\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50429082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36015502\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59406506\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55923238\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18286698\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P968\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73366170\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56270098\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90132359\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66591238\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74435781\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681565\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63395686\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63886763\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2515879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68582414\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57470203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12301679\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30156437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57398400\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24962761\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681838\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54070999\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4818169\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11902783\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75838596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47772347\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67141864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10380381\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P958\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89350258\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7283951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29819756\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852601\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37862578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30047267\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6571\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625581\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47226657\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10934814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58966165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74474288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6422240\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47576960\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746662\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965282\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52171487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6710\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58813489\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68731010\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60363191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58043865\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87885144\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692762\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87169767\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71898438\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89769097\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90865542\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1327189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72492945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77893681\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73041322\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627072\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980469\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55312002\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35922832\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53911696\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11739050\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18119757\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88009688\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q14405929\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10546472\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q93003322\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77556661\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45763191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765317\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35760525\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87937643\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89223871\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74217532\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84275300\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50454993\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18553215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29513828\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56334790\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57657179\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42157065\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45945663\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6619637\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58966208\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17144564\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78029495\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11379779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61699843\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68848439\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5991\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56019945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71916144\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6534\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59076817\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3710530\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46384387\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61249011\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693069\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71802787\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667303\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773436\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78967694\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30921616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41909633\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17123440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59628350\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2506578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64763437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61811214\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12486429\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24577909\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15706459\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56658228\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56337509\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84242091\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q628338\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59037848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36945766\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30918204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70556965\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765365\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41376951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47122316\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68279721\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53919919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57705019\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51692243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5027\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55951022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25043878\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64641618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62336542\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18434478\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55465477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60357246\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3177897\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30900883\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41571311\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59526222\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5706\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2361\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90916278\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59031409\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37893165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17992424\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84274329\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25098695\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56400906\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16029504\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56699099\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84277239\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82334064\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852606\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57287735\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6427\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59618755\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q9392141\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57407542\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6731581\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38907749\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67055629\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2535710\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40287877\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58926227\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37415888\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60357352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69368835\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59973208\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29585699\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84246614\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59915587\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60962156\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78553203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q874632\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66525126\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61986723\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1552\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57535936\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5307082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87070600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54290607\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7725\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5202\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66587186\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6977\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75635724\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681949\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13359600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q26700386\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33474600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46921451\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62399025\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980687\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59417017\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56644793\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5832\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12308638\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6605486\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681424\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59033224\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65096040\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58257544\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54469554\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62555519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36163707\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15312278\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58928779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66562936\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72283596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006052\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40423311\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36597458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30082251\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55931874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53009238\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091694\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693211\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90476672\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980351\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56641102\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74435148\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627074\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681813\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27500609\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56680379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84861637\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59043198\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56972008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59289286\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036691\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852612\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44705203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56593453\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55729353\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78086915\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77088052\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75755497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51969935\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41359681\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6424\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21198084\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090868\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38964612\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56158192\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38887569\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2535605\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29963683\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64864078\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30914189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48277039\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90992880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7213\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1546\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55829848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58979822\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74477506\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60550474\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84274233\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89769137\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56672312\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57612933\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5281737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21014021\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64374415\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705292\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73375715\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74447306\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35219907\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708709\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74113345\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2579\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90117379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48930682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20980701\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5348\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q332209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734421\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12593257\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33545318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84479168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006766\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039381\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43787914\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61311233\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734481\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56639043\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667775\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667312\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25633436\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61534824\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36526633\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58772354\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69585145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693077\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42293501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734613\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7532\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37782758\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56030423\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68406538\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56866696\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58079010\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59002045\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70996933\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1504425\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39433287\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57206946\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62101992\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45813280\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047183\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59070275\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55632487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965337\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56604579\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28599815\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5895\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56297152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55280602\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734430\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59261899\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030201\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59077205\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49617371\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66556076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35033263\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52294396\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7239021\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63323005\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56557308\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56671877\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72037756\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56013865\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56990609\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60048131\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47615292\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88513819\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54943967\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5920\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56386521\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19314934\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60163121\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746782\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56170072\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q86413049\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48228719\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7462\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15223670\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65975031\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79317750\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59070515\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54505723\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40699216\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71473385\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25313145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q76004907\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58149242\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852624\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57534586\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66502818\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83380814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16068686\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27043390\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34575084\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5899\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53204287\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61249025\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q86463324\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57437234\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56429662\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59066517\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87913720\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6533\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41845366\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37056861\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5295538\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41226557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23923844\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58626642\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36967806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60066070\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746809\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2729443\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49137994\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60537443\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38554054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2896\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73298134\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032333\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13415408\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64995852\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87998261\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773852\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50826986\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5778223\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66124879\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2588838\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74480219\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10605247\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56836285\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69172740\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72376329\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2018565\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5685\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83133269\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58993316\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57454176\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55091104\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42365814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73420497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27334467\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59702429\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28026076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34624535\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73420767\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24241569\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37736364\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51876193\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54400168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636905\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84274956\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58244802\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11302682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59043121\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19915274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50869987\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41673723\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18014941\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16023742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708534\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36536082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12041905\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68287507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88524690\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18059293\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13164480\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73010357\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60723552\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58926708\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667515\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59406504\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28132458\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667322\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89680732\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3625632\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39210110\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047186\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55968809\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64006842\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39974398\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705297\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006471\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60481617\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83365205\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773865\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84276764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091067\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12016773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75224630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5994\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75798762\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34307362\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33947320\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87282988\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89184453\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56639568\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82452792\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5828\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63041650\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73797856\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68861473\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29789760\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75800566\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12593409\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27437064\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84275833\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58988215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91901288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59005988\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21082583\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33339426\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741273\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38023488\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60059934\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84273997\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61877212\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59043484\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29035123\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852617\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57579202\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66425262\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84481119\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56430961\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708707\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1679325\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72839445\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681738\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38268291\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80809031\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63616194\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10593480\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62001428\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2717928\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37983307\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89866637\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638153\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5030\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1916384\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46031408\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55579288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746754\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24289083\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66615778\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56626243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20741385\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47880328\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q681501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25036082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59092300\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56656109\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56657450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70569900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7888\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q86748173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49490137\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56522048\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1752\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84365227\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43906807\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61797590\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3440287\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66018184\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18393083\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58991654\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70529933\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6241\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66573890\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75066484\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73128185\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53380051\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59135880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90316618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73544861\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1114\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92314923\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74522432\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56626440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66591864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71471711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19480970\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89680730\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87997922\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92349858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19921713\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49978699\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84287042\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30070550\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52129798\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21517123\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62917831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6840\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29618407\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17014863\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29306775\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681830\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5869\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4457167\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5816\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58325003\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20731983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80506147\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1876\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11246094\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56313795\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13219330\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62050258\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84357886\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694223\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625606\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11885950\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84479926\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58133296\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57497365\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58626655\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965958\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70082418\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58033479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29032132\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1366\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681537\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24798621\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006157\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59520568\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34084891\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965858\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73453497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34023178\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16886387\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91795629\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59047434\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58998054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1362246\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28914401\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734522\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85803433\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30321648\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45943611\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61483973\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6540\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7973762\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59001841\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49689000\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54562540\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7407\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915196\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56659497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5096\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2572045\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16885408\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19842222\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73358971\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55786071\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92026114\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22907149\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56655847\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66563571\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38070288\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047216\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757088\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708668\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66711013\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78739799\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37176024\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59458414\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78034362\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84287790\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52642505\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625984\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667560\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50147705\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58628265\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71404012\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611103\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59077830\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55933001\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032676\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694103\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59345268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757030\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22329445\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73862249\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66503444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852614\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57539737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59383678\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44464056\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75630156\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58964107\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852626\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16287483\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58985929\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3712\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667841\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2353\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22675364\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33945850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2212\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79448203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57072435\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80467138\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611025\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58918513\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090470\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693101\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047196\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980098\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57395864\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60431620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693167\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047207\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91848848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58964833\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708854\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038117\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667503\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55880952\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58173479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70710519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82434561\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66591130\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1269\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58169884\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66501877\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6510\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42759688\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16327012\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16710805\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23037753\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852627\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72076483\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5896\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q9311444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3643\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1365\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039442\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73301796\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81368221\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7649212\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88013874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57535318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58982742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33887149\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45820870\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047205\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q426745\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65602465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851595\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56658776\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58135900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78085108\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11285593\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q498187\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88355601\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61311241\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59078491\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22809145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7160\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7162\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22330256\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7253\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66558559\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66821598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82969330\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87988388\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73848127\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74412363\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1581\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64357639\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55025113\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60517680\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638152\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56040042\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88192695\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17142722\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40866874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34197343\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734348\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29802965\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66560167\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852607\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60103941\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56675254\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59155479\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82154252\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56851764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1697092\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681495\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852631\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84276996\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q93239268\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58169679\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692770\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55789150\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52438272\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55931410\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2561\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068077\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915193\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7318444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45810671\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33979925\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57760761\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18980173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637871\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47553356\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92416090\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58925773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74210507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47115461\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57535356\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58796782\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q8034325\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851601\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87940165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5004\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2194191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60059926\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73848149\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88447596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58898396\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74438741\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5341286\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35219848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765322\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090938\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88477341\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q14851902\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047192\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33980030\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708657\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636727\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59034803\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741107\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80458698\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18554460\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23891869\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56396141\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60017057\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30160032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637911\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62097168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q76000613\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741105\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18555209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965613\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681456\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18918145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6237\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757063\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036094\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58195013\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q248376\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49576178\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66590580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15966439\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006753\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21126507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53246532\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61901861\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4500\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039661\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56037513\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2130900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64853641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68241600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23214504\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56658166\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1547\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12884555\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3301\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90278705\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59078013\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85111803\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49688339\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3729\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28050380\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30323970\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11607438\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62555595\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55931868\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60303776\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60172104\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71331747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61459352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047174\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68087009\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q24338379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61248632\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5898\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39570919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84078018\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59036022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q13373900\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6568\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74387518\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694107\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2198\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67696175\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77655668\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74205111\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42518897\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3343005\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64870206\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36536076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60565106\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59031039\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87977781\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3037\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667537\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60680507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87289789\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q26454986\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039938\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6875\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40840080\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q76000631\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5905651\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7081\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84481066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88420616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12094812\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73118411\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692947\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56376142\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2566026\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090766\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55884446\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42641723\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667360\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4495716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q93290588\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91141252\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11224008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6939\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091794\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44883975\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79213588\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35647276\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30082658\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29011738\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15504007\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64812851\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16924633\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4566\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38279875\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67735768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63431159\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74472668\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89722738\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30891544\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79388814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55981170\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63436639\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58283387\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60085543\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q82785806\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47524426\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63400219\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91941315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36757992\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60682186\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20850849\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60123818\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692914\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84248466\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59002580\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59035851\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q8261440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54399662\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3730\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15850590\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030918\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708577\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38331872\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47690568\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56214810\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57591831\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66505181\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20820011\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q846360\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30019717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17542926\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765348\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12336608\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12183006\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1227747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69336485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2987450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708572\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73864627\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2921726\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85809429\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667090\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78182962\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43950725\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84471501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91250837\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71880890\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68408145\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708744\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35961983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81120140\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44068575\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92701441\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694233\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611132\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047209\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1868\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6544\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q14905949\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038281\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25041611\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28242379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872821\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36775166\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56626751\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58255465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667851\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52426347\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58925772\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q69876814\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58926711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87885168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56384597\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54431752\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28954843\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87940127\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91642204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5422\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54214049\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60594464\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91463287\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734607\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23038556\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66589334\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3956339\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70460306\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5670\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980244\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59216528\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872824\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2782326\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006354\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65028437\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33701841\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15897261\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67139485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34104031\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56672416\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30053546\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61067972\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37242078\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34524203\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60033529\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55898578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79325569\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41899000\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667103\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56565444\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21134443\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84248690\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980539\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59037922\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47407371\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61795263\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59006450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681511\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694142\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59035942\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692752\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757012\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56708982\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49688389\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5069\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89266623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1449\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44305455\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36674878\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965155\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17991986\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746751\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21075823\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21504918\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3295\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18391611\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16474028\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047218\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56384970\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965205\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741266\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84247773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1772797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17050236\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765371\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1859784\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56445754\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12027742\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84298625\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1592\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3822\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4295\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58558163\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56698946\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50451671\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7318358\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61249010\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P559\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59616003\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43195545\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58812539\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51159225\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667258\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746791\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53931299\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55396945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84247973\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43916273\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61248612\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33038168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74030064\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84246439\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636702\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030394\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12051308\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56605590\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q14905700\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49553500\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068075\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84274685\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63410620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66789593\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78027215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33082998\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71125249\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91666984\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66544192\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12599076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59037526\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22911774\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61248784\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56384971\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852619\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78119547\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73923194\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37138983\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59155052\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38247154\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88284939\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851578\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57826006\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2030245\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60094972\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89757102\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41806836\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746675\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52076135\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16034400\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87939741\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40362623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22236200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73305703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6619771\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60727419\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42463776\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734359\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37750115\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84299551\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3006801\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58982779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28502569\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681586\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58133302\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72358764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35026666\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57629324\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6855\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681855\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852599\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27885123\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58730533\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56687451\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67785005\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7261\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74437022\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27889310\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63437359\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62555520\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6587\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17781874\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61834409\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79485608\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23037745\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83512382\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681591\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637101\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637169\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56638154\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56611318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89508939\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18236098\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59076898\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091862\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6166\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58981315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2281630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52171144\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980125\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55890146\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2381062\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2852\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62554494\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6646014\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56236880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28008243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59090560\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6902\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068258\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41446476\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q180043\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91432327\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67040294\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44007369\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35867112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89705318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56659498\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6543\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708507\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5900655\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58983008\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66571827\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46151838\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50603365\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746733\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67144180\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40984512\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57608808\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741235\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33767112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56680078\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12046878\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7727\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2215100\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59157150\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2795\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46036445\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746872\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63979927\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6563\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34585815\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75801718\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64260953\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70568725\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55880194\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63090339\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1821278\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29042904\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20669604\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59043538\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765319\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46677538\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57590655\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52107525\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20055526\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45902465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12550685\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34173945\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1858025\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965656\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44516919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746835\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56602003\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51299378\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1047129\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81570471\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7252\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5061\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42407168\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89756958\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60060659\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58381919\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55779861\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q85555308\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1775867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50713116\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5817\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63252853\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77875869\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49575935\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89741156\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36465471\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44329936\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77978519\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59037465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734515\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41750244\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91858696\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636913\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63770443\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55789049\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37546082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q49490023\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59486367\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694125\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2144951\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74616066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091616\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66507099\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43184554\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091159\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61745706\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52089653\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55891501\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61535026\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6224\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91739076\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89693072\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57933311\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58965603\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6619716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89055460\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55092971\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59089543\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7824266\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59001713\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16321430\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45182324\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36084786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66507330\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66515634\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59034548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83069379\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068225\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59155028\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40648173\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852608\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59731975\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P520\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66688937\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66724450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5769\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7415\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78086635\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58081477\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q571112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681642\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5897\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18168614\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746626\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34388618\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q130596\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692952\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55670964\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73215457\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681423\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55933978\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58381920\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87915157\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681756\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59040112\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55883560\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89454997\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q515487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30595453\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23037749\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58981855\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2914865\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3034808\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88013896\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6954\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q941413\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35689748\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16578059\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694221\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12043671\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17061485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67391763\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74506663\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46086677\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57072374\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068243\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59618768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36260332\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852613\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681445\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5967378\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2551\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765360\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59077764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56657164\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58390623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56657157\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15788778\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57858242\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708560\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5465488\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80120211\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047208\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59261901\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18356933\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77527200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59040057\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3030630\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18762207\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36475676\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708817\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87913717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47223703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77420921\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4533225\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P6545\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q17152310\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627421\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60729272\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58713397\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47004757\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89663016\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53027591\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q902733\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30625279\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61452488\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48015805\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35417711\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q68304097\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58024844\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q44042015\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42904932\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62089315\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58980816\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34995584\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72681620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q37669027\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52486321\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57826013\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734562\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57416641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88909747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59611218\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58082867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56773003\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61631779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71751401\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74517369\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58979818\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89694131\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56627877\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1759797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77481453\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q81568330\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43555634\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71880954\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q7623420\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59401950\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38247151\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45845277\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047180\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57261880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091516\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84246795\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q41639531\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59091275\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P3464\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57943840\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77253277\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52081983\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q67767032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068231\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872587\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89588525\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23817623\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38279586\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71379472\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64070093\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34119428\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89722744\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12337557\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q50431534\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16474032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57244577\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56679252\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63581565\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1576\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39562274\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59000604\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57960199\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55780736\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1593\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q40344522\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708528\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637962\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19963413\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2031\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84299002\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58304485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047184\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681638\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681936\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47519561\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87977785\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45890151\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56072650\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71872829\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P4184\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77966244\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59001078\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59447796\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12589783\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1880\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60098797\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55881606\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681649\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q11336440\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59189548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q39292352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64385953\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42693980\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61908421\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47508191\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47433319\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15070163\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59000798\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71036495\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57705098\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62037675\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78157652\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56639504\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708847\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46019721\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66511786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7719\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q1022439\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27918922\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89692779\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42559432\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12148487\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92120857\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55623778\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5423\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18340291\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55789494\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25933403\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89756950\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q42888697\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18679117\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59475250\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q2313210\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61067917\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7561\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46410656\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59757607\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q30279388\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56344544\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032189\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57773849\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q90467686\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681450\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29040297\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87979188\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79091747\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q19829402\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60568764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33695242\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708835\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58964868\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q70943739\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q80927264\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q29547799\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66591079\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q25446819\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18611872\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88180294\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52022204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89722728\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7604\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22980233\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33979600\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7165\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22808118\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q83563299\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21076236\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667509\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3492548\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047198\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q334622\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61661768\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52314749\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58901470\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q46828291\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q45224508\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60843717\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88535965\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59945468\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q47692241\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56852622\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54553637\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60530681\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33333393\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62515032\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q75744042\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q21862870\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3348314\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55185525\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62089361\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56625714\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28324850\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59039719\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3406405\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60065228\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12070726\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59038641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q230773\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77982012\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5261096\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56636641\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667352\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88862465\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58742620\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3268764\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q38247694\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56016940\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84288305\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61979400\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q6815348\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q10385896\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84288633\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030941\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q62019215\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59032045\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q61068061\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60065211\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59031265\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74202066\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q92700703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77696500\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56672039\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56047232\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89765312\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72041259\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q15077340\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681871\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84479664\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56060497\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59070402\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q33461541\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35717610\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q3177867\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64922682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q66590089\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84567767\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q34127834\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74424079\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681908\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q78295452\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P5304\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7122\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89681785\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89734410\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60208424\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q54452490\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q65683204\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84275997\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28590574\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53964612\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89308296\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59000318\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56637063\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P2341\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q74200193\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73851598\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q328566\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q79366664\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746848\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q76523972\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P156\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56092582\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35464229\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59493528\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q53559051\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q719419\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q84286737\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73935677\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58129147\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q93390200\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q87885164\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56297970\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64101776\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q22074608\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58297595\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60110\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28816010\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89667856\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q51599582\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q36388823\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28667703\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q57926311\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58158716\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q4569238\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q12893940\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72729171\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58392821\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7469\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18012653\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18553681\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q5193377\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59030279\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q91463220\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q55788456\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27865780\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q23067080\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q27983054\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q28129958\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q77166485\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58506813\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P7309\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q71044374\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q31087626\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73862359\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35554451\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q88020063\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/P1451\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59092080\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q52883628\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q35803642\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89746671\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56659539\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q20948792\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q16637260\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60095043\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q59035285\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q56659547\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q73221682\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q63459006\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q58901786\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q64768673\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q72463157\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q18059915\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89769082\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q89708731\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q43108199\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q60045937\n", - "Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/Q48340037\n" - ] - } - ], - "source": [ - "import requests\n", - "import json\n", - "\n", - "compEmbeddings = {}\n", - "transeEmbeddings = {}\n", - "\n", - "for wordID in wordSimSet:\n", - " try:\n", - " resp = requests.get(\"http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID).json()['_source']\n", - " compEmbeddings[wordID] = resp['graph_embedding_complex']\n", - " transeEmbeddings[wordID] = resp['graph_embeddings_transe']\n", - " except:\n", - " print(\"Failure returned for http://ckg07:9200/wikidatadwd-augmented/_doc/\"+wordID)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "complicated-puzzle", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['node1_compl_emb'] = wikiDF['node1'].apply(lambda p: compEmbeddings[p] if p in compEmbeddings else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "canadian-divorce", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['node2_compl_emb'] = wikiDF['node2'].apply(lambda p: compEmbeddings[p] if p in compEmbeddings else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "typical-delay", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['node1_transe_emb'] = wikiDF['node1'].apply(lambda p: transeEmbeddings[p] if p in transeEmbeddings else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "passive-magazine", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF['node2_transe_emb'] = wikiDF['node2'].apply(lambda p: transeEmbeddings[p] if p in transeEmbeddings else None)" - ] - }, - { - "cell_type": "markdown", - "id": "interested-sympathy", - "metadata": {}, - "source": [ - "## Abstract" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "special-paradise", - "metadata": {}, - "outputs": [], - "source": [ - "# sitelinksDF = pd.read_csv(\"../data/sitelinks.en.tsv.gz\", sep='\\t')\n", - "# sitelinksDF['trimmedNode2'] = sitelinksDF.node2.apply(lambda p: p.split(\"/\")[-1] if p.split(\"/\")[-1] != '' else p.split(\"/\")[-2])\n", - "# sitelinksDF1 = sitelinksDF[sitelinksDF.label == 'wikipedia_sitelink']\n", - "# sitelinksDF2 = sitelinksDF1.set_index('trimmedNode2')\n", - "# print(f\"There are {len(sitelinksDF2)} sitelinks present in the dataset corresponding to {sitelinksDF2.node1.nunique()} unique node1s (Qxxx), {sitelinksDF2.index.nunique()} unique labels (text)\")\n", - "# # sitelinksDF2.loc[sitelinksDF2[sitelinksDF2.index.duplicated()].index]\n", - "\n", - "# df1 = pd.read_csv(\"../data/short-abstracts_lang=en.csv\", skiprows=1, skipfooter=1, header=None, engine='python')\n", - "# df1.columns = ['ignore', 'node1', 'url', 'ignore2', 'abstract']\n", - "# df1 = df1.set_index('node1')\n", - "# df1[df1.url.apply(lambda p: 'http://dbpedia.org/resource' not in p)]\n", - "\n", - "# print(f\"DBPedia dataset has {len(df1)} records with unique {df1.index.nunique()} index values\")\n", - "# # df1.loc[df1[df1.index.duplicated()].index]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "committed-bathroom", - "metadata": {}, - "outputs": [], - "source": [ - "# abstractsDF2 = sitelinksDF2.join(df1).reset_index()\n", - "# print(f\"From {len(abstractsDF2)} Qnodes, there are {abstractsDF2.ignore2.isna().sum()} sitelink Qnodes which do not have a short abstract i.e {len(abstractsDF2) - abstractsDF2.ignore2.isna().sum()} have a short abstract\")\n", - "# abstractsDF2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "given-sapphire", - "metadata": {}, - "outputs": [], - "source": [ - "# print(f\"We have {len(wordSimSet)} no. of Qnodes extracted from node1, node2 of wikidata CS\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "black-throat", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimSet = set(wordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "painful-survivor", - "metadata": {}, - "outputs": [], - "source": [ - "# abstractsDF_subset = abstractsDF2[abstractsDF2.node1.apply(lambda p: p in wordSimSet)]\n", - "# abstractsDF_subset = abstractsDF_subset[~abstractsDF_subset.abstract.isna()]\n", - "# len(abstractsDF_subset)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "democratic-priority", - "metadata": {}, - "outputs": [], - "source": [ - "# from nltk.tokenize import sent_tokenize\n", - "# abstractsDF_subset['abstract_firstSent'] = abstractsDF_subset.abstract.apply(lambda p: sent_tokenize(p)[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "likely-north", - "metadata": {}, - "outputs": [], - "source": [ - "# abstractsDF_subset.to_csv('../data/M-Pairs/output/abstractsDF_subset.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "legendary-contract", - "metadata": {}, - "outputs": [], - "source": [ - "abstractsDF_subset = pd.read_csv('../data/M-Pairs/output/abstractsDF_subset.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "worst-municipality", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "31144" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(abstractsDF_subset)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "durable-princeton", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "from time import time\n", - "import pandas as pd\n", - "\n", - "def getBERTSentEmbeddings(valSeries, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(valSeries.to_list())\n", - " print(time()-start,'s')\n", - " return encodings\n", - "def getBERTSentEmbeddingsForSent(val1, modelName):\n", - " model = SentenceTransformer(modelName)\n", - " start = time()\n", - " encodings = model.encode(val1)\n", - " print(time()-start,'s')\n", - " return encodings" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "victorian-orientation", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "74.81354665756226 s\n", - "31.950600385665894 s\n" - ] - } - ], - "source": [ - "abstractsDF_subset['BERT_abstract_emb'] = pd.Series(list(getBERTSentEmbeddings(abstractsDF_subset.abstract, 'bert-base-nli-mean-tokens')))\n", - "abstractsDF_subset['BERT_abstract_firstSent_emb'] = pd.Series(list(getBERTSentEmbeddings(abstractsDF_subset.abstract_firstSent, 'bert-base-nli-mean-tokens')))" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "stuffed-stamp", - "metadata": {}, - "outputs": [], - "source": [ - "for col in ['BERT_abstract_emb', 'BERT_abstract_firstSent_emb']:\n", - " abstractsDF_subset[col] = abstractsDF_subset[col].apply(lambda p: p.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "excessive-compression", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0indexidnode1labelnode2ignoreurlignore2abstractabstract_firstSentBERT_abstract_embBERT_abstract_firstSent_emb
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: [Unnamed: 0, index, id, node1, label, node2, ignore, url, ignore2, abstract, abstract_firstSent, BERT_abstract_emb, BERT_abstract_firstSent_emb]\n", - "Index: []" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abstractsDF_subset[abstractsDF_subset.node1.duplicated()]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "instructional-wireless", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs = wikiDF.set_index('node1').join(abstractsDF_subset.set_index('node1')[['abstract','abstract_firstSent', 'BERT_abstract_emb', 'BERT_abstract_firstSent_emb']])" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "flush-share", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs.reset_index().set_index('node2').join(abstractsDF_subset.set_index('node1')[['abstract','abstract_firstSent', 'BERT_abstract_emb', 'BERT_abstract_firstSent_emb']], rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "changing-calculator", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs1.reset_index().rename(columns={'index':'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "mathematical-denver", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abstract_emb'] = wikiDF_wabs1['BERT_abstract_emb'].tolist()\n", - "wikiDF_wabs1['BERT_abstract_firstSent_emb'] = wikiDF_wabs1['BERT_abstract_firstSent_emb'].tolist()\n", - "wikiDF_wabs1['BERT_abstract_emb_right'] = wikiDF_wabs1['BERT_abstract_emb_right'].tolist()\n", - "wikiDF_wabs1['BERT_abstract_firstSent_emb_right'] = wikiDF_wabs1['BERT_abstract_firstSent_emb_right'].tolist()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "patent-capability", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['node1_compl_emb'] = wikiDF_wabs1['node1_compl_emb'].apply(lambda p: p.split(',') if p else None)\n", - "wikiDF_wabs1['node2_compl_emb'] = wikiDF_wabs1['node2_compl_emb'].apply(lambda p: p.split(',') if p else None)\n", - "wikiDF_wabs1['node1_transe_emb'] = wikiDF_wabs1['node1_transe_emb'].apply(lambda p: p.split(',') if p else None)\n", - "wikiDF_wabs1['node2_transe_emb'] = wikiDF_wabs1['node2_transe_emb'].apply(lambda p: p.split(',') if p else None)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "double-mediterranean", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...node1_transe_embnode2_transe_embabstractabstract_firstSentBERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_right
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[-0.178757623, -1.513463259, -1.526623845, 0.3...NoneIn the Latter Day Saint movement, a temple is ...In the Latter Day Saint movement, a temple is ...[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNaNNaN
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.396865129, 0.509240150, -0.284384042, -0.5...NoneA tram (in North America streetcar or trolley)...A tram (in North America streetcar or trolley)...[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNaNNaN
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.363599300, -0.764536679, 0.060853526, -0.0......[0.337825149, -0.189670041, -0.480503321, -0.2...NoneNaNNaNNaNNaNNaNNaNNaNNaN
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NoneNoneNaNNaNNaNNaNNaNNaNNaNNaN
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.043086100, -0.041153915, -0.603652894, -0.4......[-1.035292268, 0.008348951, -1.242931604, -1.6...NoneAn awards ceremony is a type of ceremony where...An awards ceremony is a type of ceremony where...[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNaNNaN
\n", - "

5 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.363599300, -0.764536679, 0.060853526, -0.0... ... \n", - "3 None ... \n", - "4 [0.043086100, -0.041153915, -0.603652894, -0.4... ... \n", - "\n", - " node1_transe_emb node2_transe_emb \\\n", - "0 [-0.178757623, -1.513463259, -1.526623845, 0.3... None \n", - "1 [-0.396865129, 0.509240150, -0.284384042, -0.5... None \n", - "2 [0.337825149, -0.189670041, -0.480503321, -0.2... None \n", - "3 None None \n", - "4 [-1.035292268, 0.008348951, -1.242931604, -1.6... None \n", - "\n", - " abstract \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " abstract_firstSent \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 NaN \n", - "3 NaN \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN NaN \n", - "1 NaN NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 NaN NaN \n", - "\n", - " BERT_abstract_firstSent_emb_right \n", - "0 NaN \n", - "1 NaN \n", - "2 NaN \n", - "3 NaN \n", - "4 NaN \n", - "\n", - "[5 rows x 21 columns]" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "markdown", - "id": "dietary-function", - "metadata": {}, - "source": [ - "## Text" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "seven-individual", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimList = list(wordSimSet)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "identical-brighton", - "metadata": {}, - "outputs": [], - "source": [ - "# bsize = len(wordSimList) // 20\n", - "# cnt = 1\n", - "# for i in range(0, len(wordSimList), bsize):\n", - "# q1 = \"kgtk filter -i ../data/wikidataos.for.text-embedding.tsv.gz --word-separator '|' -p '\" + '|'.join(wordSimList[i:i+bsize]) + \";;' -o ../data/M-Pairs/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv -v True\"\n", - "# cnt += 1\n", - "# # print(q1)\n", - "# os.system(\"screen -dm \" + q1)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "front-acquisition", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(1,11):\n", - "# q1 = \"kgtk text-embedding -i ../data/M-Pairs/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/M-Pairs/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "designing-rugby", - "metadata": {}, - "outputs": [], - "source": [ - "# for cnt in range(11,21):\n", - "# q1 = \"kgtk text-embedding -i ../data/M-Pairs/output/wikidataos.for.text-embedding-ext-\" + str(cnt) + \".tsv \\\n", - "# --model roberta-large-nli-mean-tokens \\\n", - "# --property-labels-file ../data/labels.en.tsv --debug \\\n", - "# --isa-properties P31 P279 P106 P39 P1382 P373 P452 \\\n", - "# --save-embedding-sentence > ../data/M-Pairs/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\"\n", - "# # print(q1)\n", - "# os.system(q1 + \" &\")\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "incredible-cedar", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DFArr = []\n", - "for cnt in range(1,21):\n", - " textEmb_7props_DFArr.append(pd.read_csv(\"../data/M-Pairs/output/P279-text-embedding-7-props-part-\" + str(cnt) + \".tsv\", sep='\\t'))\n", - "textEmb_7props_DF = pd.concat(textEmb_7props_DFArr)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "underlying-indie", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF.to_csv('../data/M-Pairs/output/P279-text-embedding-7-props-all.tsv', sep='\\t', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "central-product", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF = textEmb_7props_DF[textEmb_7props_DF.property == 'text_embedding']" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "broke-cathedral", - "metadata": {}, - "outputs": [], - "source": [ - "textEmb_7props_DF['value'] = textEmb_7props_DF['value'].apply(lambda p: [float(p1) for p1 in p.split(',')])" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "renewable-brand", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodepropertyvalue
0Q995878text_embedding[1.3671061, 0.9123121, -0.79829437, 0.9297752,...
2Q995609text_embedding[0.27214786, 1.5027193, -1.0903299, -0.1850157...
4Q994507text_embedding[0.35614717, 1.6611174, -0.2951356, 0.81781155...
6Q986635text_embedding[0.26672798, 0.63939905, -1.2968327, 0.1320171...
8Q9813868text_embedding[-0.08139745, 0.39049774, 0.24617954, -0.07873...
\n", - "
" - ], - "text/plain": [ - " node property value\n", - "0 Q995878 text_embedding [1.3671061, 0.9123121, -0.79829437, 0.9297752,...\n", - "2 Q995609 text_embedding [0.27214786, 1.5027193, -1.0903299, -0.1850157...\n", - "4 Q994507 text_embedding [0.35614717, 1.6611174, -0.2951356, 0.81781155...\n", - "6 Q986635 text_embedding [0.26672798, 0.63939905, -1.2968327, 0.1320171...\n", - "8 Q9813868 text_embedding [-0.08139745, 0.39049774, 0.24617954, -0.07873..." - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "textEmb_7props_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "gothic-california", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs2 = wikiDF_wabs1.set_index('node1').join(textEmb_7props_DF.set_index('node')[['value']])" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "smooth-albania", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs2 = wikiDF_wabs2.rename(columns={'index':'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "basic-jumping", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs3 = wikiDF_wabs2.reset_index().set_index('node2').join(textEmb_7props_DF.set_index('node')[['value']], rsuffix='_right')" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "original-canada", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs3 = wikiDF_wabs3.rename(columns={'index': 'node1'}).reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "deadly-atmosphere", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs3 = wikiDF_wabs3.rename(columns={'index': 'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "palestinian-trance", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "difficult-athletics", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs3" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "dutch-principal", - "metadata": {}, - "outputs": [], - "source": [ - "# wikiDF_wabs1 = wikiDF_wabs1.drop(columns=['value','value_right'])" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "relative-clearing", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['node2', 'node1', 'relation', 'node1;label', 'node2;label',\n", - " 'relation;label', 'relation;dimension', 'source', 'sentence',\n", - " 'node1_compl_emb', 'node2_compl_emb', 'node1_transe_emb',\n", - " 'node2_transe_emb', 'abstract', 'abstract_firstSent',\n", - " 'BERT_abstract_emb', 'BERT_abstract_firstSent_emb', 'abstract_right',\n", - " 'abstract_firstSent_right', 'BERT_abstract_emb_right',\n", - " 'BERT_abstract_firstSent_emb_right', 'value', 'value_right'],\n", - " dtype='object')" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "existing-juice", - "metadata": {}, - "outputs": [], - "source": [ - "# cols = ['BERT_abstract_emb', 'BERT_abstract_firstSent_emb', 'BERT_abstract_emb_right', \n", - "# 'BERT_abstract_firstSent_emb_right', \n", - "# 'node1_compl_emb', 'node2_compl_emb', \n", - "# 'node1_transe_emb', 'node2_transe_emb', 'value', 'value_right']\n", - "# for col in cols:\n", - "# wikiDF_wabs1[col] = wikiDF_wabs1[col].apply()" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "unlimited-monster", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...abstractabstract_firstSentBERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_rightvaluevalue_right
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......In the Latter Day Saint movement, a temple is ...In the Latter Day Saint movement, a temple is ...[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNaNNaN[-0.027918775, 0.40711772, -0.26630637, -0.669...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......A tram (in North America streetcar or trolley)...A tram (in North America streetcar or trolley)...[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNaNNaN[0.6575391, -0.10703926, 0.73501605, -0.636591...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.363599300, -0.764536679, 0.060853526, -0.0......NaNNaNNaNNaNNaNNaNNaNNaN[0.15300399, -0.43896374, -0.17923762, 0.23122...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NaNNaNNaNNaNNaNNaNNaNNaN[0.6896931, 0.5631939, 0.03267402, 0.30135256,...[-0.4857783, 1.0299897, -0.08442746, 0.0377928...
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.043086100, -0.041153915, -0.603652894, -0.4......An awards ceremony is a type of ceremony where...An awards ceremony is a type of ceremony where...[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNaNNaN[0.7004955, 1.2301444, -1.3314008, 0.3130464, ...[-0.25474873, 1.0963922, -0.07334485, -0.05801...
\n", - "

5 rows × 23 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.363599300, -0.764536679, 0.060853526, -0.0... ... \n", - "3 None ... \n", - "4 [0.043086100, -0.041153915, -0.603652894, -0.4... ... \n", - "\n", - " abstract \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " abstract_firstSent \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 NaN \n", - "3 NaN \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN NaN \n", - "1 NaN NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 NaN NaN \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 NaN \n", - "1 NaN \n", - "2 NaN \n", - "3 NaN \n", - "4 NaN \n", - "\n", - " value \\\n", - "0 [-0.027918775, 0.40711772, -0.26630637, -0.669... \n", - "1 [0.6575391, -0.10703926, 0.73501605, -0.636591... \n", - "2 [0.15300399, -0.43896374, -0.17923762, 0.23122... \n", - "3 [0.6896931, 0.5631939, 0.03267402, 0.30135256,... \n", - "4 [0.7004955, 1.2301444, -1.3314008, 0.3130464, ... \n", - "\n", - " value_right \n", - "0 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "1 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "2 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "3 [-0.4857783, 1.0299897, -0.08442746, 0.0377928... \n", - "4 [-0.25474873, 1.0963922, -0.07334485, -0.05801... \n", - "\n", - "[5 rows x 23 columns]" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "overall-blues", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1.to_csv('../data/M-Pairs/wikidataCS_wemb.csv', index=None)" - ] - }, - { - "cell_type": "markdown", - "id": "radio-flexibility", - "metadata": {}, - "source": [ - "# Summary" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "appropriate-integer", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs = pd.read_csv('../data/M-Pairs/wikidataCS_wemb.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "rational-kansas", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "suburban-cruise", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs.copy()\n", - "cols = ['BERT_abstract_emb', 'BERT_abstract_firstSent_emb', 'BERT_abstract_emb_right', \n", - " 'BERT_abstract_firstSent_emb_right', \n", - " 'node1_compl_emb', 'node2_compl_emb', \n", - " 'node1_transe_emb', 'node2_transe_emb', 'value', 'value_right']\n", - "for col in cols:\n", - " wikiDF_wabs1[col] = wikiDF_wabs1[col].apply(lambda p: [float(p1.replace(\"'\",\"\")) for p1 in p[1:-1].split(',')] if type(p) != float else None)\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "electronic-vietnamese", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...abstractabstract_firstSentBERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_rightvaluevalue_right
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......In the Latter Day Saint movement, a temple is ...In the Latter Day Saint movement, a temple is ...[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNoneNone[-0.027918775, 0.40711772, -0.26630637, -0.669...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......A tram (in North America streetcar or trolley)...A tram (in North America streetcar or trolley)...[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNoneNone[0.6575391, -0.10703926, 0.73501605, -0.636591...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......NaNNaNNoneNoneNaNNaNNoneNone[0.15300399, -0.43896374, -0.17923762, 0.23122...[0.22757019, 1.3568109, 0.20142093, -0.136266,...
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NaNNaNNoneNoneNaNNaNNoneNone[0.6896931, 0.5631939, 0.03267402, 0.30135256,...[-0.4857783, 1.0299897, -0.08442746, 0.0377928...
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......An awards ceremony is a type of ceremony where...An awards ceremony is a type of ceremony where...[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNoneNone[0.7004955, 1.2301444, -1.3314008, 0.3130464, ...[-0.25474873, 1.0963922, -0.07334485, -0.05801...
\n", - "

5 rows × 23 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " abstract \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " abstract_firstSent \\\n", - "0 In the Latter Day Saint movement, a temple is ... \n", - "1 A tram (in North America streetcar or trolley)... \n", - "2 NaN \n", - "3 NaN \n", - "4 An awards ceremony is a type of ceremony where... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 None \n", - "3 None \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 None NaN \n", - "3 None NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN None \n", - "1 NaN None \n", - "2 NaN None \n", - "3 NaN None \n", - "4 NaN None \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", - "\n", - " value \\\n", - "0 [-0.027918775, 0.40711772, -0.26630637, -0.669... \n", - "1 [0.6575391, -0.10703926, 0.73501605, -0.636591... \n", - "2 [0.15300399, -0.43896374, -0.17923762, 0.23122... \n", - "3 [0.6896931, 0.5631939, 0.03267402, 0.30135256,... \n", - "4 [0.7004955, 1.2301444, -1.3314008, 0.3130464, ... \n", - "\n", - " value_right \n", - "0 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "1 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "2 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "3 [-0.4857783, 1.0299897, -0.08442746, 0.0377928... \n", - "4 [-0.25474873, 1.0963922, -0.07334485, -0.05801... \n", - "\n", - "[5 rows x 23 columns]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "markdown", - "id": "plain-design", - "metadata": {}, - "source": [ - "## Fix Abstract stuff" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "little-split", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF = pd.read_csv('../data/labels.en.tsv', sep='\\t')" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "separate-apache", - "metadata": {}, - "outputs": [], - "source": [ - "labelsDF1 = labelsDF.drop(columns=['id', 'label'])" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "medical-authority", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs1.set_index('node1').join(labelsDF1.set_index('node1'), rsuffix='_label')" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "julian-sector", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs4.reset_index().rename(columns={'index':'node1'})" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "marine-lloyd", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs4.set_index('node2').join(labelsDF1.set_index('node1'), rsuffix='_label_right').rename(columns={'node2':'node2_label_right'})" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "biblical-beach", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs4.reset_index().rename(columns={'index':'node2'})" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "piano-pencil", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs4 = wikiDF_wabs4.rename(columns={'node2_label': 'node1_wiki_label', 'node2_label_right': 'node2_wiki_label'})" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "statistical-order", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_rightvaluevalue_rightnode1_wiki_labelnode2_wiki_label
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNoneNone[-0.027918775, 0.40711772, -0.26630637, -0.669...[0.22757019, 1.3568109, 0.20142093, -0.136266,...'temple'@en'quantity'@en
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNoneNone[0.6575391, -0.10703926, 0.73501605, -0.636591...[0.22757019, 1.3568109, 0.20142093, -0.136266,...'tram'@en'quantity'@en
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......NoneNoneNaNNaNNoneNone[0.15300399, -0.43896374, -0.17923762, 0.23122...[0.22757019, 1.3568109, 0.20142093, -0.136266,...'number of objects'@en'quantity'@en
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NoneNoneNaNNaNNoneNone[0.6896931, 0.5631939, 0.03267402, 0.30135256,...[-0.4857783, 1.0299897, -0.08442746, 0.0377928...'student organization of'@en'represents'@en
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNoneNone[0.7004955, 1.2301444, -1.3314008, 0.3130464, ...[-0.25474873, 1.0963922, -0.07334485, -0.05801...'award ceremony'@en'facet of'@en
\n", - "

5 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 None \n", - "3 None \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 None NaN \n", - "3 None NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN None \n", - "1 NaN None \n", - "2 NaN None \n", - "3 NaN None \n", - "4 NaN None \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", - "\n", - " value \\\n", - "0 [-0.027918775, 0.40711772, -0.26630637, -0.669... \n", - "1 [0.6575391, -0.10703926, 0.73501605, -0.636591... \n", - "2 [0.15300399, -0.43896374, -0.17923762, 0.23122... \n", - "3 [0.6896931, 0.5631939, 0.03267402, 0.30135256,... \n", - "4 [0.7004955, 1.2301444, -1.3314008, 0.3130464, ... \n", - "\n", - " value_right \\\n", - "0 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "1 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "2 [0.22757019, 1.3568109, 0.20142093, -0.136266,... \n", - "3 [-0.4857783, 1.0299897, -0.08442746, 0.0377928... \n", - "4 [-0.25474873, 1.0963922, -0.07334485, -0.05801... \n", - "\n", - " node1_wiki_label node2_wiki_label \n", - "0 'temple'@en 'quantity'@en \n", - "1 'tram'@en 'quantity'@en \n", - "2 'number of objects'@en 'quantity'@en \n", - "3 'student organization of'@en 'represents'@en \n", - "4 'award ceremony'@en 'facet of'@en \n", - "\n", - "[5 rows x 25 columns]" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs4.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "introductory-elizabeth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "563" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs4['node2_wiki_label'].isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "packed-simpson", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "established-preference", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['node1;label_temp'] = wikiDF_wabs1['node1;label'].fillna(\"\")\n", - "wikiDF_wabs1['node2;label_temp'] = wikiDF_wabs1['node2;label'].fillna(\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "sunrise-liverpool", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abstract_embBERT_abstract_firstSent_embabstract_rightabstract_firstSent_rightBERT_abstract_emb_rightBERT_abstract_firstSent_emb_rightvaluevalue_rightnode1;label_tempnode2;label_temp
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[0.1981331706047058, 0.9829303026199341, -0.00...[0.6187984943389893, 1.4799031019210815, 0.515...NaNNaNNoneNone[-0.027918775, 0.40711772, -0.26630637, -0.669...[0.22757019, 1.3568109, 0.20142093, -0.136266,...templequantity
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.005881215445697308, -0.6711483001708984, -...[-0.1387496143579483, -1.0609047412872314, -0....NaNNaNNoneNone[0.6575391, -0.10703926, 0.73501605, -0.636591...[0.22757019, 1.3568109, 0.20142093, -0.136266,...tramquantity
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......NoneNoneNaNNaNNoneNone[0.15300399, -0.43896374, -0.17923762, 0.23122...[0.22757019, 1.3568109, 0.20142093, -0.136266,...number of objectsquantity
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...NoneNoneNaNNaNNoneNone[0.6896931, 0.5631939, 0.03267402, 0.30135256,...[-0.4857783, 1.0299897, -0.08442746, 0.0377928...student organization ofrepresents
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......[-0.236312136054039, 0.7216204404830933, 1.821...[-0.02503090538084507, 0.4087623953819275, 1.9...NaNNaNNoneNone[0.7004955, 1.2301444, -1.3314008, 0.3130464, ...[-0.25474873, 1.0963922, -0.07334485, -0.05801...award ceremonyfacet of
\n", - "

5 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " BERT_abstract_emb \\\n", - "0 [0.1981331706047058, 0.9829303026199341, -0.00... \n", - "1 [-0.005881215445697308, -0.6711483001708984, -... \n", - "2 None \n", - "3 None \n", - "4 [-0.236312136054039, 0.7216204404830933, 1.821... \n", - "\n", - " BERT_abstract_firstSent_emb abstract_right \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... NaN \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... NaN \n", - "2 None NaN \n", - "3 None NaN \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... NaN \n", - "\n", - " abstract_firstSent_right BERT_abstract_emb_right \\\n", - "0 NaN None \n", - "1 NaN None \n", - "2 NaN None \n", - "3 NaN None \n", - "4 NaN None \n", - "\n", - " BERT_abstract_firstSent_emb_right \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", - "\n", - " value \\\n", - "0 [-0.027918775, 0.40711772, -0.26630637, -0.669... \n", - "1 [0.6575391, -0.10703926, 0.73501605, -0.636591... \n", - "2 [0.15300399, -0.43896374, -0.17923762, 0.23122... \n", - "3 [0.6896931, 0.5631939, 0.03267402, 0.30135256,... \n", - "4 [0.7004955, 1.2301444, -1.3314008, 0.3130464, ... \n", - "\n", - " value_right node1;label_temp \\\n", - "0 [0.22757019, 1.3568109, 0.20142093, -0.136266,... temple \n", - "1 [0.22757019, 1.3568109, 0.20142093, -0.136266,... tram \n", - "2 [0.22757019, 1.3568109, 0.20142093, -0.136266,... number of objects \n", - "3 [-0.4857783, 1.0299897, -0.08442746, 0.0377928... student organization of \n", - "4 [-0.25474873, 1.0963922, -0.07334485, -0.05801... award ceremony \n", - "\n", - " node2;label_temp \n", - "0 quantity \n", - "1 quantity \n", - "2 quantity \n", - "3 represents \n", - "4 facet of \n", - "\n", - "[5 rows x 25 columns]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "advance-bradley", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "36.53356313705444 s\n", - "45.23650908470154 s\n" - ] - } - ], - "source": [ - "wikiDF_wabs1['node1;label_emb'] = pd.Series(list(getBERTSentEmbeddings(wikiDF_wabs1['node1;label_temp'], 'bert-base-nli-mean-tokens')))\n", - "wikiDF_wabs1['node2;label_emb'] = pd.Series(list(getBERTSentEmbeddings(wikiDF_wabs1['node2;label_temp'], 'bert-base-nli-mean-tokens')))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "grand-tooth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 [1.1099516, 0.96340746, 1.9986696, -0.26332825...\n", - "1 [0.11062625, -0.8170154, 1.9477333, 0.6333619,...\n", - "2 [0.6716414, -0.08505987, 1.6483774, 1.0254748,...\n", - "3 [0.11234443, -0.34427452, 1.2779658, 0.5219726...\n", - "4 [-0.20389149, 0.1330459, 2.6067894, 0.7318787,...\n", - " ... \n", - "101766 [-0.19040215, 0.31874508, 0.7144903, 0.2607778...\n", - "101767 [-0.1481771, -0.42037064, 1.2999005, 0.4722842...\n", - "101768 [-0.38610217, -0.26171663, 1.5519874, 0.358043...\n", - "101769 [-0.32396185, -0.2601691, 1.5890372, 0.6090804...\n", - "101770 [0.12058014, 0.57743263, 1.3856344, 0.03655950...\n", - "Name: node1;label_emb, Length: 101771, dtype: object" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['node1;label_emb']" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "satisfactory-minutes", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "def fixAbstractEmbsLeft(row):\n", - " if row['BERT_abstract_emb']:\n", - " return row['BERT_abstract_emb']\n", - " elif row['node1;label']:\n", - " return row['node1;label_emb'].tolist()\n", - " else:\n", - " return None\n", - "wikiDF_wabs1['BERT_abs_label_emb'] = wikiDF_wabs1.apply(fixAbstractEmbsLeft, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "alpha-dressing", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "def fixAbstractEmbsRight(row):\n", - " if row['BERT_abstract_emb_right']:\n", - " return row['BERT_abstract_emb_right']\n", - " elif row['node2;label']:\n", - " return row['node2;label_emb'].tolist()\n", - " else:\n", - " return None\n", - "wikiDF_wabs1['BERT_abs_label_emb_right'] = wikiDF_wabs1.apply(fixAbstractEmbsRight, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "short-consent", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "def fixAbstractFirstSentEmbsLeft(row):\n", - " if row['BERT_abstract_emb']:\n", - " return row['BERT_abstract_firstSent_emb']\n", - " elif row['node1;label']:\n", - " return row['node1;label_emb'].tolist()\n", - " else:\n", - " return None\n", - "wikiDF_wabs1['BERT_abs_firstSent_label_emb'] = wikiDF_wabs1.apply(fixAbstractFirstSentEmbsLeft, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "derived-wholesale", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "def fixAbstractFirstSentEmbsRight(row):\n", - " if row['BERT_abstract_emb_right']:\n", - " return row['BERT_abstract_firstSent_emb_right']\n", - " elif row['node2;label']:\n", - " return row['node2;label_emb'].tolist()\n", - " else:\n", - " return None\n", - "wikiDF_wabs1['BERT_abs_firstSent_label_emb_right'] = wikiDF_wabs1.apply(fixAbstractFirstSentEmbsRight, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "waiting-wholesale", - "metadata": {}, - "outputs": [], - "source": [ - "def getCosSims(wikiDF_wabs1, col1, col2):\n", - " return wikiDF_wabs1.apply(lambda p: cosine_similarity(np.array(p[col1]).reshape(1,-1), np.array(p[col2]).reshape(1,-1))[0][0] if (type(p[col1])==list and type(p[col2])==list) else -1, axis=1)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "id": "invalid-recommendation", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abstract_cosSim'] = getCosSims(wikiDF_wabs1, 'BERT_abstract_emb', 'BERT_abstract_emb_right')\n", - "wikiDF_wabs1['BERT_abstract_firstSent_cosSim'] = getCosSims(wikiDF_wabs1, 'BERT_abstract_firstSent_emb', 'BERT_abstract_firstSent_emb_right')\n", - "wikiDF_wabs1['complex_cosSim'] = getCosSims(wikiDF_wabs1, 'node1_compl_emb', 'node2_compl_emb')\n", - "wikiDF_wabs1['transe_cosSim'] = getCosSims(wikiDF_wabs1, 'node1_transe_emb', 'node2_transe_emb')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 159, - "id": "moderate-bulgarian", - "metadata": {}, - "outputs": [], - "source": [ - "def changeScale(val1, minVal=0, maxVal=1):\n", - " return 4 - 3 * (val1 - minVal) / (maxVal - minVal) if val1 != -1 else -1" - ] - }, - { - "cell_type": "code", - "execution_count": 196, - "id": "imported-offer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 30740.000000\n", - "mean 0.664270\n", - "std 0.132545\n", - "min 0.054277\n", - "25% 0.577663\n", - "50% 0.678386\n", - "75% 0.764839\n", - "max 1.000000\n", - "Name: BERT_abstract_cosSim, dtype: float64" - ] - }, - "execution_count": 196, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['BERT_abstract_cosSim'][wikiDF_wabs1['BERT_abstract_cosSim'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 197, - "id": "assumed-personality", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 30740.000000\n", - "mean 0.614450\n", - "std 0.157435\n", - "min -0.073644\n", - "25% 0.507432\n", - "50% 0.627924\n", - "75% 0.731958\n", - "max 1.000000\n", - "Name: BERT_abstract_firstSent_cosSim, dtype: float64" - ] - }, - "execution_count": 197, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['BERT_abstract_firstSent_cosSim'][wikiDF_wabs1['BERT_abstract_firstSent_cosSim'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 198, - "id": "competitive-practice", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 98495.000000\n", - "mean 0.654858\n", - "std 0.154211\n", - "min -0.033131\n", - "25% 0.560126\n", - "50% 0.671793\n", - "75% 0.764953\n", - "max 1.000000\n", - "Name: complex_cosSim, dtype: float64" - ] - }, - "execution_count": 198, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['complex_cosSim'][wikiDF_wabs1['complex_cosSim'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 199, - "id": "historical-andrews", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 98495.000000\n", - "mean 0.652252\n", - "std 0.176201\n", - "min -0.137044\n", - "25% 0.528159\n", - "50% 0.656617\n", - "75% 0.784122\n", - "max 1.000000\n", - "Name: transe_cosSim, dtype: float64" - ] - }, - "execution_count": 199, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['transe_cosSim'][wikiDF_wabs1['transe_cosSim'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 200, - "id": "buried-catalyst", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "count 97964.000000\n", - "mean 1.809035\n", - "std 0.387920\n", - "min 1.000000\n", - "25% 1.524458\n", - "50% 1.767705\n", - "75% 2.053570\n", - "max 4.000000\n", - "Name: textEmb_score, dtype: float64" - ] - }, - "execution_count": 200, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1['textEmb_score'][wikiDF_wabs1['textEmb_score'] != -1].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 163, - "id": "unlimited-minnesota", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.05427744093567516" - ] - }, - "execution_count": 163, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 164, - "id": "false-sheep", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abstract_score'] = wikiDF_wabs1['BERT_abstract_cosSim'].apply(changeScale, args=(wikiDF_wabs1['BERT_abstract_cosSim'].where(wikiDF_wabs1['BERT_abstract_cosSim'] != -1).min(), wikiDF_wabs1['BERT_abstract_cosSim'].max()))\n", - "wikiDF_wabs1['BERT_abstract_firstSent_score'] = wikiDF_wabs1['BERT_abstract_firstSent_cosSim'].apply(changeScale, args=(wikiDF_wabs1['BERT_abstract_firstSent_cosSim'].where(wikiDF_wabs1['BERT_abstract_firstSent_cosSim'] != -1).min(), wikiDF_wabs1['BERT_abstract_firstSent_cosSim'].max()))\n", - "wikiDF_wabs1['complex_score'] = wikiDF_wabs1['complex_cosSim'].apply(changeScale, args=(wikiDF_wabs1['complex_cosSim'].where(wikiDF_wabs1['complex_cosSim'] != -1).min(), wikiDF_wabs1['complex_cosSim'].max()))\n", - "wikiDF_wabs1['transe_score'] = wikiDF_wabs1['transe_cosSim'].apply(changeScale, args=(wikiDF_wabs1['transe_cosSim'].where(wikiDF_wabs1['transe_cosSim'] != -1).min(), wikiDF_wabs1['transe_cosSim'].max()))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "caring-passenger", - "metadata": {}, - "outputs": [], - "source": [ - "# wikiDF_wabs1['BERT_abstract_score'] = wikiDF_wabs1['BERT_abstract_cosSim'].apply(lambda p: 4 - 3 * p if p != -1 else -1)\n", - "# wikiDF_wabs1['BERT_abstract_firstSent_score'] = wikiDF_wabs1['BERT_abstract_firstSent_cosSim'].apply(lambda p: 4 - 3 * p if p != -1 else -1)\n", - "# wikiDF_wabs1['complex_score'] = wikiDF_wabs1['complex_cosSim'].apply(lambda p: 4 - 3 * p if p != -1 else -1)\n", - "# wikiDF_wabs1['transe_score'] = wikiDF_wabs1['transe_cosSim'].apply(lambda p: 4 - 3 * p if p != -1 else -1)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 165, - "id": "weighted-heavy", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['textEmb_cosSim'] = getCosSims(wikiDF_wabs1, 'value', 'value_right')\n", - "wikiDF_wabs1['textEmb_score'] = wikiDF_wabs1['textEmb_cosSim'].apply(changeScale, args=(wikiDF_wabs1['textEmb_cosSim'].where(wikiDF_wabs1['textEmb_cosSim'] != -1).min(), wikiDF_wabs1['textEmb_cosSim'].max()))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 166, - "id": "international-neighborhood", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abs_label_cosSim'] = getCosSims(wikiDF_wabs1, 'BERT_abs_label_emb', 'BERT_abs_label_emb_right')\n", - "wikiDF_wabs1['BERT_abs_label_score'] = wikiDF_wabs1['BERT_abs_label_cosSim'].apply(changeScale, args=(wikiDF_wabs1['BERT_abs_label_cosSim'].where(wikiDF_wabs1['BERT_abs_label_cosSim'] != -1).min(), wikiDF_wabs1['BERT_abs_label_cosSim'].max()))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "id": "sized-coupon", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'] = getCosSims(wikiDF_wabs1, 'BERT_abs_firstSent_label_emb', 'BERT_abs_firstSent_label_emb_right')\n", - "wikiDF_wabs1['BERT_abs_firstSent_label_score'] = wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'].apply(changeScale, args=(wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'].where(wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'] != -1).min(), wikiDF_wabs1['BERT_abs_firstSent_label_cosSim'].max()))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "id": "emotional-affect", - "metadata": {}, - "outputs": [], - "source": [ - "wikiDF_wabs1 = wikiDF_wabs1.rename(columns={'value_score': 'textEmb_score'})" - ] - }, - { - "cell_type": "code", - "execution_count": 169, - "id": "pleased-medline", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BERT_abs_label_cosSimBERT_abstract_cosSimBERT_abstract_firstSent_cosSimcomplex_cosSimtranse_cosSimtextEmb_cosSimBERT_abs_firstSent_label_cosSim
count101771.000000101771.000000101771.000000101771.000000101771.000000101771.000000101771.000000
mean0.560186-0.497306-0.5123540.6015890.5990660.6593610.577693
std0.2197770.7676130.7463060.3291390.3392580.3519680.201635
min-0.199269-1.000000-1.000000-1.000000-1.000000-1.000000-0.200145
25%0.405427-1.000000-1.0000000.5448120.5122820.6247960.439193
50%0.569074-1.000000-1.0000000.6656460.6488720.7313360.582915
75%0.7280680.5366180.4580040.7616540.7793340.8174820.723494
max1.0000001.0000001.0000001.0000001.0000001.0000001.000000
\n", - "
" - ], - "text/plain": [ - " BERT_abs_label_cosSim BERT_abstract_cosSim \\\n", - "count 101771.000000 101771.000000 \n", - "mean 0.560186 -0.497306 \n", - "std 0.219777 0.767613 \n", - "min -0.199269 -1.000000 \n", - "25% 0.405427 -1.000000 \n", - "50% 0.569074 -1.000000 \n", - "75% 0.728068 0.536618 \n", - "max 1.000000 1.000000 \n", - "\n", - " BERT_abstract_firstSent_cosSim complex_cosSim transe_cosSim \\\n", - "count 101771.000000 101771.000000 101771.000000 \n", - "mean -0.512354 0.601589 0.599066 \n", - "std 0.746306 0.329139 0.339258 \n", - "min -1.000000 -1.000000 -1.000000 \n", - "25% -1.000000 0.544812 0.512282 \n", - "50% -1.000000 0.665646 0.648872 \n", - "75% 0.458004 0.761654 0.779334 \n", - "max 1.000000 1.000000 1.000000 \n", - "\n", - " textEmb_cosSim BERT_abs_firstSent_label_cosSim \n", - "count 101771.000000 101771.000000 \n", - "mean 0.659361 0.577693 \n", - "std 0.351968 0.201635 \n", - "min -1.000000 -0.200145 \n", - "25% 0.624796 0.439193 \n", - "50% 0.731336 0.582915 \n", - "75% 0.817482 0.723494 \n", - "max 1.000000 1.000000 " - ] - }, - "execution_count": 169, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1[filter(lambda p: 'cosSim' in p, wikiDF_wabs1.columns)].describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "impossible-navigator", - "metadata": {}, - "outputs": [], - "source": [ - "# wikiDF_wabs1.to_csv('../data/M-Pairs/wikidataCS_wemb.csv', index=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "welsh-salem", - "metadata": {}, - "outputs": [], - "source": [ - "mapper1 = {'/r/DistinctFrom': 'distinctness',\n", - " '/r/Antonym': 'antonymy',\n", - " '/r/Synonym': 'synonymy',\n", - " '/r/SimilarTo': 'similarity',\n", - " '/r/DerivedFrom': 'derivation',\n", - " '/r/IsA': 'inheritance',\n", - " '/r/PartOf': 'meronymy',\n", - " '/r/MadeOf': 'material',\n", - " '/r/CreatedBy': 'attribution',\n", - " '/r/UsedFor': 'utility',\n", - " '/r/HasProperty': 'properties',\n", - " '/r/Causes': 'causation',\n", - " '/r/HasPrerequisite': 'ordering',\n", - " '/r/HasContext': 'context',\n", - " '/r/RelatedTo': 'other'}\n", - "\n", - "wikiDF_wabs1['dim'] = wikiDF_wabs1['relation'].apply(lambda p: mapper1[p])" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "common-building", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abs_firstSent_label_embBERT_abs_firstSent_label_emb_rightBERT_abs_firstSent_label_cosSimBERT_abstract_scoreBERT_abstract_firstSent_scorecomplex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[0.6187984943389893, 1.4799031019210815, 0.515...[-0.21400201320648193, -0.1853264421224594, 2....0.111954-1.0-1.0-1.0-1.02.5702803.9491283.664139
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.1387496143579483, -1.0609047412872314, -0....[-0.21400196850299835, -0.1853266954421997, 2....0.066402-1.0-1.0-1.0-1.02.6627643.9148973.800794
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......[0.6716414093971252, -0.08505986630916595, 1.6...[-0.21400196850299835, -0.1853266954421997, 2....0.701743-1.0-1.0-1.0-1.02.5190901.8947701.894770
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...[0.11234442889690399, -0.34427452087402344, 1....[0.1607293337583542, -0.1969822645187378, 2.40...0.546000-1.0-1.0-1.0-1.02.1108302.3620012.362001
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......[-0.02503090538084507, 0.4087623953819275, 1.9...[-0.03644487261772156, -0.5494412183761597, 2....0.372485-1.0-1.0-1.0-1.02.4436323.7988962.882546
\n", - "

5 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " BERT_abs_firstSent_label_emb \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... \n", - "2 [0.6716414093971252, -0.08505986630916595, 1.6... \n", - "3 [0.11234442889690399, -0.34427452087402344, 1.... \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... \n", - "\n", - " BERT_abs_firstSent_label_emb_right \\\n", - "0 [-0.21400201320648193, -0.1853264421224594, 2.... \n", - "1 [-0.21400196850299835, -0.1853266954421997, 2.... \n", - "2 [-0.21400196850299835, -0.1853266954421997, 2.... \n", - "3 [0.1607293337583542, -0.1969822645187378, 2.40... \n", - "4 [-0.03644487261772156, -0.5494412183761597, 2.... \n", - "\n", - " BERT_abs_firstSent_label_cosSim BERT_abstract_score \\\n", - "0 0.111954 -1.0 \n", - "1 0.066402 -1.0 \n", - "2 0.701743 -1.0 \n", - "3 0.546000 -1.0 \n", - "4 0.372485 -1.0 \n", - "\n", - " BERT_abstract_firstSent_score complex_score transe_score textEmb_score \\\n", - "0 -1.0 -1.0 -1.0 2.570280 \n", - "1 -1.0 -1.0 -1.0 2.662764 \n", - "2 -1.0 -1.0 -1.0 2.519090 \n", - "3 -1.0 -1.0 -1.0 2.110830 \n", - "4 -1.0 -1.0 -1.0 2.443632 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "0 3.949128 3.664139 \n", - "1 3.914897 3.800794 \n", - "2 1.894770 1.894770 \n", - "3 2.362001 2.362001 \n", - "4 3.798896 2.882546 \n", - "\n", - "[5 rows x 46 columns]" - ] - }, - "execution_count": 141, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "id": "polar-constitutional", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abs_firstSent_label_embBERT_abs_firstSent_label_emb_rightBERT_abs_firstSent_label_cosSimBERT_abstract_scoreBERT_abstract_firstSent_scorecomplex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
\n", - "

0 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: [node2, node1, relation, node1;label, node2;label, relation;label, relation;dimension, source, sentence, node1_compl_emb, node2_compl_emb, node1_transe_emb, node2_transe_emb, abstract, abstract_firstSent, BERT_abstract_emb, BERT_abstract_firstSent_emb, abstract_right, abstract_firstSent_right, BERT_abstract_emb_right, BERT_abstract_firstSent_emb_right, value, value_right, node1;label_temp, node2;label_temp, node1;label_emb, node2;label_emb, BERT_abs_label_emb, BERT_abs_label_emb_right, BERT_abs_label_cosSim, BERT_abstract_cosSim, BERT_abstract_firstSent_cosSim, complex_cosSim, transe_cosSim, textEmb_cosSim, dim, BERT_abs_firstSent_label_emb, BERT_abs_firstSent_label_emb_right, BERT_abs_firstSent_label_cosSim, BERT_abstract_score, BERT_abstract_firstSent_score, complex_score, transe_score, textEmb_score, BERT_abs_label_score, BERT_abs_firstSent_label_score]\n", - "Index: []\n", - "\n", - "[0 rows x 46 columns]" - ] - }, - "execution_count": 185, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1[(wikiDF_wabs1.dim == 'other') & (wikiDF_wabs1.complex_score != -1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 341, - "id": "revolutionary-benchmark", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "inheritance 72707\n", - "meronymy 6886\n", - "context 5541\n", - "distinctness 4934\n", - "utility 2243\n", - "antonymy 2184\n", - "ordering 2107\n", - "material 1426\n", - "synonymy 1070\n", - "properties 1049\n", - "derivation 540\n", - "causation 510\n", - "similarity 345\n", - "attribution 187\n", - "other 42\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 341, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.dim.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 342, - "id": "naughty-station", - "metadata": {}, - "outputs": [], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "cnts = []\n", - "for col in scoreCols:\n", - " cnts.append(wikiDF_wabs1[wikiDF_wabs1[col] > -1].groupby('dim')[col].agg('count'))\n", - "cnts = pd.concat(cnts, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 343, - "id": "missing-fighter", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy2131.02131.0215421842184
attribution181.0181.0181187187
causation494.0494.0481510510
context5409.05409.0541355415541
derivation537.0537.0524540540
distinctness4831.04831.0480749344934
inheritance70211.070211.0697937270772707
material1403.01403.0137214261426
meronymy6791.06791.0650468866886
ordering2105.02105.0210321072107
properties833.0833.0102610491049
similarity343.0343.0345345345
synonymy1033.01033.0103010701070
utility2193.02193.0218922432243
otherNaNNaN424242
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 2131.0 2131.0 2154 \n", - "attribution 181.0 181.0 181 \n", - "causation 494.0 494.0 481 \n", - "context 5409.0 5409.0 5413 \n", - "derivation 537.0 537.0 524 \n", - "distinctness 4831.0 4831.0 4807 \n", - "inheritance 70211.0 70211.0 69793 \n", - "material 1403.0 1403.0 1372 \n", - "meronymy 6791.0 6791.0 6504 \n", - "ordering 2105.0 2105.0 2103 \n", - "properties 833.0 833.0 1026 \n", - "similarity 343.0 343.0 345 \n", - "synonymy 1033.0 1033.0 1030 \n", - "utility 2193.0 2193.0 2189 \n", - "other NaN NaN 42 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 2184 2184 \n", - "attribution 187 187 \n", - "causation 510 510 \n", - "context 5541 5541 \n", - "derivation 540 540 \n", - "distinctness 4934 4934 \n", - "inheritance 72707 72707 \n", - "material 1426 1426 \n", - "meronymy 6886 6886 \n", - "ordering 2107 2107 \n", - "properties 1049 1049 \n", - "similarity 345 345 \n", - "synonymy 1070 1070 \n", - "utility 2243 2243 \n", - "other 42 42 " - ] - }, - "execution_count": 343, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts" - ] - }, - { - "cell_type": "code", - "execution_count": 344, - "id": "endless-globe", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "complex_score 98495.0\n", - "transe_score 98495.0\n", - "textEmb_score 97964.0\n", - "BERT_abs_label_score 101771.0\n", - "BERT_abs_firstSent_label_score 101771.0\n", - "dtype: float64" - ] - }, - "execution_count": 344, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 345, - "id": "perfect-eagle", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "complex_score 0.967810\n", - "transe_score 0.967810\n", - "textEmb_score 0.962592\n", - "BERT_abs_label_score 1.000000\n", - "BERT_abs_firstSent_label_score 1.000000\n", - "dtype: float64" - ] - }, - "execution_count": 345, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts.sum()/len(wikiDF_wabs1)" - ] - }, - { - "cell_type": "code", - "execution_count": 346, - "id": "apart-moisture", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy0.3273020.3660090.4344310.5002740.466038
attribution0.3640510.4178250.3220490.4764010.398419
causation0.3209660.3727310.3959190.5117070.480563
context0.3865230.4087210.4192790.5409790.504633
derivation0.3312560.3884910.3270870.4332890.425505
distinctness0.3703870.4208510.3737560.5260510.463646
inheritance0.4398420.4488560.3730360.5402270.494134
material0.4015280.4483090.3783520.5710340.543981
meronymy0.3530690.4082190.3967280.5405990.486378
ordering0.2011870.1815610.2791720.3601870.352700
properties0.3889600.3771570.4078050.5827260.523747
similarity0.3084850.3165690.3014110.5006540.435636
synonymy0.3526600.3394450.3324320.5325400.461569
utility0.3350690.3515180.3988080.5156610.476737
otherNaNNaN0.3341160.5816740.450678
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 0.327302 0.366009 0.434431 \n", - "attribution 0.364051 0.417825 0.322049 \n", - "causation 0.320966 0.372731 0.395919 \n", - "context 0.386523 0.408721 0.419279 \n", - "derivation 0.331256 0.388491 0.327087 \n", - "distinctness 0.370387 0.420851 0.373756 \n", - "inheritance 0.439842 0.448856 0.373036 \n", - "material 0.401528 0.448309 0.378352 \n", - "meronymy 0.353069 0.408219 0.396728 \n", - "ordering 0.201187 0.181561 0.279172 \n", - "properties 0.388960 0.377157 0.407805 \n", - "similarity 0.308485 0.316569 0.301411 \n", - "synonymy 0.352660 0.339445 0.332432 \n", - "utility 0.335069 0.351518 0.398808 \n", - "other NaN NaN 0.334116 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 0.500274 0.466038 \n", - "attribution 0.476401 0.398419 \n", - "causation 0.511707 0.480563 \n", - "context 0.540979 0.504633 \n", - "derivation 0.433289 0.425505 \n", - "distinctness 0.526051 0.463646 \n", - "inheritance 0.540227 0.494134 \n", - "material 0.571034 0.543981 \n", - "meronymy 0.540599 0.486378 \n", - "ordering 0.360187 0.352700 \n", - "properties 0.582726 0.523747 \n", - "similarity 0.500654 0.435636 \n", - "synonymy 0.532540 0.461569 \n", - "utility 0.515661 0.476737 \n", - "other 0.581674 0.450678 " - ] - }, - "execution_count": 346, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "summsStd = []\n", - "for col in scoreCols:\n", - " summsStd.append(wikiDF_wabs1[(wikiDF_wabs1[col] > -1) & ~(wikiDF_wabs1[col].isna())].groupby('dim')[col].agg('std'))\n", - "summsStd = pd.concat(summsStd, axis=1)\n", - "summsStd" - ] - }, - { - "cell_type": "code", - "execution_count": 347, - "id": "italic-rehabilitation", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy1.4723071.5527081.8901031.9282491.961361
attribution2.0584122.3690821.7952902.0030341.864052
causation1.8781912.0748401.8949132.0588352.034320
context2.1989492.2870101.9258192.1429382.086860
derivation2.1012362.2361872.1171772.0804772.041239
distinctness1.7621271.6893481.7428841.9610341.892194
inheritance2.0523641.9248571.8025732.1410922.098482
material2.1815082.1789091.9860602.1178152.062357
meronymy1.9335471.8896991.8522772.0423961.989395
ordering1.2447151.1614491.3374451.3190641.322444
properties1.9885572.1725642.0175392.1936532.095989
similarity1.7915891.8972461.5542732.0254971.945071
synonymy1.7699291.6961031.6780281.9988861.880054
utility1.9270942.1322641.9186172.0806652.037705
otherNaNNaN1.7738982.1347661.918897
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 1.472307 1.552708 1.890103 \n", - "attribution 2.058412 2.369082 1.795290 \n", - "causation 1.878191 2.074840 1.894913 \n", - "context 2.198949 2.287010 1.925819 \n", - "derivation 2.101236 2.236187 2.117177 \n", - "distinctness 1.762127 1.689348 1.742884 \n", - "inheritance 2.052364 1.924857 1.802573 \n", - "material 2.181508 2.178909 1.986060 \n", - "meronymy 1.933547 1.889699 1.852277 \n", - "ordering 1.244715 1.161449 1.337445 \n", - "properties 1.988557 2.172564 2.017539 \n", - "similarity 1.791589 1.897246 1.554273 \n", - "synonymy 1.769929 1.696103 1.678028 \n", - "utility 1.927094 2.132264 1.918617 \n", - "other NaN NaN 1.773898 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 1.928249 1.961361 \n", - "attribution 2.003034 1.864052 \n", - "causation 2.058835 2.034320 \n", - "context 2.142938 2.086860 \n", - "derivation 2.080477 2.041239 \n", - "distinctness 1.961034 1.892194 \n", - "inheritance 2.141092 2.098482 \n", - "material 2.117815 2.062357 \n", - "meronymy 2.042396 1.989395 \n", - "ordering 1.319064 1.322444 \n", - "properties 2.193653 2.095989 \n", - "similarity 2.025497 1.945071 \n", - "synonymy 1.998886 1.880054 \n", - "utility 2.080665 2.037705 \n", - "other 2.134766 1.918897 " - ] - }, - "execution_count": 347, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "summs = []\n", - "for col in scoreCols:\n", - " summs.append(wikiDF_wabs1[(wikiDF_wabs1[col] > -1) & ~(wikiDF_wabs1[col].isna())].groupby('dim')[col].agg('mean'))\n", - "summs = pd.concat(summs, axis=1)\n", - "summs" - ] - }, - { - "cell_type": "code", - "execution_count": 348, - "id": "abandoned-armor", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dim\n", - "ordering 1.277024\n", - "antonymy 1.760945\n", - "synonymy 1.804600\n", - "distinctness 1.809517\n", - "similarity 1.842735\n", - "meronymy 1.941463\n", - "other 1.942520\n", - "causation 1.988220\n", - "inheritance 2.003874\n", - "attribution 2.017974\n", - "utility 2.019269\n", - "properties 2.093660\n", - "material 2.105330\n", - "derivation 2.115263\n", - "context 2.128315\n", - "dtype: float64" - ] - }, - "execution_count": 348, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summs.apply(lambda p: np.mean(list(filter(lambda y12: y12 != -1, [p[x] if not(pd.isna(p[x])) else -1 for x in scoreCols]))), axis=1).sort_values()" - ] - }, - { - "cell_type": "code", - "execution_count": 349, - "id": "accurate-faculty", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy12345
attribution45132
causation15243
context45132
derivation35421
distinctness31254
inheritance32154
material54132
meronymy32154
ordering21534
properties14253
similarity23154
synonymy32154
utility25143
other45132
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 1 2 3 \n", - "attribution 4 5 1 \n", - "causation 1 5 2 \n", - "context 4 5 1 \n", - "derivation 3 5 4 \n", - "distinctness 3 1 2 \n", - "inheritance 3 2 1 \n", - "material 5 4 1 \n", - "meronymy 3 2 1 \n", - "ordering 2 1 5 \n", - "properties 1 4 2 \n", - "similarity 2 3 1 \n", - "synonymy 3 2 1 \n", - "utility 2 5 1 \n", - "other 4 5 1 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 4 5 \n", - "attribution 3 2 \n", - "causation 4 3 \n", - "context 3 2 \n", - "derivation 2 1 \n", - "distinctness 5 4 \n", - "inheritance 5 4 \n", - "material 3 2 \n", - "meronymy 5 4 \n", - "ordering 3 4 \n", - "properties 5 3 \n", - "similarity 5 4 \n", - "synonymy 5 4 \n", - "utility 4 3 \n", - "other 3 2 " - ] - }, - "execution_count": 349, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def rankAlgosRowWise(row):\n", - " return (np.array([row[col] for col in scoreCols])).argsort().argsort() + 1\n", - "pd.DataFrame(summs.apply(rankAlgosRowWise, axis=1).to_list(), columns=scoreCols, index=summs.index)" - ] - }, - { - "cell_type": "code", - "execution_count": 352, - "id": "substantial-seven", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 352, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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bpPDsuF1JFInicM6k+hcRKLTsVgiD5rm0+TMAWyfMip0NImBRG6CgQ8M5vWnZzJn2uzQcSQm2rdrC0CbVi3p06snCxcvVSdLAKjcVM7mWQtp0buHOlkSG3HoZFXthOy6X76P28oBNrh70R7a1Ga7e9yGu18RVbbOAN40s2+7+7p9yCqStXbMmMiOGRMByOnYhbzjT1cHSz7X//arWLPsQ557eEroKBITW7ZW4MkkBQXN2LK1gllvzOHK/j8NHUsCym3dHN9ZSeWmciy/Cc1PLuKfI6r97ltiSKMLZsYRZnaiu/8d+CnwKqlzpnZ5A7jHzNqSOlzwAuDeaFkOcC7w+K513X2Tma0ws/Pc/cnofK5j3X1+NfveDDSvOnNv2zCzTu4+G5htZt8HOgLqZO3Fo4/czym9TqRt29a8v7yUm4beSckYDbMqIrvrXNyVnuecwqolK7lx6jAAJt3xGAunzw2cTEJat76Mq6+7GYDKnZX069ubk04oDpxKQspr34qj7r4aEjmYGeunvMbGF0tDxxL5XBw6WUuBgdH5WIuBkaQGoQDA3deY2W+Bl/li4Is/R4vLgePN7HfAJ8CPo/k/A0ZG8/NIdcKq62Q9C0w0s7PT91nDNoaZWecoy4t72K6kufCigaEjSIwlVy1l26qloWNITLxb+jaXFZ4bOobETMfDOjB57IjQMSRGti5ZyeLTrw0dQ/ZRyFH/MiUOnayd7n5hlXmF6XfcfTwwvrqV3X23vzB3XwGcXs38S6vcfwc4Nm3WzFps40fV5RAREREREYF4dLJERERERCRLNP46VuBOlru/D3xzP9Y/qP7SiIiIiIiI7D9VskREREREJGOyYXTBnNABREREREREGhN1skREREREROqRDhcUEREREZGM8SwY+kKVLBERERERkXqkSpaIiIiIiGSMBr4QERERERGROlElS0REREREMiapc7JERERERESkLlTJamAXH3pi6AgSQ4vvLQsdQWJo3Cf/CB1BYmbcoSezdfXM0DEkZroNahU6gsh+afx1LFWyREREYksdLBGRA5MqWSIiIiIikjE6J0tERERERETqRJUsERERERHJGF0nS0REREREROpElSwREREREckY1zlZIiIiIiIijZOZdTSzl81ssZktMrOrq2ljZnaPmS0zswVm9q2atqtKloiIiIiIZEzMzsnaCfyHu88x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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = pyplot.subplots(figsize=(15,10))\n", - "sns.heatmap(pd.DataFrame(summs.apply(rankAlgosRowWise, axis=1).to_list(), columns=scoreCols, index=summs.index), annot=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 353, - "id": "spatial-wrist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy22927
attribution1114652
causation681089
context1413121413
derivation121215911
distinctness33434
inheritance10771315
material1311131112
meronymy85878
ordering11111
properties910141514
similarity56266
synonymy44343
utility79111010
other15155125
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 2 2 9 \n", - "attribution 11 14 6 \n", - "causation 6 8 10 \n", - "context 14 13 12 \n", - "derivation 12 12 15 \n", - "distinctness 3 3 4 \n", - "inheritance 10 7 7 \n", - "material 13 11 13 \n", - "meronymy 8 5 8 \n", - "ordering 1 1 1 \n", - "properties 9 10 14 \n", - "similarity 5 6 2 \n", - "synonymy 4 4 3 \n", - "utility 7 9 11 \n", - "other 15 15 5 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 2 7 \n", - "attribution 5 2 \n", - "causation 8 9 \n", - "context 14 13 \n", - "derivation 9 11 \n", - "distinctness 3 4 \n", - "inheritance 13 15 \n", - "material 11 12 \n", - "meronymy 7 8 \n", - "ordering 1 1 \n", - "properties 15 14 \n", - "similarity 6 6 \n", - "synonymy 4 3 \n", - "utility 10 10 \n", - "other 12 5 " - ] - }, - "execution_count": 353, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def rankAlgosColWise(colVals):\n", - " return pd.Series(((np.array([colVals.to_list()])).argsort().argsort() + 1)[0], index=summs.index, name=colVals.name)\n", - "pd.concat([rankAlgosColWise(summs[col]) for col in scoreCols], axis=1).head(15)" - ] - }, - { - "cell_type": "code", - "execution_count": 354, - "id": "confused-miami", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 354, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = pyplot.subplots(figsize=(15,10))\n", - "sns.heatmap(pd.concat([rankAlgosColWise(summs[col]) for col in scoreCols], axis=1).head(15), annot=True)" - ] - }, - { - "cell_type": "markdown", - "id": "rocky-power", - "metadata": {}, - "source": [ - "# Examples" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "id": "alive-surprise", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "properties\n", - " node1;label node2;label\n", - "0 temple quantity\n", - "1 tram quantity\n", - "2 number of objects quantity\n", - "4 award ceremony facet of\n", - "5 geography of geographic location facet of\n", - "other\n", - " node1;label node2;label\n", - "3 student organization of represents\n", - "20 name nickname\n", - "25 mission statement motto text\n", - "42 house organ official blog\n", - "44 defender prosecutor\n", - "inheritance\n", - " node1;label node2;label\n", - "69 nickname name\n", - "214 geometric algebra algebra over a field\n", - "215 division algebra algebra over a field\n", - "217 operator algebra algebra over a field\n", - "219 alternative algebra algebra over a field\n", - "context\n", - " node1;label node2;label\n", - "216 mutation algebra over a field\n", - "228 filmmaker cinematic technique\n", - "254 film technician cinematic technique\n", - "264 periodical library periodical\n", - "393 web mechanical engineering\n", - "distinctness\n", - " node1;label node2;label\n", - "218 algebra over a ring algebra over a field\n", - "300 power series formal power series\n", - "311 testing test\n", - "315 test (assessment) test\n", - "338 lawn grassland\n", - "meronymy\n", - " node1;label node2;label\n", - "257 decomposition model geometric modeling\n", - "258 solid model geometric modeling\n", - "262 volume periodical\n", - "279 column periodical\n", - "281 issue periodical\n", - "antonymy\n", - " node1;label node2;label\n", - "260 non-periodical publication periodical\n", - "340 younger sister elder sister\n", - "341 elder brother elder sister\n", - "425 composite knot prime knot\n", - "526 prefix suffix\n", - "utility\n", - " node1;label node2;label\n", - "308 elevator test tower test\n", - "319 dummy load test\n", - "479 prototype experiment\n", - "591 running shoes indoor athletics\n", - "597 room and board boarding\n", - "attribution\n", - " node1;label node2;label\n", - "324 test result test\n", - "328 electronic circuit through-hole technology\n", - "1239 shotgun rifle factory\n", - "1644 image information information visualization\n", - "1985 furniture fabric tapestry stitch\n", - "derivation\n", - " node1;label node2;label\n", - "386 surrogate acronym\n", - "428 milestone milestone\n", - "435 fictional brown dwarf brown dwarf\n", - "582 rose rose\n", - "755 fictional cargo pants cargo pants\n", - "synonymy\n", - " node1;label node2;label\n", - "418 after-name family name\n", - "534 playwright stage author\n", - "539 knight knight\n", - "575 resort town seaside resort\n", - "608 mourning grief\n", - "material\n", - " node1;label node2;label\n", - "586 list of minor planets minor planet\n", - "676 list of educational years educational year\n", - "724 list of martial arts films martial arts film\n", - "828 fur collar fake fur\n", - "857 champagne cocktail sugar cube\n", - "causation\n", - " node1;label node2;label\n", - "606 loss grief\n", - "736 double beta decay beta particle\n", - "778 flight wake turbulence\n", - "1896 spice longevity\n", - "1961 brain cancer vertigo\n", - "ordering\n", - " node1;label node2;label\n", - "766 tomorrow day after tomorrow\n", - "896 group 15 group 16\n", - "1740 secondary source tertiary source\n", - "1965 construction permit groundbreaking\n", - "2065 kilo mega\n", - "similarity\n", - " node1;label node2;label\n", - "1039 expertise specialty\n", - "1040 skilled trade specialty\n", - "1224 multi-purpose hall multi-purpose stadium\n", - "1369 signature song one-hit wonder\n", - "1370 nine days\\' wonder one-hit wonder\n" - ] - } - ], - "source": [ - "for dim1 in wikiDF_wabs1.dim.unique():\n", - " print(dim1)\n", - " print(wikiDF_wabs1[wikiDF_wabs1.dim == dim1].head()[['node1;label', 'node2;label']])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "compact-right", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "vocal-convertible", - "metadata": {}, - "source": [ - "# Sampling" - ] - }, - { - "cell_type": "code", - "execution_count": 205, - "id": "laden-kentucky", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.utils.random import sample_without_replacement" - ] - }, - { - "cell_type": "code", - "execution_count": 246, - "id": "eastern-worth", - "metadata": {}, - "outputs": [], - "source": [ - "sample_wikiDF = wikiDF_wabs1.iloc[sample_without_replacement(len(wikiDF_wabs1), 100, random_state=1000)]" - ] - }, - { - "cell_type": "code", - "execution_count": 247, - "id": "junior-service", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['complex_score'] = sample_wikiDF['complex_cosSim'].apply(changeScale, args=(sample_wikiDF['complex_cosSim'].where(sample_wikiDF['complex_cosSim'] != -1).min(), sample_wikiDF['complex_cosSim'].max()))\n", - ":2: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['transe_score'] = sample_wikiDF['transe_cosSim'].apply(changeScale, args=(sample_wikiDF['transe_cosSim'].where(sample_wikiDF['transe_cosSim'] != -1).min(), sample_wikiDF['transe_cosSim'].max()))\n", - ":3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['textEmb_score'] = sample_wikiDF['textEmb_cosSim'].apply(changeScale, args=(sample_wikiDF['textEmb_cosSim'].where(sample_wikiDF['textEmb_cosSim'] != -1).min(), sample_wikiDF['textEmb_cosSim'].max()))\n", - ":4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['BERT_abs_label_score'] = sample_wikiDF['BERT_abs_label_cosSim'].apply(changeScale, args=(sample_wikiDF['BERT_abs_label_cosSim'].where(sample_wikiDF['BERT_abs_label_cosSim'] != -1).min(), sample_wikiDF['BERT_abs_label_cosSim'].max()))\n", - ":5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " sample_wikiDF['BERT_abs_firstSent_label_score'] = sample_wikiDF['BERT_abs_firstSent_label_cosSim'].apply(changeScale, args=(sample_wikiDF['BERT_abs_firstSent_label_cosSim'].where(sample_wikiDF['BERT_abs_firstSent_label_cosSim'] != -1).min(), sample_wikiDF['BERT_abs_firstSent_label_cosSim'].max()))\n" - ] - } - ], - "source": [ - "sample_wikiDF['complex_score'] = sample_wikiDF['complex_cosSim'].apply(changeScale, args=(sample_wikiDF['complex_cosSim'].where(sample_wikiDF['complex_cosSim'] != -1).min(), sample_wikiDF['complex_cosSim'].max()))\n", - "sample_wikiDF['transe_score'] = sample_wikiDF['transe_cosSim'].apply(changeScale, args=(sample_wikiDF['transe_cosSim'].where(sample_wikiDF['transe_cosSim'] != -1).min(), sample_wikiDF['transe_cosSim'].max()))\n", - "sample_wikiDF['textEmb_score'] = sample_wikiDF['textEmb_cosSim'].apply(changeScale, args=(sample_wikiDF['textEmb_cosSim'].where(sample_wikiDF['textEmb_cosSim'] != -1).min(), sample_wikiDF['textEmb_cosSim'].max()))\n", - "sample_wikiDF['BERT_abs_label_score'] = sample_wikiDF['BERT_abs_label_cosSim'].apply(changeScale, args=(sample_wikiDF['BERT_abs_label_cosSim'].where(sample_wikiDF['BERT_abs_label_cosSim'] != -1).min(), sample_wikiDF['BERT_abs_label_cosSim'].max()))\n", - "sample_wikiDF['BERT_abs_firstSent_label_score'] = sample_wikiDF['BERT_abs_firstSent_label_cosSim'].apply(changeScale, args=(sample_wikiDF['BERT_abs_firstSent_label_cosSim'].where(sample_wikiDF['BERT_abs_firstSent_label_cosSim'] != -1).min(), sample_wikiDF['BERT_abs_firstSent_label_cosSim'].max()))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 248, - "id": "musical-penny", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
count100.000000100.000000100.000000100.000000100.000000
mean2.3737342.4676292.1713932.1625352.348227
std0.8972400.9429420.7279550.5941870.658818
min-1.000000-1.000000-1.0000001.0000001.000000
25%1.9267722.0815561.7115011.7883401.874007
50%2.4577552.5812062.0427452.1616762.360556
75%2.8723363.1026542.5994252.5394332.828806
max4.0000004.0000004.0000004.0000004.000000
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score BERT_abs_label_score \\\n", - "count 100.000000 100.000000 100.000000 100.000000 \n", - "mean 2.373734 2.467629 2.171393 2.162535 \n", - "std 0.897240 0.942942 0.727955 0.594187 \n", - "min -1.000000 -1.000000 -1.000000 1.000000 \n", - "25% 1.926772 2.081556 1.711501 1.788340 \n", - "50% 2.457755 2.581206 2.042745 2.161676 \n", - "75% 2.872336 3.102654 2.599425 2.539433 \n", - "max 4.000000 4.000000 4.000000 4.000000 \n", - "\n", - " BERT_abs_firstSent_label_score \n", - "count 100.000000 \n", - "mean 2.348227 \n", - "std 0.658818 \n", - "min 1.000000 \n", - "25% 1.874007 \n", - "50% 2.360556 \n", - "75% 2.828806 \n", - "max 4.000000 " - ] - }, - "execution_count": 248, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "sample_wikiDF[scoreCols].describe()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 249, - "id": "guilty-berkeley", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "inheritance 75\n", - "context 6\n", - "meronymy 5\n", - "distinctness 4\n", - "utility 3\n", - "antonymy 2\n", - "synonymy 1\n", - "causation 1\n", - "ordering 1\n", - "material 1\n", - "properties 1\n", - "Name: dim, dtype: int64" - ] - }, - "execution_count": 249, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sample_wikiDF.dim.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "id": "funded-geology", - "metadata": {}, - "outputs": [], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "cnts = []\n", - "for col in scoreCols:\n", - " cnts.append(sample_wikiDF[sample_wikiDF[col] > -1].groupby('dim')[col].agg('count'))\n", - "cnts = pd.concat(cnts, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 251, - "id": "threaded-writer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy22222
causation11111
context66666
distinctness33344
inheritance7474757575
material11111
meronymy44555
ordering11111
properties11111
synonymy11111
utility33333
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 2 2 2 \n", - "causation 1 1 1 \n", - "context 6 6 6 \n", - "distinctness 3 3 3 \n", - "inheritance 74 74 75 \n", - "material 1 1 1 \n", - "meronymy 4 4 5 \n", - "ordering 1 1 1 \n", - "properties 1 1 1 \n", - "synonymy 1 1 1 \n", - "utility 3 3 3 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 2 2 \n", - "causation 1 1 \n", - "context 6 6 \n", - "distinctness 4 4 \n", - "inheritance 75 75 \n", - "material 1 1 \n", - "meronymy 5 5 \n", - "ordering 1 1 \n", - "properties 1 1 \n", - "synonymy 1 1 \n", - "utility 3 3 " - ] - }, - "execution_count": 251, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts" - ] - }, - { - "cell_type": "code", - "execution_count": 252, - "id": "weird-employer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "complex_score 97\n", - "transe_score 97\n", - "textEmb_score 99\n", - "BERT_abs_label_score 100\n", - "BERT_abs_firstSent_label_score 100\n", - "dtype: int64" - ] - }, - "execution_count": 252, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 253, - "id": "excellent-principal", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "complex_score 0.97\n", - "transe_score 0.97\n", - "textEmb_score 0.99\n", - "BERT_abs_label_score 1.00\n", - "BERT_abs_firstSent_label_score 1.00\n", - "dtype: float64" - ] - }, - "execution_count": 253, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cnts.sum()/len(sample_wikiDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 254, - "id": "available-example", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy0.6642000.0784571.8082021.2475411.091346
causationNaNNaNNaNNaNNaN
context0.6086260.6657371.0145460.7136130.737005
distinctness0.4780500.8324490.2475070.6620650.737140
inheritance0.6771630.7178810.5919210.5584810.625973
materialNaNNaNNaNNaNNaN
meronymy0.3096350.4965490.4693270.5419850.448966
orderingNaNNaNNaNNaNNaN
propertiesNaNNaNNaNNaNNaN
synonymyNaNNaNNaNNaNNaN
utility0.5165120.4973440.4894400.8091660.995372
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 0.664200 0.078457 1.808202 \n", - "causation NaN NaN NaN \n", - "context 0.608626 0.665737 1.014546 \n", - "distinctness 0.478050 0.832449 0.247507 \n", - "inheritance 0.677163 0.717881 0.591921 \n", - "material NaN NaN NaN \n", - "meronymy 0.309635 0.496549 0.469327 \n", - "ordering NaN NaN NaN \n", - "properties NaN NaN NaN \n", - "synonymy NaN NaN NaN \n", - "utility 0.516512 0.497344 0.489440 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 1.247541 1.091346 \n", - "causation NaN NaN \n", - "context 0.713613 0.737005 \n", - "distinctness 0.662065 0.737140 \n", - "inheritance 0.558481 0.625973 \n", - "material NaN NaN \n", - "meronymy 0.541985 0.448966 \n", - "ordering NaN NaN \n", - "properties NaN NaN \n", - "synonymy NaN NaN \n", - "utility 0.809166 0.995372 " - ] - }, - "execution_count": 254, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "summsStd = []\n", - "for col in scoreCols:\n", - " summsStd.append(sample_wikiDF[(sample_wikiDF[col] > -1) & ~(sample_wikiDF[col].isna())].groupby('dim')[col].agg('std'))\n", - "summsStd = pd.concat(summsStd, axis=1)\n", - "summsStd" - ] - }, - { - "cell_type": "code", - "execution_count": 255, - "id": "bulgarian-essence", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy1.6412621.6354092.5354062.5251132.550744
causation2.8036282.0304272.7692432.0618842.102512
context2.7333422.8962652.4902452.6572542.815580
distinctness1.5321771.7461231.4372662.1878601.958226
inheritance2.5644392.5980652.1906342.1107642.324834
material2.5012232.9500433.0335502.9702783.233506
meronymy2.3448572.8527952.1020231.7427551.817167
ordering1.5319411.4962601.0844692.6129512.893667
properties2.1187383.1758303.4865572.2361752.988376
synonymy1.5245021.5433962.0304042.1991882.016465
utility2.1554383.0040602.2011332.4689392.770659
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 1.641262 1.635409 2.535406 \n", - "causation 2.803628 2.030427 2.769243 \n", - "context 2.733342 2.896265 2.490245 \n", - "distinctness 1.532177 1.746123 1.437266 \n", - "inheritance 2.564439 2.598065 2.190634 \n", - "material 2.501223 2.950043 3.033550 \n", - "meronymy 2.344857 2.852795 2.102023 \n", - "ordering 1.531941 1.496260 1.084469 \n", - "properties 2.118738 3.175830 3.486557 \n", - "synonymy 1.524502 1.543396 2.030404 \n", - "utility 2.155438 3.004060 2.201133 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 2.525113 2.550744 \n", - "causation 2.061884 2.102512 \n", - "context 2.657254 2.815580 \n", - "distinctness 2.187860 1.958226 \n", - "inheritance 2.110764 2.324834 \n", - "material 2.970278 3.233506 \n", - "meronymy 1.742755 1.817167 \n", - "ordering 2.612951 2.893667 \n", - "properties 2.236175 2.988376 \n", - "synonymy 2.199188 2.016465 \n", - "utility 2.468939 2.770659 " - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scoreCols = ['complex_score', 'transe_score', 'textEmb_score', 'BERT_abs_label_score', 'BERT_abs_firstSent_label_score']\n", - "summs = []\n", - "for col in scoreCols:\n", - " summs.append(sample_wikiDF[(sample_wikiDF[col] > -1) & ~(sample_wikiDF[col].isna())].groupby('dim')[col].agg('mean'))\n", - "summs = pd.concat(summs, axis=1)\n", - "summs" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "id": "elegant-statement", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dim\n", - "distinctness 1.772331\n", - "synonymy 1.862791\n", - "ordering 1.923858\n", - "meronymy 2.171920\n", - "antonymy 2.177587\n", - "causation 2.353539\n", - "inheritance 2.357747\n", - "utility 2.520046\n", - "context 2.718537\n", - "properties 2.801135\n", - "material 2.937720\n", - "dtype: float64" - ] - }, - "execution_count": 256, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summs.apply(lambda p: np.mean(list(filter(lambda y12: y12 != -1, [p[x] if not(pd.isna(p[x])) else -1 for x in scoreCols]))), axis=1).sort_values()" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "id": "equal-headset", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy21435
causation51423
context35124
distinctness23154
inheritance45213
material12435
meronymy45312
ordering32145
properties14523
synonymy12453
utility15234
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 2 1 4 \n", - "causation 5 1 4 \n", - "context 3 5 1 \n", - "distinctness 2 3 1 \n", - "inheritance 4 5 2 \n", - "material 1 2 4 \n", - "meronymy 4 5 3 \n", - "ordering 3 2 1 \n", - "properties 1 4 5 \n", - "synonymy 1 2 4 \n", - "utility 1 5 2 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 3 5 \n", - "causation 2 3 \n", - "context 2 4 \n", - "distinctness 5 4 \n", - "inheritance 1 3 \n", - "material 3 5 \n", - "meronymy 1 2 \n", - "ordering 4 5 \n", - "properties 2 3 \n", - "synonymy 5 3 \n", - "utility 3 4 " - ] - }, - "execution_count": 257, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def rankAlgosRowWise(row):\n", - " return (np.array([row[col] for col in scoreCols])).argsort().argsort() + 1\n", - "pd.DataFrame(summs.apply(rankAlgosRowWise, axis=1).to_list(), columns=scoreCols, index=summs.index)" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "id": "funky-acting", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
complex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
dim
antonymy43886
causation115924
context1087108
distinctness34242
inheritance96535
material89101111
meronymy77411
ordering21199
properties51111610
synonymy12353
utility610677
\n", - "
" - ], - "text/plain": [ - " complex_score transe_score textEmb_score \\\n", - "dim \n", - "antonymy 4 3 8 \n", - "causation 11 5 9 \n", - "context 10 8 7 \n", - "distinctness 3 4 2 \n", - "inheritance 9 6 5 \n", - "material 8 9 10 \n", - "meronymy 7 7 4 \n", - "ordering 2 1 1 \n", - "properties 5 11 11 \n", - "synonymy 1 2 3 \n", - "utility 6 10 6 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "dim \n", - "antonymy 8 6 \n", - "causation 2 4 \n", - "context 10 8 \n", - "distinctness 4 2 \n", - "inheritance 3 5 \n", - "material 11 11 \n", - "meronymy 1 1 \n", - "ordering 9 9 \n", - "properties 6 10 \n", - "synonymy 5 3 \n", - "utility 7 7 " - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def rankAlgosColWise(colVals):\n", - " return pd.Series(((np.array([colVals.to_list()])).argsort().argsort() + 1)[0], index=summs.index, name=colVals.name)\n", - "pd.concat([rankAlgosColWise(summs[col]) for col in scoreCols], axis=1).head(15)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "filled-bridge", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "armed-incidence", - "metadata": {}, - "source": [ - "# Retrofitting" - ] - }, - { - "cell_type": "code", - "execution_count": 293, - "id": "satisfied-china", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn.metrics.pairwise import euclidean_distances\n", - "from sklearn.metrics.pairwise import cosine_similarity\n", - "import scipy.stats as stats\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.metrics import confusion_matrix\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from tqdm.notebook import tqdm\n", - "from itertools import combinations\n", - "from math import comb\n", - "from sklearn.ensemble import RandomForestClassifier\n", - "\n", - "def normalizeTargetScores(val1, minVal, maxVal):\n", - " return (val1 - minVal) / (maxVal - minVal) if val1 != -1 else -1\n", - "\n", - "def normalize(embedDict):\n", - " for key, val in embedDict.items():\n", - " temp = np.array([float(val1) for val1 in val])\n", - " temp2 = temp**2\n", - " embedDict[key] = temp / np.sqrt((temp2.sum() + 1e-6))\n", - " return embedDict\n", - "\n", - "def fetchEmbeddings(df):\n", - " embedDict = {}\n", - " for _, row in df.iterrows():\n", - " embedDict[row.node] = row.value\n", - " return normalize(embedDict)\n", - "\n", - "def standardizeDataset(df, targetCol, val1):\n", - "# df1 = df[df[targetCol] > -1]\n", - " df1 = df.copy()\n", - " df1['bert2SentSim'] = val1\n", - "# df1['bert2SentSim'] = df1[targetCol].apply(normalizeTargetScores, args=(df1[targetCol].where(df1[targetCol] != -1).min(), df1[targetCol].max()))\n", - "# print(df1[targetCol].describe())\n", - "# print(df1[targetCol+'_norm'].describe())\n", - " return df1\n", - "\n", - "def fetchNeighbours(df):\n", - " \n", - " neighboursDict = {}\n", - " for _, row in df.iterrows():\n", - " if row.node1 not in neighboursDict:\n", - " neighboursDict[row.node1] = []\n", - " neighboursDict[row.node1].append((row.node2, row['bert2SentSim']))\n", - " \n", - " if row.node2 not in neighboursDict:\n", - " neighboursDict[row.node2] = []\n", - " neighboursDict[row.node2].append((row.node1, row['bert2SentSim']))\n", - " print(max([len(neigh) for neigh in neighboursDict.values()]))\n", - " return neighboursDict\n", - "\n", - "def retrofit(embedDict, neighDict, weightCase):\n", - " newEmbedDict = {}\n", - " for word in embedDict.keys():\n", - " if word in neighDict:\n", - " neighbs = neighDict[word]\n", - " neighbs = list(filter(lambda p: p[0] in embedDict, neighbs))\n", - " if len(neighbs) == 0:\n", - " newEmbedDict[word] = embedDict[word]\n", - " continue\n", - "# assert len(neighbs) == 1\n", - " sumOfSims = sum([neighb[1] for neighb in neighbs])\n", - " sumOfEmbs = sum([embedDict[neighb[0]] * float(neighb[1]) for neighb in neighbs])\n", - " if weightCase == 1:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs)) + sumOfEmbs) / ((len(neighbs)) + sumOfSims)\n", - " elif weightCase == 2:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**2 + sumOfEmbs) / ((len(neighbs))**2 + sumOfSims)\n", - " elif weightCase == 0.5:\n", - " newEmbedDict[word] = (embedDict[word] * (len(neighbs))**0.5 + sumOfEmbs) / ((len(neighbs))**0.5 + sumOfSims)\n", - " else:\n", - " raise\n", - " else:\n", - " newEmbedDict[word] = embedDict[word]\n", - " return newEmbedDict\n", - "\n", - "def determineDistances(embedDict, newEmbedDict):\n", - " dist = []\n", - " for word in embedDict.keys():\n", - " dist.append(euclidean_distances([embedDict[word]], [newEmbedDict[word]])[0][0])\n", - " return dist" - ] - }, - { - "cell_type": "code", - "execution_count": 312, - "id": "enhanced-journalist", - "metadata": {}, - "outputs": [], - "source": [ - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'\n", - "\n", - "LABELS = ['I','U','M']\n", - "\n", - "def fetchCorrelationResults(embedDict, newEmbedDict):\n", - " wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353_all_embeddings_with_retrofits.csv')\n", - " print(f\"Length of wordsim dataset: {len(wordSim353AnnotDF_New)}\")\n", - " assert wordSim353AnnotDF_New.word1_kg_id.isna().sum() == 0\n", - " assert wordSim353AnnotDF_New.word2_kg_id.isna().sum() == 0\n", - " wordSim353AnnotDF_New['category'] = wordSim353AnnotDF_New.Avg.apply(labelSamples)\n", - " wordSim353AnnotDF_New2 = wordSim353AnnotDF_New[wordSim353AnnotDF_New.apply(lambda p: p['word1_kg_id'] in embedDict and p['word2_kg_id'] in embedDict, axis=1)]\n", - " wordSimMissingSet = set(wordSim353AnnotDF_New[wordSim353AnnotDF_New.word1_kg_id.apply(lambda p: p not in embedDict)].word1_kg_id.to_list() + wordSim353AnnotDF_New[wordSim353AnnotDF_New.word2_kg_id.apply(lambda p: p not in embedDict)].word2_kg_id.to_list())\n", - "# wordSimMissingSet\n", - " print(f\"No. of pairs with some value for embeddings: {len(wordSim353AnnotDF_New2)}\")\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n", - " print(f\"KT Corr of old emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['Avg'])}\")\n", - " print(f\"KT Corr of new emb with Annotated Avg: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['Avg'])}\")\n", - " print(f\"KT Corr of old emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textOld'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " print(f\"KT Corr of new emb with Human Avg Reversed: {stats.kendalltau(wordSim353AnnotDF_New2['textNew'], wordSim353AnnotDF_New2['H_reversed'])}\")\n", - " \n", - " print(f\"Classification Accuracy of old embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " print(f\"Classification Accuracy of new embeddings categories vs annotated averages categories: {accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])}\")\n", - " \n", - " cm_old = confusion_matrix(wordSim353AnnotDF_New2['category'], wordSim353AnnotDF_New2['textOld'].apply(labelSamples), labels=LABELS)\n", - " cm_new = confusion_matrix(wordSim353AnnotDF_New2['category'], wordSim353AnnotDF_New2['textNew'].apply(labelSamples), labels=LABELS)\n", - " \n", - " return wordSimMissingSet, cm_old, cm_new, accuracy_score(wordSim353AnnotDF_New2['textOld'].apply(labelSamples), wordSim353AnnotDF_New2['category']), accuracy_score(wordSim353AnnotDF_New2['textNew'].apply(labelSamples), wordSim353AnnotDF_New2['category'])" - ] - }, - { - "cell_type": "code", - "execution_count": 297, - "id": "dried-subcommittee", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nodetranse_embedding
0Q18037012[0.000987129, -0.157959029, 0.601584613, -0.41...
1Q13112971[0.323111564, -0.157194719, 0.350547582, -0.13...
2Q59336660[0.067076892, -0.706452787, -0.070606612, 0.06...
3Q289472[-0.444723994, -0.020702582, 0.109241754, -0.4...
4Q1931010[-0.055137988, -0.652317405, 0.043370813, -0.3...
\n", - "
" - ], - "text/plain": [ - " node transe_embedding\n", - "0 Q18037012 [0.000987129, -0.157959029, 0.601584613, -0.41...\n", - "1 Q13112971 [0.323111564, -0.157194719, 0.350547582, -0.13...\n", - "2 Q59336660 [0.067076892, -0.706452787, -0.070606612, 0.06...\n", - "3 Q289472 [-0.444723994, -0.020702582, 0.109241754, -0.4...\n", - "4 Q1931010 [-0.055137988, -0.652317405, 0.043370813, -0.3..." - ] - }, - "execution_count": 297, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "transeEmbeddingsDF = pd.read_csv('../data/wordsim353_transe_embeddings.csv')\n", - "transeEmbeddingsDF['transe_embedding'] = transeEmbeddingsDF['transe_embedding'].apply(lambda p: [float(p1) for p1 in p.split(',')])\n", - "transeEmbeddingsDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 298, - "id": "italic-stations", - "metadata": {}, - "outputs": [], - "source": [ - "transeEmbeddings = {}\n", - "for _, row in transeEmbeddingsDF.iterrows():\n", - " transeEmbeddings[row['node']] = np.array(row['transe_embedding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 264, - "id": "imperial-baptist", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node2node1relationnode1;labelnode2;labelrelation;labelrelation;dimensionsourcesentencenode1_compl_emb...BERT_abs_firstSent_label_embBERT_abs_firstSent_label_emb_rightBERT_abs_firstSent_label_cosSimBERT_abstract_scoreBERT_abstract_firstSent_scorecomplex_scoretranse_scoretextEmb_scoreBERT_abs_label_scoreBERT_abs_firstSent_label_score
0P1114Q2142152/r/HasPropertytemplequantityproperties for this typeNaNWDNaN[-0.056723248, -0.984291673, -0.140366003, -0.......[0.6187984943389893, 1.4799031019210815, 0.515...[-0.21400201320648193, -0.1853264421224594, 2....0.111954-1.0-1.0-1.0-1.02.5334563.4591053.219849
1P1114Q3407658/r/HasPropertytramquantityproperties for this typeNaNWDNaN[0.208795503, -0.935872674, 0.694316924, 0.018......[-0.1387496143579483, -1.0609047412872314, -0....[-0.21400196850299835, -0.1853266954421997, 2....0.066402-1.0-1.0-1.0-1.02.6237713.4305623.333714
2P1114Q41792217/r/HasPropertynumber of objectsquantityWikidata propertyNaNWDNaN[-0.3635993, -0.764536679, 0.060853526, -0.071......[0.6716414093971252, -0.08505986630916595, 1.6...[-0.21400196850299835, -0.1853266954421997, 2....0.701743-1.0-1.0-1.0-1.02.4834661.7460961.745552
3P1268P6840/r/RelatedTostudent organization ofrepresentssee alsoNaNWDNaNNone...[0.11234442889690399, -0.34427452087402344, 1....[0.1607293337583542, -0.1969822645187378, 2.40...0.546000-1.0-1.0-1.0-1.02.0847812.1356932.134864
4P1269Q4504495/r/HasPropertyaward ceremonyfacet ofproperties for this typeNaNWDNaN[0.0430861, -0.041153915, -0.603652894, -0.464......[-0.02503090538084507, 0.4087623953819275, 1.9...[-0.03644487261772156, -0.5494412183761597, 2....0.372485-1.0-1.0-1.0-1.02.4097783.3338352.568600
\n", - "

5 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - " node2 node1 relation node1;label node2;label \\\n", - "0 P1114 Q2142152 /r/HasProperty temple quantity \n", - "1 P1114 Q3407658 /r/HasProperty tram quantity \n", - "2 P1114 Q41792217 /r/HasProperty number of objects quantity \n", - "3 P1268 P6840 /r/RelatedTo student organization of represents \n", - "4 P1269 Q4504495 /r/HasProperty award ceremony facet of \n", - "\n", - " relation;label relation;dimension source sentence \\\n", - "0 properties for this type NaN WD NaN \n", - "1 properties for this type NaN WD NaN \n", - "2 Wikidata property NaN WD NaN \n", - "3 see also NaN WD NaN \n", - "4 properties for this type NaN WD NaN \n", - "\n", - " node1_compl_emb ... \\\n", - "0 [-0.056723248, -0.984291673, -0.140366003, -0.... ... \n", - "1 [0.208795503, -0.935872674, 0.694316924, 0.018... ... \n", - "2 [-0.3635993, -0.764536679, 0.060853526, -0.071... ... \n", - "3 None ... \n", - "4 [0.0430861, -0.041153915, -0.603652894, -0.464... ... \n", - "\n", - " BERT_abs_firstSent_label_emb \\\n", - "0 [0.6187984943389893, 1.4799031019210815, 0.515... \n", - "1 [-0.1387496143579483, -1.0609047412872314, -0.... \n", - "2 [0.6716414093971252, -0.08505986630916595, 1.6... \n", - "3 [0.11234442889690399, -0.34427452087402344, 1.... \n", - "4 [-0.02503090538084507, 0.4087623953819275, 1.9... \n", - "\n", - " BERT_abs_firstSent_label_emb_right \\\n", - "0 [-0.21400201320648193, -0.1853264421224594, 2.... \n", - "1 [-0.21400196850299835, -0.1853266954421997, 2.... \n", - "2 [-0.21400196850299835, -0.1853266954421997, 2.... \n", - "3 [0.1607293337583542, -0.1969822645187378, 2.40... \n", - "4 [-0.03644487261772156, -0.5494412183761597, 2.... \n", - "\n", - " BERT_abs_firstSent_label_cosSim BERT_abstract_score \\\n", - "0 0.111954 -1.0 \n", - "1 0.066402 -1.0 \n", - "2 0.701743 -1.0 \n", - "3 0.546000 -1.0 \n", - "4 0.372485 -1.0 \n", - "\n", - " BERT_abstract_firstSent_score complex_score transe_score textEmb_score \\\n", - "0 -1.0 -1.0 -1.0 2.533456 \n", - "1 -1.0 -1.0 -1.0 2.623771 \n", - "2 -1.0 -1.0 -1.0 2.483466 \n", - "3 -1.0 -1.0 -1.0 2.084781 \n", - "4 -1.0 -1.0 -1.0 2.409778 \n", - "\n", - " BERT_abs_label_score BERT_abs_firstSent_label_score \n", - "0 3.459105 3.219849 \n", - "1 3.430562 3.333714 \n", - "2 1.746096 1.745552 \n", - "3 2.135693 2.134864 \n", - "4 3.333835 2.568600 \n", - "\n", - "[5 rows x 46 columns]" - ] - }, - "execution_count": 264, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wikiDF_wabs1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 279, - "id": "mexican-dispatch", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 2.000000\n", - "mean -0.031714\n", - "std 0.002003\n", - "min -0.033131\n", - "25% -0.032423\n", - "50% -0.031714\n", - "75% -0.031006\n", - "max -0.030298\n", - "Name: complex_cosSim, dtype: float64\n", - "count 12.000000\n", - "mean -0.063752\n", - "std 0.041979\n", - "min -0.137044\n", - "25% -0.093370\n", - "50% -0.051462\n", - "75% -0.039529\n", - "max -0.009669\n", - "Name: transe_cosSim, dtype: float64\n", - "count 0.0\n", - "mean NaN\n", - "std NaN\n", - "min NaN\n", - "25% NaN\n", - "50% NaN\n", - "75% NaN\n", - "max NaN\n", - "Name: textEmb_cosSim, dtype: float64\n", - "count 313.000000\n", - "mean -0.041530\n", - "std 0.036422\n", - "min -0.181201\n", - "25% -0.059406\n", - "50% -0.031702\n", - "75% -0.013665\n", - "max -0.000024\n", - "Name: BERT_abs_label_cosSim, dtype: float64\n", - "count 79.000000\n", - "mean -0.035752\n", - "std 0.029876\n", - "min -0.122427\n", - "25% -0.054458\n", - "50% -0.026226\n", - "75% -0.009441\n", - "max -0.000182\n", - "Name: BERT_abs_firstSent_label_cosSim, dtype: float64\n" - ] - } - ], - "source": [ - "cosSimCols = ['complex_cosSim', 'transe_cosSim', 'textEmb_cosSim', 'BERT_abs_label_cosSim', 'BERT_abs_firstSent_label_cosSim']\n", - "repelDims = {'other', 'meronymy', 'context', 'material', 'properties', 'utility'}\n", - "for col1 in cosSimCols:\n", - "# print((wikiDF_wabs1[col1] == -1).sum())\n", - " print(wikiDF_wabs1[(wikiDF_wabs1[col1] > -1) & (wikiDF_wabs1[col1] < 0) & (wikiDF_wabs1.dim.apply(lambda p: p not in repelDims))][col1].describe())" - ] - }, - { - "cell_type": "code", - "execution_count": 292, - "id": "talented-indie", - "metadata": {}, - "outputs": [], - "source": [ - "p279WordSimSeededDF_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_ChildPar_19k_WEmbAndCosSim.csv\")\n", - "p279Seeded_SiblingsDF3_wabs_text = pd.read_csv(\"../data/P279_dataset/P279_Siblings_19k_WEmbAndCosSim.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 334, - "id": "expensive-warner", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n", - "374\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 7.504525e-03\n", - "std 4.784244e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 0.000000e+00\n", - "75% 1.490116e-08\n", - "max 4.424263e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24716970867633406, pvalue=7.762158676245256e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22502397615435152, pvalue=5.730424928972872e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6034985422740525\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 1.910100e+04\n", - "mean 6.937777e-03\n", - "std 4.561719e-02\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 0.000000e+00\n", - "75% 1.490116e-08\n", - "max 4.424263e-01\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24843225530937377, pvalue=6.217152652954295e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22380720194731576, pvalue=7.083559265864719e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "374\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 1.910100e+04\n", - "mean 2.274155e-04\n", - "std 1.449770e-03\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 0.000000e+00\n", - "75% 1.490116e-08\n", - "max 1.340686e-02\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2507469034952738, pvalue=4.1314425443641745e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22557152137805614, pvalue=5.206423573456538e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 1.910100e+04\n", - "mean 2.120965e-04\n", - "std 1.386917e-03\n", - "min 0.000000e+00\n", - "25% 0.000000e+00\n", - "50% 0.000000e+00\n", - "75% 1.490116e-08\n", - "max 1.340686e-02\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.2510476149348689, pvalue=3.912200370865155e-11)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2257539655761838, pvalue=5.037446475691195e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.332525\n", - "std 0.085513\n", - "min 0.000000\n", - "25% 0.269043\n", - "50% 0.327801\n", - "75% 0.393660\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.23983260775448598, pvalue=2.752926819013835e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21456745507793118, pvalue=3.4267954366117823e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6559766763848397\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 19101.000000\n", - "mean 0.242979\n", - "std 0.150562\n", - "min 0.000000\n", - "25% 0.094960\n", - "50% 0.237342\n", - "75% 0.378069\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.244711271374783, pvalue=1.194655795369227e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22603182014110224, pvalue=4.814978154680426e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.60932944606414\n", - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.329680\n", - "std 0.085445\n", - "min 0.000000\n", - "25% 0.266447\n", - "50% 0.323794\n", - "75% 0.390543\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24010565224095312, pvalue=2.6288081698945844e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21420995798618558, pvalue=3.6387685007723226e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6530612244897959\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 19101.000000\n", - "mean 0.238297\n", - "std 0.149913\n", - "min 0.000000\n", - "25% 0.093200\n", - "50% 0.228559\n", - "75% 0.374263\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.244711271374783, pvalue=1.194655795369227e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.22445752023550897, pvalue=6.343021648612184e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6064139941690962\n", - "\n", - "\n", - "\n", - "Results for col: complex_cosSim\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2662\n", - "No. of keys in embedDict: 19101\n", - "\n", - "\n", - "Weight Case: 1\n", - "count 19101.000000\n", - "mean 0.329605\n", - "std 0.085511\n", - "min 0.000000\n", - "25% 0.266179\n", - "50% 0.323686\n", - "75% 0.390543\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.23974431943095922, pvalue=2.7955198144322416e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.21383352064488867, pvalue=3.87455333255265e-09)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6530612244897959\n", - "\n", - "\n", - "Weight Case: 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count 19101.000000\n", - "mean 0.238361\n", - "std 0.149862\n", - "min 0.000000\n", - "25% 0.093316\n", - "50% 0.228559\n", - "75% 0.374263\n", - "max 0.679789\n", - "dtype: float64\n", - "\n", - "Length of wordsim dataset: 344\n", - "No. of pairs with some value for embeddings: 343\n", - "KT Corr of old emb with Annotated Avg: KendalltauResult(correlation=0.2510699623325116, pvalue=3.899611216307421e-11)\n", - "KT Corr of new emb with Annotated Avg: KendalltauResult(correlation=0.24453059264517965, pvalue=1.2326605897936912e-10)\n", - "KT Corr of old emb with Human Avg Reversed: KendalltauResult(correlation=0.2258262577446998, pvalue=4.97723935846524e-10)\n", - "KT Corr of new emb with Human Avg Reversed: KendalltauResult(correlation=0.2245944158794736, pvalue=6.193255676859552e-10)\n", - "Classification Accuracy of old embeddings categories vs annotated averages categories: 0.6005830903790087\n", - "Classification Accuracy of new embeddings categories vs annotated averages categories: 0.6064139941690962\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":16: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(embedDict[p['word1_kg_id']]).reshape(1,-1), np.array(embedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.apply(lambda p: cosine_similarity(np.array(newEmbedDict[p['word1_kg_id']]).reshape(1,-1), np.array(newEmbedDict[p['word2_kg_id']]).reshape(1,-1))[0][0], axis=1)\n", - ":18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textOld'] = wordSim353AnnotDF_New2.textOld.apply(lambda p: 4 - 3 * p)\n", - ":19: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " wordSim353AnnotDF_New2['textNew'] = wordSim353AnnotDF_New2.textNew.apply(lambda p: 4 - 3 * p)\n" - ] - } - ], - "source": [ - "results1 = []\n", - "confusionMatrixMaster = {}\n", - "embedDictMaster = {}\n", - "newEmbedDictMaster = {}\n", - "\n", - "\n", - "embedDict = normalize(transeEmbeddings)\n", - "embedDictMaster['transe_19k'] = embedDict\n", - "\n", - "# Version 1: 0.25 for 6 dims of Wiki CS\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - " wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, -0.25)\n", - " neighDict = fetchNeighbours(wikiCSDF)\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['wikiCS_0.25_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, 'wikiCS_0.25',oldAcc, newAcc))\n", - "\n", - "# Version 2: 0.01 for 6 dims of Wiki CS\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - " wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, -0.01)\n", - " neighDict = fetchNeighbours(wikiCSDF)\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['wikiCS_0.01_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, 'wikiCS_0.01',oldAcc, newAcc))\n", - " \n", - "# Version 3: 19k Dataset\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - "# wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, 0.25)\n", - " neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text]))\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['19k_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, '19k',oldAcc, newAcc))\n", - "\n", - "# Version 4: 19k+0.25 Wiki CS Dataset\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - " wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, -0.25)\n", - " neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, wikiCSDF]))\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['19k_wikiCS_0.25_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, '19k+wikiCS_0.25',oldAcc, newAcc))\n", - "\n", - "# Version 5: 19k+0.01 Wiki CS Dataset\n", - "for col1 in ['complex_cosSim']:\n", - " print(\"\\n\\n\\nResults for col: \"+str(col1)+\"\\n\\n\")\n", - " wikiCSDF = standardizeDataset(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)], col1, -0.01)\n", - " neighDict = fetchNeighbours(pd.concat([p279WordSimSeededDF_wabs_text, p279Seeded_SiblingsDF3_wabs_text, wikiCSDF]))\n", - " print(f\"No. of keys in embedDict: {len(embedDict.keys())}\")\n", - " for weightCase in [1,2]:\n", - " print(f\"\\n\\nWeight Case: {weightCase}\")\n", - " newEmbedDict = retrofit(embedDict, neighDict, weightCase)\n", - " newEmbedDictMaster['19k_wikiCS_0.01_wt_'+str(weightCase)] = newEmbedDict\n", - " dists = determineDistances(embedDict, newEmbedDict)\n", - " print(pd.Series(dists).describe())\n", - " print()\n", - " _,confusionMatrixMaster['transe_19k_old_'+str(weightCase)], confusionMatrixMaster['transe_19k_new_'+str(weightCase)], oldAcc, newAcc = fetchCorrelationResults(embedDict, newEmbedDict)\n", - " results1.append((col1, weightCase, '19k+wikiCS_0.01',oldAcc, newAcc))" - ] - }, - { - "cell_type": "code", - "execution_count": 337, - "id": "specialized-syria", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'transe_19k_old_1': array([[ 9, 1, 10],\n", - " [ 0, 20, 83],\n", - " [ 2, 41, 177]]),\n", - " 'transe_19k_new_1': array([[ 13, 0, 7],\n", - " [ 0, 10, 93],\n", - " [ 7, 12, 201]]),\n", - " 'transe_19k_old_2': array([[ 9, 1, 10],\n", - " [ 0, 20, 83],\n", - " [ 2, 41, 177]]),\n", - " 'transe_19k_new_2': array([[ 10, 1, 9],\n", - " [ 0, 20, 83],\n", - " [ 3, 39, 178]])}" - ] - }, - "execution_count": 337, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "confusionMatrixMaster" - ] - }, - { - "cell_type": "code", - "execution_count": 303, - "id": "damaged-education", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "17187" - ] - }, - "execution_count": 303, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)])" - ] - }, - { - "cell_type": "code", - "execution_count": 306, - "id": "conservative-compact", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "280" - ] - }, - "execution_count": 306, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(wikiDF_wabs1[wikiDF_wabs1['dim'].apply(lambda p: p in repelDims)].apply(lambda p: p.node1 in embedDict and p.node2 in embedDict, axis=1)).sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "theoretical-delay", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 335, - "id": "swedish-cornwall", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CS_columnweightTargetOld AccuracyNew Accuracy
0complex_cosSim1wikiCS_0.250.6005830.603499
1complex_cosSim2wikiCS_0.250.6005830.600583
2complex_cosSim1wikiCS_0.010.6005830.600583
3complex_cosSim2wikiCS_0.010.6005830.600583
4complex_cosSim119k0.6005830.655977
5complex_cosSim219k0.6005830.609329
6complex_cosSim119k+wikiCS_0.250.6005830.653061
7complex_cosSim219k+wikiCS_0.250.6005830.606414
8complex_cosSim119k+wikiCS_0.010.6005830.653061
9complex_cosSim219k+wikiCS_0.010.6005830.606414
\n", - "
" - ], - "text/plain": [ - " CS_column weight Target Old Accuracy New Accuracy\n", - "0 complex_cosSim 1 wikiCS_0.25 0.600583 0.603499\n", - "1 complex_cosSim 2 wikiCS_0.25 0.600583 0.600583\n", - "2 complex_cosSim 1 wikiCS_0.01 0.600583 0.600583\n", - "3 complex_cosSim 2 wikiCS_0.01 0.600583 0.600583\n", - "4 complex_cosSim 1 19k 0.600583 0.655977\n", - "5 complex_cosSim 2 19k 0.600583 0.609329\n", - "6 complex_cosSim 1 19k+wikiCS_0.25 0.600583 0.653061\n", - "7 complex_cosSim 2 19k+wikiCS_0.25 0.600583 0.606414\n", - "8 complex_cosSim 1 19k+wikiCS_0.01 0.600583 0.653061\n", - "9 complex_cosSim 2 19k+wikiCS_0.01 0.600583 0.606414" - ] - }, - "execution_count": 335, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(results1, columns=['CS_column', 'weight', 'Target', 'Old Accuracy', 'New Accuracy'])" - ] - }, - { - "cell_type": "code", - "execution_count": 336, - "id": "palestinian-strategy", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Length of wordsim dataset: 344\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "fb4967f59df544e2b0cb6806d06dd1bf", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/10 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
word1_kg_idword2_kg_idWord 1Word 2Avgcategorytranse_19k_word1_oldtranse_19k_word2_oldtranse_19k_word1_newtranse_19k_word2_new...wikiCS_0.25_wt_1_new_cosSimwikiCS_0.25_wt_2_new_cosSimwikiCS_0.01_wt_1_new_cosSimwikiCS_0.01_wt_2_new_cosSim19k_wt_1_new_cosSim19k_wt_2_new_cosSim19k_wikiCS_0.25_wt_1_new_cosSim19k_wikiCS_0.25_wt_2_new_cosSim19k_wikiCS_0.01_wt_1_new_cosSim19k_wikiCS_0.01_wt_2_new_cosSim
0Q34211Q454Arafatpeace3.6U[-0.020990896052782256, -0.0948794050152691, -...[-0.056786171992006404, 0.01787462254737516, 0...[-0.020990896052782256, -0.0948794050152691, -...[-0.050833232942279184, 0.012123900440314235, ......3.7477953.7477953.7477953.7477953.4776653.6766183.4776653.6766183.4776653.676618
1Q34211Q13648784Arafatterror3.6U[-0.020990896052782256, -0.0948794050152691, -...[-0.03512899124845519, -0.06824488430804913, 0...[-0.020990896052782256, -0.0948794050152691, -...[-0.01589834711067725, -0.07306407013094582, 0......2.9550212.9550212.9550212.9550212.9521812.9470662.9521812.9470662.9521812.947066
2Q8333Q178022FBIfingerprint3.6U[0.02753406452429862, -0.14605954884804623, -0...[0.017732972826050936, -0.023766644378558594, ...[0.02753406452429862, -0.14605954884804623, -0...[-0.01674760225052191, -0.04519811208586652, 0......3.1491253.1491253.1491253.1491253.1262093.1262093.1262093.1262093.1262093.126209
3Q8333Q21004260FBIinvestigation3.0M[0.02753406452429862, -0.14605954884804623, -0...[0.052228162576186316, -0.07922249700554501, -...[0.02753406452429862, -0.14605954884804623, -0...[0.051399986151325704, -0.07859687607569352, -......3.1044213.1044213.1044213.1044212.9437503.0799272.9437503.0799272.9437503.079927
4Q13371Q49112HarvardYale2.2M[-0.015944469265519467, 0.22193716590314821, 0...[-0.01835552362856266, 0.11140088837689806, -0...[-0.015944469265519467, 0.22193716590314821, 0...[-0.01835552362856266, 0.11140088837689806, -0......2.0800222.0800222.0800222.0800222.0800222.0800222.0800222.0800222.0800222.080022
\n", - "

5 rows × 21 columns

\n", - "" - ], - "text/plain": [ - " word1_kg_id word2_kg_id Word 1 Word 2 Avg category \\\n", - "0 Q34211 Q454 Arafat peace 3.6 U \n", - "1 Q34211 Q13648784 Arafat terror 3.6 U \n", - "2 Q8333 Q178022 FBI fingerprint 3.6 U \n", - "3 Q8333 Q21004260 FBI investigation 3.0 M \n", - "4 Q13371 Q49112 Harvard Yale 2.2 M \n", - "\n", - " transe_19k_word1_old \\\n", - "0 [-0.020990896052782256, -0.0948794050152691, -... \n", - "1 [-0.020990896052782256, -0.0948794050152691, -... \n", - "2 [0.02753406452429862, -0.14605954884804623, -0... \n", - "3 [0.02753406452429862, -0.14605954884804623, -0... \n", - "4 [-0.015944469265519467, 0.22193716590314821, 0... \n", - "\n", - " transe_19k_word2_old \\\n", - "0 [-0.056786171992006404, 0.01787462254737516, 0... \n", - "1 [-0.03512899124845519, -0.06824488430804913, 0... \n", - "2 [0.017732972826050936, -0.023766644378558594, ... \n", - "3 [0.052228162576186316, -0.07922249700554501, -... \n", - "4 [-0.01835552362856266, 0.11140088837689806, -0... \n", - "\n", - " transe_19k_word1_new \\\n", - "0 [-0.020990896052782256, -0.0948794050152691, -... \n", - "1 [-0.020990896052782256, -0.0948794050152691, -... \n", - "2 [0.02753406452429862, -0.14605954884804623, -0... \n", - "3 [0.02753406452429862, -0.14605954884804623, -0... \n", - "4 [-0.015944469265519467, 0.22193716590314821, 0... \n", - "\n", - " transe_19k_word2_new ... \\\n", - "0 [-0.050833232942279184, 0.012123900440314235, ... ... \n", - "1 [-0.01589834711067725, -0.07306407013094582, 0... ... \n", - "2 [-0.01674760225052191, -0.04519811208586652, 0... ... \n", - "3 [0.051399986151325704, -0.07859687607569352, -... ... \n", - "4 [-0.01835552362856266, 0.11140088837689806, -0... ... \n", - "\n", - " wikiCS_0.25_wt_1_new_cosSim wikiCS_0.25_wt_2_new_cosSim \\\n", - "0 3.747795 3.747795 \n", - "1 2.955021 2.955021 \n", - "2 3.149125 3.149125 \n", - "3 3.104421 3.104421 \n", - "4 2.080022 2.080022 \n", - "\n", - " wikiCS_0.01_wt_1_new_cosSim wikiCS_0.01_wt_2_new_cosSim \\\n", - "0 3.747795 3.747795 \n", - "1 2.955021 2.955021 \n", - "2 3.149125 3.149125 \n", - "3 3.104421 3.104421 \n", - "4 2.080022 2.080022 \n", - "\n", - " 19k_wt_1_new_cosSim 19k_wt_2_new_cosSim 19k_wikiCS_0.25_wt_1_new_cosSim \\\n", - "0 3.477665 3.676618 3.477665 \n", - "1 2.952181 2.947066 2.952181 \n", - "2 3.126209 3.126209 3.126209 \n", - "3 2.943750 3.079927 2.943750 \n", - "4 2.080022 2.080022 2.080022 \n", - "\n", - " 19k_wikiCS_0.25_wt_2_new_cosSim 19k_wikiCS_0.01_wt_1_new_cosSim \\\n", - "0 3.676618 3.477665 \n", - "1 2.947066 2.952181 \n", - "2 3.126209 3.126209 \n", - "3 3.079927 2.943750 \n", - "4 2.080022 2.080022 \n", - "\n", - " 19k_wikiCS_0.01_wt_2_new_cosSim \n", - "0 3.676618 \n", - "1 2.947066 \n", - "2 3.126209 \n", - "3 3.079927 \n", - "4 2.080022 \n", - "\n", - "[5 rows x 21 columns]" - ] - }, - "execution_count": 321, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New_Merged_DF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 323, - "id": "associate-cleaning", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['transe_19k_old_cosSim',\n", - " 'wikiCS_0.25_wt_1_new_cosSim',\n", - " 'wikiCS_0.25_wt_2_new_cosSim',\n", - " 'wikiCS_0.01_wt_1_new_cosSim',\n", - " 'wikiCS_0.01_wt_2_new_cosSim',\n", - " '19k_wt_1_new_cosSim',\n", - " '19k_wt_2_new_cosSim',\n", - " '19k_wikiCS_0.25_wt_1_new_cosSim',\n", - " '19k_wikiCS_0.25_wt_2_new_cosSim',\n", - " '19k_wikiCS_0.01_wt_1_new_cosSim',\n", - " '19k_wikiCS_0.01_wt_2_new_cosSim']" - ] - }, - "execution_count": 323, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(filter(lambda p: 'cosSim' in p, wordSim353AnnotDF_New_Merged_DF.columns))" - ] - }, - { - "cell_type": "code", - "execution_count": 317, - "id": "tight-location", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "\n", - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 318, - "id": "scheduled-massachusetts", - "metadata": {}, - "outputs": [], - "source": [ - "def trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, colList):\n", - " X = wordSim353AnnotDF_New_Merged_DF[colList]\n", - " Y = wordSim353AnnotDF_New_Merged_DF['category']\n", - "\n", - " N_SPLITS = 10\n", - "\n", - " skf = StratifiedKFold(n_splits=N_SPLITS, random_state=19, shuffle=True)\n", - " X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - " for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])\n", - "\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))\n", - "\n", - " tempVals = []\n", - "\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " \n", - "\n", - " return acc/N_SPLITS" - ] - }, - { - "cell_type": "code", - "execution_count": 324, - "id": "starting-slovenia", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.668655462184874" - ] - }, - "execution_count": 324, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, ['transe_19k_old_cosSim'])" - ] - }, - { - "cell_type": "code", - "execution_count": 328, - "id": "looking-color", - "metadata": {}, - "outputs": [], - "source": [ - "cosSimNewCols = ['wikiCS_0.25_wt_1_new_cosSim',\n", - " 'wikiCS_0.25_wt_2_new_cosSim',\n", - " 'wikiCS_0.01_wt_1_new_cosSim',\n", - " 'wikiCS_0.01_wt_2_new_cosSim',\n", - " '19k_wt_1_new_cosSim',\n", - " '19k_wt_2_new_cosSim',\n", - " '19k_wikiCS_0.25_wt_1_new_cosSim',\n", - " '19k_wikiCS_0.25_wt_2_new_cosSim',\n", - " '19k_wikiCS_0.01_wt_1_new_cosSim',\n", - " '19k_wikiCS_0.01_wt_2_new_cosSim']\n", - "\n", - "svmResults = []\n", - "for col1 in cosSimNewCols:\n", - " svmResults.append((col1, trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, [col1])*100))\n", - "svmResults = pd.DataFrame(svmResults, columns=['target', 'Accuracy'])" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "id": "nutritional-chicken", - "metadata": {}, - "outputs": [], - "source": [ - "svmResults['Increase'] = svmResults['Accuracy'] - trainAndFindAccuracy(wordSim353AnnotDF_New_Merged_DF, ['transe_19k_old_cosSim'])*100" - ] - }, - { - "cell_type": "code", - "execution_count": 332, - "id": "charitable-journalism", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
targetAccuracyIncrease
0wikiCS_0.25_wt_1_new_cosSim66.571429-0.294118
1wikiCS_0.25_wt_2_new_cosSim66.571429-0.294118
2wikiCS_0.01_wt_1_new_cosSim66.8655460.000000
3wikiCS_0.01_wt_2_new_cosSim66.8655460.000000
419k_wt_1_new_cosSim66.571429-0.294118
519k_wt_2_new_cosSim66.571429-0.294118
619k_wikiCS_0.25_wt_1_new_cosSim66.571429-0.294118
719k_wikiCS_0.25_wt_2_new_cosSim66.8655460.000000
819k_wikiCS_0.01_wt_1_new_cosSim66.571429-0.294118
919k_wikiCS_0.01_wt_2_new_cosSim66.8655460.000000
\n", - "
" - ], - "text/plain": [ - " target Accuracy Increase\n", - "0 wikiCS_0.25_wt_1_new_cosSim 66.571429 -0.294118\n", - "1 wikiCS_0.25_wt_2_new_cosSim 66.571429 -0.294118\n", - "2 wikiCS_0.01_wt_1_new_cosSim 66.865546 0.000000\n", - "3 wikiCS_0.01_wt_2_new_cosSim 66.865546 0.000000\n", - "4 19k_wt_1_new_cosSim 66.571429 -0.294118\n", - "5 19k_wt_2_new_cosSim 66.571429 -0.294118\n", - "6 19k_wikiCS_0.25_wt_1_new_cosSim 66.571429 -0.294118\n", - "7 19k_wikiCS_0.25_wt_2_new_cosSim 66.865546 0.000000\n", - "8 19k_wikiCS_0.01_wt_1_new_cosSim 66.571429 -0.294118\n", - "9 19k_wikiCS_0.01_wt_2_new_cosSim 66.865546 0.000000" - ] - }, - "execution_count": 332, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "svmResults" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "naval-avenue", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "384px" - }, - "toc_section_display": true, - "toc_window_display": true - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Wordsim353 Annotated File Analyser.ipynb b/Wordsim353 Annotated File Analyser.ipynb deleted file mode 100644 index fa3a69a..0000000 --- a/Wordsim353 Annotated File Analyser.ipynb +++ /dev/null @@ -1,4468 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "spectacular-separate", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "medical-explanation", - "metadata": {}, - "outputs": [], - "source": [ - "cols = ['class', 'transe', 'text', 'complex', 'labEmb', 'textEmb', 'textSubsetEmb', 'absEmb', 'absFirstSentEmb']\n", - "indNames = ['class (Amandeep)', 'transe (Amandeep)', 'text (Amandeep)', 'complex (Amandeep)', 'Labels Embedding', 'Text Embedding - 7 props', 'Text Embedding - P279 + P31', 'DBPedia short abstracts', 'DBPedia short abstracts first sentence']" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "timely-history", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_Old = pd.read_csv('../data/wordsim353annotated_old.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "scenic-advisory", - "metadata": {}, - "outputs": [], - "source": [ - "wordSim353AnnotDF_New = pd.read_csv('../data/wordsim353LatestAnnot.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "assumed-lawyer", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IndWord 1Word 2DSHCNKFIAveragecomplextransetextclasslabEmbtextEmbtextSubsetEmbabsEmbabsFirstSentEmb
01admissionticket33343.253.6111544.4663244.8565290.0000006.8096724.9497385.1456014.2686333.770548
12alcoholchemistry43343.503.0216352.7438834.7931350.0585114.5548774.8182313.9870473.3992174.168040
23aluminummetal22232.256.9446184.2928946.2678413.9365717.6438156.4070515.6696316.8657824.997217
34announcementnews22232.253.2482493.7907676.1864422.0881257.1948996.1864976.1864972.9617555.296330
45announcementwarning32332.753.6121443.6038348.6384588.8862118.1378798.5566649.0984083.4081125.621890
\n", - "
" - ], - "text/plain": [ - " Ind Word 1 Word 2 DS HC NK FI Average complex transe \\\n", - "0 1 admission ticket 3 3 3 4 3.25 3.611154 4.466324 \n", - "1 2 alcohol chemistry 4 3 3 4 3.50 3.021635 2.743883 \n", - "2 3 aluminum metal 2 2 2 3 2.25 6.944618 4.292894 \n", - "3 4 announcement news 2 2 2 3 2.25 3.248249 3.790767 \n", - "4 5 announcement warning 3 2 3 3 2.75 3.612144 3.603834 \n", - "\n", - " text class labEmb textEmb textSubsetEmb absEmb \\\n", - "0 4.856529 0.000000 6.809672 4.949738 5.145601 4.268633 \n", - "1 4.793135 0.058511 4.554877 4.818231 3.987047 3.399217 \n", - "2 6.267841 3.936571 7.643815 6.407051 5.669631 6.865782 \n", - "3 6.186442 2.088125 7.194899 6.186497 6.186497 2.961755 \n", - "4 8.638458 8.886211 8.137879 8.556664 9.098408 3.408112 \n", - "\n", - " absFirstSentEmb \n", - "0 3.770548 \n", - "1 4.168040 \n", - "2 4.997217 \n", - "3 5.296330 \n", - "4 5.621890 " - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_Old.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "artificial-identity", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDWord 1Word 2H_SimH_DimF_SimF_DimN_SimN_DimD_SimD_DimP_SimP_DimAvgStdevH_origH_reversed
01admissionticket3U3U3U3u3.0U3.00.0000005.53604.4640
12alcoholchemistry3D3D3D4NaN3.0H3.20.4472144.12505.8750
23aluminummetal2I3S2I3i2.0I2.40.5477236.62503.3750
34announcementeffort4NaN4NaN4NaN4NaN4.0NaN4.00.0000002.06257.9375
45announcementnews2I2I3I2i2.0I2.20.4472147.18752.8125
\n", - "
" - ], - "text/plain": [ - " ID Word 1 Word 2 H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 1 admission ticket 3 U 3 U 3 U 3 \n", - "1 2 alcohol chemistry 3 D 3 D 3 D 4 \n", - "2 3 aluminum metal 2 I 3 S 2 I 3 \n", - "3 4 announcement effort 4 NaN 4 NaN 4 NaN 4 \n", - "4 5 announcement news 2 I 2 I 3 I 2 \n", - "\n", - " D_Dim P_Sim P_Dim Avg Stdev H_orig H_reversed \n", - "0 u 3.0 U 3.0 0.000000 5.5360 4.4640 \n", - "1 NaN 3.0 H 3.2 0.447214 4.1250 5.8750 \n", - "2 i 2.0 I 2.4 0.547723 6.6250 3.3750 \n", - "3 NaN 4.0 NaN 4.0 0.000000 2.0625 7.9375 \n", - "4 i 2.0 I 2.2 0.447214 7.1875 2.8125 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSim353AnnotDF_New.head()" - ] - }, - { - "cell_type": "markdown", - "id": "polished-establishment", - "metadata": {}, - "source": [ - "# Determine Stats" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "previous-davis", - "metadata": {}, - "outputs": [], - "source": [ - "stat1 = wordSim353AnnotDF_Old.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "alternate-watershed", - "metadata": {}, - "outputs": [], - "source": [ - "def analyseMetrics(stat1):\n", - " global cols, indNames\n", - "\n", - " statsDF = []\n", - "\n", - " for col in cols:\n", - " # Identical part\n", - " identTemp = stat1[stat1['Average'] <= 1.75][col]\n", - " iM = identTemp.mean()\n", - " iS = identTemp.std()\n", - "\n", - " unrelatedTemp = stat1[stat1['Average'] >= 3.5][col]\n", - " uM = unrelatedTemp.mean()\n", - " uS = unrelatedTemp.std()\n", - " \n", - " midTemp = stat1[(1.75 < stat1['Average']) & (stat1['Average'] < 3.5)][col]\n", - " mM = unrelatedTemp.mean()\n", - " mS = unrelatedTemp.std()\n", - "\n", - " statsDF.append([iM, mM, uM, iM - uM, iM + uM, iS, mS, uS])\n", - " statsDF = pd.DataFrame(statsDF, index = indNames, columns = ['Average - I', 'Average - M', 'Average - U', 'Average - I-U', 'Average - I+U', 'StdDev - I', 'StdDev - M', 'StdDev - U'])\n", - " return statsDF.sort_values(by=['Average - I-U'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "chemical-toronto", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Average - IAverage - MAverage - UAverage - I-UAverage - I+UStdDev - IStdDev - MStdDev - U
class (Amandeep)6.5452891.1606391.1606395.3846507.7059284.0703601.8311491.831149
DBPedia short abstracts7.3242994.1281954.1281953.19610511.4524942.3021972.1336532.133653
DBPedia short abstracts first sentence7.1359483.9516333.9516333.18431511.0875812.4046711.8788351.878835
transe (Amandeep)6.1873173.1853293.1853293.0019889.3726472.9321661.7083531.708353
complex (Amandeep)6.6788973.9219873.9219872.75691010.6008852.6934911.3297981.329798
Text Embedding - 7 props7.7899265.2542425.2542422.53568413.0441682.4615611.6625201.662520
Text Embedding - P279 + P317.7509345.3908395.3908392.36009513.1417732.3860371.6649891.664989
text (Amandeep)7.5350975.3604305.3604302.17466712.8955272.9331391.6397191.639719
Labels Embedding7.9468826.1699296.1699291.77695414.1168112.0353461.5827381.582738
\n", - "
" - ], - "text/plain": [ - " Average - I Average - M Average - U \\\n", - "class (Amandeep) 6.545289 1.160639 1.160639 \n", - "DBPedia short abstracts 7.324299 4.128195 4.128195 \n", - "DBPedia short abstracts first sentence 7.135948 3.951633 3.951633 \n", - "transe (Amandeep) 6.187317 3.185329 3.185329 \n", - "complex (Amandeep) 6.678897 3.921987 3.921987 \n", - "Text Embedding - 7 props 7.789926 5.254242 5.254242 \n", - "Text Embedding - P279 + P31 7.750934 5.390839 5.390839 \n", - "text (Amandeep) 7.535097 5.360430 5.360430 \n", - "Labels Embedding 7.946882 6.169929 6.169929 \n", - "\n", - " Average - I-U Average - I+U \\\n", - "class (Amandeep) 5.384650 7.705928 \n", - "DBPedia short abstracts 3.196105 11.452494 \n", - "DBPedia short abstracts first sentence 3.184315 11.087581 \n", - "transe (Amandeep) 3.001988 9.372647 \n", - "complex (Amandeep) 2.756910 10.600885 \n", - "Text Embedding - 7 props 2.535684 13.044168 \n", - "Text Embedding - P279 + P31 2.360095 13.141773 \n", - "text (Amandeep) 2.174667 12.895527 \n", - "Labels Embedding 1.776954 14.116811 \n", - "\n", - " StdDev - I StdDev - M StdDev - U \n", - "class (Amandeep) 4.070360 1.831149 1.831149 \n", - "DBPedia short abstracts 2.302197 2.133653 2.133653 \n", - "DBPedia short abstracts first sentence 2.404671 1.878835 1.878835 \n", - "transe (Amandeep) 2.932166 1.708353 1.708353 \n", - "complex (Amandeep) 2.693491 1.329798 1.329798 \n", - "Text Embedding - 7 props 2.461561 1.662520 1.662520 \n", - "Text Embedding - P279 + P31 2.386037 1.664989 1.664989 \n", - "text (Amandeep) 2.933139 1.639719 1.639719 \n", - "Labels Embedding 2.035346 1.582738 1.582738 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyseMetrics(stat1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "extensive-royalty", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "informative-period", - "metadata": {}, - "source": [ - "# Merge new annotations and old metrics" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "protected-growth", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimMergedDF = wordSim353AnnotDF_New.set_index(['Word 1', 'Word 2']).join(wordSim353AnnotDF_Old.set_index(['Word 1', 'Word 2']))" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "favorite-plate", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimMergedDF = wordSimMergedDF.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "challenging-comment", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDF.labEmb.isna().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "multiple-oxford", - "metadata": {}, - "outputs": [], - "source": [ - "def labelSamples(score):\n", - " return 'I' if score <= 1.75 else 'U' if score >= 3.5 else 'M'" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "dirty-behalf", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimMergedDF['category'] = wordSimMergedDF.Avg.apply(labelSamples)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "damaged-skating", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimMergedDFBkp = wordSimMergedDF.copy()" - ] - }, - { - "cell_type": "markdown", - "id": "addressed-therapy", - "metadata": {}, - "source": [ - "## Change scale of scores" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "treated-murray", - "metadata": {}, - "outputs": [], - "source": [ - "def update_scale(score):\n", - " return 4 - (score) * 3 / 10" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "numerical-mistake", - "metadata": {}, - "outputs": [], - "source": [ - "for col in cols:\n", - " wordSimMergedDF[col] = wordSimMergedDF[col].apply(update_scale)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "packed-lindsay", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...complextransetextclasslabEmbtextEmbtextSubsetEmbabsEmbabsFirstSentEmbcategory
0Arafatpeace83D4NaN3U4...3.1036682.9550212.5345303.9786572.7091352.5888762.6685042.9329193.009117U
1Arafatterror93D4NaN3U4...3.0763033.7477952.9346403.9872652.7456633.0468142.9378073.2473983.584387U
2FBIfingerprint1093D4NaN4NaN3...2.8817633.1044212.7222623.9656812.1796572.8167392.8328633.1783913.252778U
3FBIinvestigation1103U3U3U3...2.9113343.1491252.3460653.9996552.5123792.4070042.4762752.4023533.177374M
4HarvardYale1372S3S2S2...2.1350422.0800221.2263741.2716621.8700281.3015201.2681701.4879591.405575M
\n", - "

5 rows × 33 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... complex transe text class labEmb textEmb \\\n", - "0 ... 3.103668 2.955021 2.534530 3.978657 2.709135 2.588876 \n", - "1 ... 3.076303 3.747795 2.934640 3.987265 2.745663 3.046814 \n", - "2 ... 2.881763 3.104421 2.722262 3.965681 2.179657 2.816739 \n", - "3 ... 2.911334 3.149125 2.346065 3.999655 2.512379 2.407004 \n", - "4 ... 2.135042 2.080022 1.226374 1.271662 1.870028 1.301520 \n", - "\n", - " textSubsetEmb absEmb absFirstSentEmb category \n", - "0 2.668504 2.932919 3.009117 U \n", - "1 2.937807 3.247398 3.584387 U \n", - "2 2.832863 3.178391 3.252778 U \n", - "3 2.476275 2.402353 3.177374 M \n", - "4 1.268170 1.487959 1.405575 M \n", - "\n", - "[5 rows x 33 columns]" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "soviet-exploration", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 224\n", - "U 104\n", - "I 21\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDF.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "included-absolute", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Average - IAverage - MAverage - UAverage - I-UAverage - I+UStdDev - IStdDev - MStdDev - U
Labels Embedding1.6159352.1490212.149021-0.5330863.7649570.6106040.4748210.474821
text (Amandeep)1.7394712.3918712.391871-0.6524004.1313420.8799420.4919160.491916
Text Embedding - P279 + P311.6747202.3827482.382748-0.7080284.0574680.7158110.4994970.499497
Text Embedding - 7 props1.6630222.4237272.423727-0.7607054.0867500.7384680.4987560.498756
complex (Amandeep)1.9963312.8234042.823404-0.8270734.8197350.8080470.3989390.398939
transe (Amandeep)2.1438053.0444013.044401-0.9005965.1882060.8796500.5125060.512506
DBPedia short abstracts first sentence1.8592162.8145102.814510-0.9552944.6737260.7214010.5636500.563650
DBPedia short abstracts1.8027102.7615422.761542-0.9588314.5642520.6906590.6400960.640096
class (Amandeep)2.0364133.6518083.651808-1.6153955.6882221.2211080.5493450.549345
\n", - "
" - ], - "text/plain": [ - " Average - I Average - M Average - U \\\n", - "Labels Embedding 1.615935 2.149021 2.149021 \n", - "text (Amandeep) 1.739471 2.391871 2.391871 \n", - "Text Embedding - P279 + P31 1.674720 2.382748 2.382748 \n", - "Text Embedding - 7 props 1.663022 2.423727 2.423727 \n", - "complex (Amandeep) 1.996331 2.823404 2.823404 \n", - "transe (Amandeep) 2.143805 3.044401 3.044401 \n", - "DBPedia short abstracts first sentence 1.859216 2.814510 2.814510 \n", - "DBPedia short abstracts 1.802710 2.761542 2.761542 \n", - "class (Amandeep) 2.036413 3.651808 3.651808 \n", - "\n", - " Average - I-U Average - I+U \\\n", - "Labels Embedding -0.533086 3.764957 \n", - "text (Amandeep) -0.652400 4.131342 \n", - "Text Embedding - P279 + P31 -0.708028 4.057468 \n", - "Text Embedding - 7 props -0.760705 4.086750 \n", - "complex (Amandeep) -0.827073 4.819735 \n", - "transe (Amandeep) -0.900596 5.188206 \n", - "DBPedia short abstracts first sentence -0.955294 4.673726 \n", - "DBPedia short abstracts -0.958831 4.564252 \n", - "class (Amandeep) -1.615395 5.688222 \n", - "\n", - " StdDev - I StdDev - M StdDev - U \n", - "Labels Embedding 0.610604 0.474821 0.474821 \n", - "text (Amandeep) 0.879942 0.491916 0.491916 \n", - "Text Embedding - P279 + P31 0.715811 0.499497 0.499497 \n", - "Text Embedding - 7 props 0.738468 0.498756 0.498756 \n", - "complex (Amandeep) 0.808047 0.398939 0.398939 \n", - "transe (Amandeep) 0.879650 0.512506 0.512506 \n", - "DBPedia short abstracts first sentence 0.721401 0.563650 0.563650 \n", - "DBPedia short abstracts 0.690659 0.640096 0.640096 \n", - "class (Amandeep) 1.221108 0.549345 0.549345 " - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyseMetrics(wordSimMergedDF)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "iraqi-horizon", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "349" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(wordSimMergedDF)" - ] - }, - { - "cell_type": "markdown", - "id": "wanted-booking", - "metadata": {}, - "source": [ - "# Stratified Split" - ] - }, - { - "cell_type": "markdown", - "id": "sharp-sailing", - "metadata": {}, - "source": [ - "## Data Split" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "dying-rebel", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "X = wordSimMergedDF[cols]\n", - "Y = wordSimMergedDF['category']" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "raised-local", - "metadata": {}, - "outputs": [], - "source": [ - "X_train, X_test, Y_train, Y_test = train_test_split(X, Y,\n", - " stratify=Y, \n", - " test_size=0.1, \n", - " random_state=19)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "perfect-lexington", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
classtransetextcomplexlabEmbtextEmbtextSubsetEmbabsEmbabsFirstSentEmb
201.3341372.9188501.4084632.9163571.5586361.4330011.2704782.9775662.313433
1493.9598553.1371782.6629893.2568071.4055742.6410122.6410122.9948952.523780
2233.7892602.5779132.5848082.6251972.1327572.6675122.7275922.5874812.908610
1813.9976093.3791924.0000002.9572184.0000004.0000004.0000004.0000004.000000
2503.9016822.4140602.6628762.6837172.4916752.5257702.5951701.8723272.476093
\n", - "
" - ], - "text/plain": [ - " class transe text complex labEmb textEmb \\\n", - "20 1.334137 2.918850 1.408463 2.916357 1.558636 1.433001 \n", - "149 3.959855 3.137178 2.662989 3.256807 1.405574 2.641012 \n", - "223 3.789260 2.577913 2.584808 2.625197 2.132757 2.667512 \n", - "181 3.997609 3.379192 4.000000 2.957218 4.000000 4.000000 \n", - "250 3.901682 2.414060 2.662876 2.683717 2.491675 2.525770 \n", - "\n", - " textSubsetEmb absEmb absFirstSentEmb \n", - "20 1.270478 2.977566 2.313433 \n", - "149 2.641012 2.994895 2.523780 \n", - "223 2.727592 2.587481 2.908610 \n", - "181 4.000000 4.000000 4.000000 \n", - "250 2.595170 1.872327 2.476093 " - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "willing-russell", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 201\n", - "U 94\n", - "I 19\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Y_train.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "handmade-invitation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 23\n", - "U 10\n", - "I 2\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Y_test.value_counts()" - ] - }, - { - "cell_type": "markdown", - "id": "centered-library", - "metadata": {}, - "source": [ - "## SVM Training and Testing" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "stylish-beach", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "comparative-heater", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Pipeline(steps=[('standardscaler', StandardScaler()),\n", - " ('svc', SVC(gamma='auto', random_state=100))])" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "clf.fit(X_train, Y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "million-representative", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['M', 'M', 'M', 'I', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M',\n", - " 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'U', 'M',\n", - " 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'U', 'M'], dtype=object)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "preds = clf.predict(X_test)\n", - "preds" - ] - }, - { - "cell_type": "markdown", - "id": "adolescent-information", - "metadata": {}, - "source": [ - "## Results" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "intense-league", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "undefined-dream", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.6857142857142857" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "accuracy_score(preds, Y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "diverse-welding", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 23\n", - "U 10\n", - "I 2\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Y_test.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "viral-beast", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plot_confusion_matrix(clf, X_test, Y_test,\n", - " display_labels=clf.classes_,\n", - " cmap=plt.cm.Blues)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "junior-chicago", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
classtransetextcomplexlabEmbtextEmbtextSubsetEmbabsEmbabsFirstSentEmb
1612.5507223.1102143.0490623.0928372.0615452.9437503.0507292.7212142.462581
2993.8833582.7966612.1434492.8359411.8412622.1434592.1434591.8412621.841262
573.3353573.7827582.3978963.4670461.8742072.4147052.3290123.3913443.015135
1271.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
1753.4916513.1023102.7091573.0880452.3223392.7645142.6627553.3050873.157234
\n", - "
" - ], - "text/plain": [ - " class transe text complex labEmb textEmb \\\n", - "161 2.550722 3.110214 3.049062 3.092837 2.061545 2.943750 \n", - "299 3.883358 2.796661 2.143449 2.835941 1.841262 2.143459 \n", - "57 3.335357 3.782758 2.397896 3.467046 1.874207 2.414705 \n", - "127 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 \n", - "175 3.491651 3.102310 2.709157 3.088045 2.322339 2.764514 \n", - "\n", - " textSubsetEmb absEmb absFirstSentEmb \n", - "161 3.050729 2.721214 2.462581 \n", - "299 2.143459 1.841262 1.841262 \n", - "57 2.329012 3.391344 3.015135 \n", - "127 1.000000 1.000000 1.000000 \n", - "175 2.662755 3.305087 3.157234 " - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_test.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "known-bunch", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) compared to annotated category
DBPedia short abstracts62.857143
DBPedia short abstracts first sentence62.857143
Labels Embedding60.000000
complex (Amandeep)57.142857
text (Amandeep)54.285714
Text Embedding - 7 props54.285714
Text Embedding - P279 + P3154.285714
class (Amandeep)51.428571
transe (Amandeep)45.714286
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) compared to annotated category\n", - "DBPedia short abstracts 62.857143\n", - "DBPedia short abstracts first sentence 62.857143\n", - "Labels Embedding 60.000000\n", - "complex (Amandeep) 57.142857\n", - "text (Amandeep) 54.285714\n", - "Text Embedding - 7 props 54.285714\n", - "Text Embedding - P279 + P31 54.285714\n", - "class (Amandeep) 51.428571\n", - "transe (Amandeep) 45.714286" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tempVals = []\n", - "for col in cols:\n", - " tempVals.append(accuracy_score(Y_test, X_test[col].apply(labelSamples)))\n", - "(pd.DataFrame(tempVals, index = indNames, columns = ['Accuracy (in %) compared to annotated category']) * 100).sort_values(by=['Accuracy (in %) compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "international-forwarding", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) compared to annotated category
Text Embedding - 7 props68.571429
class (Amandeep)65.714286
text (Amandeep)65.714286
DBPedia short abstracts first sentence65.714286
transe (Amandeep)62.857143
complex (Amandeep)62.857143
Labels Embedding62.857143
Text Embedding - P279 + P3162.857143
DBPedia short abstracts62.857143
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) compared to annotated category\n", - "Text Embedding - 7 props 68.571429\n", - "class (Amandeep) 65.714286\n", - "text (Amandeep) 65.714286\n", - "DBPedia short abstracts first sentence 65.714286\n", - "transe (Amandeep) 62.857143\n", - "complex (Amandeep) 62.857143\n", - "Labels Embedding 62.857143\n", - "Text Embedding - P279 + P31 62.857143\n", - "DBPedia short abstracts 62.857143" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tempVals = []\n", - "for col in cols:\n", - " clf1 = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf1.fit(X_train[[col]], Y_train)\n", - " tempVals.append(accuracy_score(Y_test, clf1.predict(X_test[[col]])))\n", - "(pd.DataFrame(tempVals, index = indNames, columns = ['Accuracy (in %) compared to annotated category']) * 100).sort_values(by=['Accuracy (in %) compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "markdown", - "id": "champion-escape", - "metadata": {}, - "source": [ - "# Stratified K-fold split\n" - ] - }, - { - "cell_type": "markdown", - "id": "precious-grave", - "metadata": {}, - "source": [ - "## Data Split" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "running-illustration", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "X = wordSimMergedDF[cols]\n", - "Y = wordSimMergedDF['category']" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "devoted-healing", - "metadata": {}, - "outputs": [], - "source": [ - "skf = StratifiedKFold(n_splits=5, random_state=19, shuffle=True)\n", - "X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - "for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "controversial-passport", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
classtransetextcomplexlabEmbtextEmbtextSubsetEmbabsEmbabsFirstSentEmb
03.9786572.9550212.5345303.1036682.7091352.5888762.6685042.9329193.009117
13.9872653.7477952.9346403.0763032.7456633.0468142.9378073.2473983.584387
33.9996553.1491252.3460652.9113342.5123792.4070042.4762752.4023533.177374
41.2716622.0800221.2263742.1350421.8700281.3015201.2681701.4879591.405575
51.2827102.4960582.2300362.4082492.1012602.1635002.2105583.2927682.728319
\n", - "
" - ], - "text/plain": [ - " class transe text complex labEmb textEmb textSubsetEmb \\\n", - "0 3.978657 2.955021 2.534530 3.103668 2.709135 2.588876 2.668504 \n", - "1 3.987265 3.747795 2.934640 3.076303 2.745663 3.046814 2.937807 \n", - "3 3.999655 3.149125 2.346065 2.911334 2.512379 2.407004 2.476275 \n", - "4 1.271662 2.080022 1.226374 2.135042 1.870028 1.301520 1.268170 \n", - "5 1.282710 2.496058 2.230036 2.408249 2.101260 2.163500 2.210558 \n", - "\n", - " absEmb absFirstSentEmb \n", - "0 2.932919 3.009117 \n", - "1 3.247398 3.584387 \n", - "3 2.402353 3.177374 \n", - "4 1.487959 1.405575 \n", - "5 3.292768 2.728319 " - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train_splits[0].head()" - ] - }, - { - "cell_type": "markdown", - "id": "opponent-drain", - "metadata": {}, - "source": [ - "## SVM Training and Testing" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "finnish-language", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "democratic-jesus", - "metadata": {}, - "outputs": [], - "source": [ - "preds = []\n", - "for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))" - ] - }, - { - "cell_type": "markdown", - "id": "southwest-reviewer", - "metadata": {}, - "source": [ - "## Results" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "secret-plymouth", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.6445962732919255" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "acc = 0\n", - "for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "acc/5" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "opening-ancient", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) compared to annotated category
DBPedia short abstracts62.857143
DBPedia short abstracts first sentence62.857143
Labels Embedding60.000000
complex (Amandeep)57.142857
text (Amandeep)54.285714
Text Embedding - 7 props54.285714
Text Embedding - P279 + P3154.285714
class (Amandeep)51.428571
transe (Amandeep)45.714286
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) compared to annotated category\n", - "DBPedia short abstracts 62.857143\n", - "DBPedia short abstracts first sentence 62.857143\n", - "Labels Embedding 60.000000\n", - "complex (Amandeep) 57.142857\n", - "text (Amandeep) 54.285714\n", - "Text Embedding - 7 props 54.285714\n", - "Text Embedding - P279 + P31 54.285714\n", - "class (Amandeep) 51.428571\n", - "transe (Amandeep) 45.714286" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tempVals = []\n", - "for col in cols:\n", - " tempVals.append(accuracy_score(Y_test, X_test[col].apply(labelSamples)))\n", - "(pd.DataFrame(tempVals, index = indNames, columns = ['Accuracy (in %) compared to annotated category']) * 100).sort_values(by=['Accuracy (in %) compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "secure-barcelona", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) compared to annotated category
Text Embedding - 7 props67.337474
text (Amandeep)66.757764
complex (Amandeep)64.467909
class (Amandeep)63.896480
transe (Amandeep)63.896480
DBPedia short abstracts63.896480
Text Embedding - P279 + P3163.614907
Labels Embedding63.325052
DBPedia short abstracts first sentence61.590062
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) compared to annotated category\n", - "Text Embedding - 7 props 67.337474\n", - "text (Amandeep) 66.757764\n", - "complex (Amandeep) 64.467909\n", - "class (Amandeep) 63.896480\n", - "transe (Amandeep) 63.896480\n", - "DBPedia short abstracts 63.896480\n", - "Text Embedding - P279 + P31 63.614907\n", - "Labels Embedding 63.325052\n", - "DBPedia short abstracts first sentence 61.590062" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tempVals = []\n", - "for col in cols:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " tempVals.append(acc/5)\n", - "(pd.DataFrame(tempVals, index = indNames, columns = ['Accuracy (in %) compared to annotated category']) * 100).sort_values(by=['Accuracy (in %) compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "markdown", - "id": "passing-screen", - "metadata": {}, - "source": [ - "# Stratified 15-fold split\n" - ] - }, - { - "cell_type": "markdown", - "id": "union-execution", - "metadata": {}, - "source": [ - "## Data Split" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "everyday-lounge", - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import StratifiedKFold\n", - "X = wordSimMergedDF[cols]\n", - "Y = wordSimMergedDF['category']" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "terminal-assault", - "metadata": {}, - "outputs": [], - "source": [ - "skf = StratifiedKFold(n_splits=15, random_state=19, shuffle=True)\n", - "X_train_splits, X_test_splits, Y_train_splits, Y_test_splits = [], [], [], []\n", - "for train_index, test_index in skf.split(X, Y):\n", - " X_train_splits.append(X.iloc[train_index])\n", - " X_test_splits.append(X.iloc[test_index])\n", - " Y_train_splits.append(Y.iloc[train_index])\n", - " Y_test_splits.append(Y.iloc[test_index])" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "exotic-mount", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
classtransetextcomplexlabEmbtextEmbtextSubsetEmbabsEmbabsFirstSentEmb
03.9786572.9550212.5345303.1036682.7091352.5888762.6685042.9329193.009117
13.9872653.7477952.9346403.0763032.7456633.0468142.9378073.2473983.584387
23.9656813.1044212.7222622.8817632.1796572.8167392.8328633.1783913.252778
33.9996553.1491252.3460652.9113342.5123792.4070042.4762752.4023533.177374
41.2716622.0800221.2263742.1350421.8700281.3015201.2681701.4879591.405575
\n", - "
" - ], - "text/plain": [ - " class transe text complex labEmb textEmb textSubsetEmb \\\n", - "0 3.978657 2.955021 2.534530 3.103668 2.709135 2.588876 2.668504 \n", - "1 3.987265 3.747795 2.934640 3.076303 2.745663 3.046814 2.937807 \n", - "2 3.965681 3.104421 2.722262 2.881763 2.179657 2.816739 2.832863 \n", - "3 3.999655 3.149125 2.346065 2.911334 2.512379 2.407004 2.476275 \n", - "4 1.271662 2.080022 1.226374 2.135042 1.870028 1.301520 1.268170 \n", - "\n", - " absEmb absFirstSentEmb \n", - "0 2.932919 3.009117 \n", - "1 3.247398 3.584387 \n", - "2 3.178391 3.252778 \n", - "3 2.402353 3.177374 \n", - "4 1.487959 1.405575 " - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train_splits[0].head()" - ] - }, - { - "cell_type": "markdown", - "id": "tired-filling", - "metadata": {}, - "source": [ - "## SVM Training and Testing" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "defensive-instrument", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.svm import SVC\n", - "\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "from sklearn.metrics import plot_confusion_matrix\n", - "import matplotlib.pyplot as plt " - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "improving-montgomery", - "metadata": {}, - "outputs": [], - "source": [ - "preds = []\n", - "for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf.fit(X_train1, Y_train1)\n", - " preds.append(clf.predict(X_test1))" - ] - }, - { - "cell_type": "markdown", - "id": "complex-native", - "metadata": {}, - "source": [ - "## Results" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "experimental-camel", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.656159420289855" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "acc = 0\n", - "for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - "acc/15" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "exact-vegetable", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) compared to annotated category
DBPedia short abstracts62.857143
DBPedia short abstracts first sentence62.857143
Labels Embedding60.000000
complex (Amandeep)57.142857
text (Amandeep)54.285714
Text Embedding - 7 props54.285714
Text Embedding - P279 + P3154.285714
class (Amandeep)51.428571
transe (Amandeep)45.714286
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) compared to annotated category\n", - "DBPedia short abstracts 62.857143\n", - "DBPedia short abstracts first sentence 62.857143\n", - "Labels Embedding 60.000000\n", - "complex (Amandeep) 57.142857\n", - "text (Amandeep) 54.285714\n", - "Text Embedding - 7 props 54.285714\n", - "Text Embedding - P279 + P31 54.285714\n", - "class (Amandeep) 51.428571\n", - "transe (Amandeep) 45.714286" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tempVals = []\n", - "for col in cols:\n", - " tempVals.append(accuracy_score(Y_test, X_test[col].apply(labelSamples)))\n", - "(pd.DataFrame(tempVals, index = indNames, columns = ['Accuracy (in %) compared to annotated category']) * 100).sort_values(by=['Accuracy (in %) compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "martial-corpus", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Accuracy (in %) compared to annotated category
Text Embedding - 7 props66.473430
text (Amandeep)66.171498
transe (Amandeep)65.048309
complex (Amandeep)65.048309
Labels Embedding64.480676
Text Embedding - P279 + P3163.913043
class (Amandeep)63.623188
DBPedia short abstracts63.623188
DBPedia short abstracts first sentence61.026570
\n", - "
" - ], - "text/plain": [ - " Accuracy (in %) compared to annotated category\n", - "Text Embedding - 7 props 66.473430\n", - "text (Amandeep) 66.171498\n", - "transe (Amandeep) 65.048309\n", - "complex (Amandeep) 65.048309\n", - "Labels Embedding 64.480676\n", - "Text Embedding - P279 + P31 63.913043\n", - "class (Amandeep) 63.623188\n", - "DBPedia short abstracts 63.623188\n", - "DBPedia short abstracts first sentence 61.026570" - ] - }, - "execution_count": 88, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tempVals = []\n", - "for col in cols:\n", - " preds = []\n", - " for X_train1, Y_train1, X_test1, Y_test1 in zip(X_train_splits, Y_train_splits, X_test_splits, Y_test_splits):\n", - " clf1 = make_pipeline(StandardScaler(), SVC(gamma='auto', random_state=100))\n", - " clf1.fit(X_train1[[col]], Y_train1)\n", - " preds.append(clf1.predict(X_test1[[col]]))\n", - " acc = 0\n", - " for pred, Y_test1 in zip(preds, Y_test_splits):\n", - " acc += accuracy_score(pred, Y_test1)\n", - " tempVals.append(acc/15)\n", - "(pd.DataFrame(tempVals, index = indNames, columns = ['Accuracy (in %) compared to annotated category']) * 100).sort_values(by=['Accuracy (in %) compared to annotated category'], ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "native-delivery", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "varying-manchester", - "metadata": {}, - "source": [ - "# Determine Entropy Values" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "rolled-burton", - "metadata": {}, - "outputs": [], - "source": [ - "from scipy.stats import entropy" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "finnish-brighton", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Word 1Word 2IDH_SimH_DimF_SimF_DimN_SimN_DimD_Sim...complextransetextclasslabEmbtextEmbtextSubsetEmbabsEmbabsFirstSentEmbcategory
0Arafatpeace83D4NaN3U4...3.1036682.9550212.5345303.9786572.7091352.5888762.6685042.9329193.009117U
1Arafatterror93D4NaN3U4...3.0763033.7477952.9346403.9872652.7456633.0468142.9378073.2473983.584387U
2FBIfingerprint1093D4NaN4NaN3...2.8817633.1044212.7222623.9656812.1796572.8167392.8328633.1783913.252778U
3FBIinvestigation1103U3U3U3...2.9113343.1491252.3460653.9996552.5123792.4070042.4762752.4023533.177374M
4HarvardYale1372S3S2S2...2.1350422.0800221.2263741.2716621.8700281.3015201.2681701.4879591.405575M
\n", - "

5 rows × 33 columns

\n", - "
" - ], - "text/plain": [ - " Word 1 Word 2 ID H_Sim H_Dim F_Sim F_Dim N_Sim N_Dim D_Sim \\\n", - "0 Arafat peace 8 3 D 4 NaN 3 U 4 \n", - "1 Arafat terror 9 3 D 4 NaN 3 U 4 \n", - "2 FBI fingerprint 109 3 D 4 NaN 4 NaN 3 \n", - "3 FBI investigation 110 3 U 3 U 3 U 3 \n", - "4 Harvard Yale 137 2 S 3 S 2 S 2 \n", - "\n", - " ... complex transe text class labEmb textEmb \\\n", - "0 ... 3.103668 2.955021 2.534530 3.978657 2.709135 2.588876 \n", - "1 ... 3.076303 3.747795 2.934640 3.987265 2.745663 3.046814 \n", - "2 ... 2.881763 3.104421 2.722262 3.965681 2.179657 2.816739 \n", - "3 ... 2.911334 3.149125 2.346065 3.999655 2.512379 2.407004 \n", - "4 ... 2.135042 2.080022 1.226374 1.271662 1.870028 1.301520 \n", - "\n", - " textSubsetEmb absEmb absFirstSentEmb category \n", - "0 2.668504 2.932919 3.009117 U \n", - "1 2.937807 3.247398 3.584387 U \n", - "2 2.832863 3.178391 3.252778 U \n", - "3 2.476275 2.402353 3.177374 M \n", - "4 1.268170 1.487959 1.405575 M \n", - "\n", - "[5 rows x 33 columns]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDF.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "incorrect-scheduling", - "metadata": {}, - "outputs": [], - "source": [ - "def findEntropy(row, minDims=1):\n", - " dims = {'U': 0, 'A': 0, 'H': 0, 'I': 0, 'S': 0, 'D': 0, 'L': 0, 'X': 0}\n", - " cols = ['H_Dim', 'F_Dim', 'N_Dim', 'D_Dim', 'P_Dim']\n", - " for col in cols:\n", - " try:\n", - " if row[col] == 'O':\n", - " row[col] = 'D'\n", - " if type(row[col]) == str and len(row[col]) > 1:\n", - " row[col] = row[col][:1]\n", - " if not(pd.isna(row[col])):\n", - " dims[row[col].upper()] += 1\n", - " else:\n", - " dims['X'] += 1\n", - " except:\n", - " print(f\"Failed while processing value {row[col]}\")\n", - " dims['X'] += 1\n", - " probArr = [dims[val]/5 for val in ['U', 'A', 'H', 'I', 'S', 'D', 'L', 'X']]\n", - " \n", - " cntDims = sum([dims[val] for val in ['U', 'A', 'H', 'I', 'S', 'D', 'L']])\n", - " \n", - " assert sum(probArr) == 1\n", - " \n", - " if cntDims >= minDims:\n", - " return probArr + [cntDims, entropy(probArr, base=2)]\n", - "\n", - " else:\n", - " return [0]*5 + [cntDims, None]" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "handmade-import", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "No. of anomalies for each annotator: [1, 2, 2, 1, 1]\n" - ] - } - ], - "source": [ - "dimMapp = {'U': 0, 'A': 0, 'H': 0, 'I': 0, 'S': 0, 'D': 0, 'L': 0}\n", - "print(f\"No. of anomalies for each annotator: {[wordSimMergedDF[col].apply(lambda p: not(pd.isna(p)) and type(p) == str and p.upper() not in dimMapp).sum() for col in ['H_Dim', 'F_Dim', 'N_Dim', 'D_Dim', 'P_Dim']]}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "maritime-symbol", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Unique list of dimension values: {'A, D', 'S, H', 'D', 'P', 'S', 'A', 'H', '2', 'L', 'U', 'O', 'I', '1'}\n" - ] - } - ], - "source": [ - "t = [wordSimMergedDF[col].unique() for col in ['H_Dim', 'F_Dim', 'N_Dim', 'D_Dim', 'P_Dim']]\n", - "dimValsList = [item for sublist in t for item in sublist]\n", - "print(f\"Unique list of dimension values: {set([char1.upper() for char1 in dimValsList if type(char1) == str ])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "structural-cricket", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failed while processing value P\n", - "Failed while processing value P\n", - "Failed while processing value 1\n", - "Failed while processing value 2\n" - ] - } - ], - "source": [ - "wordSimMergedDFEntropy = pd.DataFrame(wordSimMergedDF.apply(findEntropy,axis=1).to_list(), columns = ['U', 'A', 'H', 'I', 'S', 'D', 'L', 'X', 'countDims', 'Entropy'])" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "secret-burden", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
UAHISDLXcountDimsEntropy
count349.000000349.000000349.000000349.000000349.000000349.000000286.000000286.000000286.000000286.000000
mean0.0595990.0183380.1083090.1306590.1083090.1518620.0412590.2545453.7272730.982808
std0.1601040.1077810.2097200.2731360.2552100.2243210.1464570.2850001.4249990.563678
min0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000001.0000000.000000
25%0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000003.0000000.721928
50%0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.2000004.0000000.970951
75%0.0000000.0000000.2000000.2000000.0000000.2000000.0000000.4000005.0000001.370951
max1.0000001.0000001.0000001.0000001.0000001.0000001.0000000.8000005.0000002.321928
\n", - "
" - ], - "text/plain": [ - " U A H I S D \\\n", - "count 349.000000 349.000000 349.000000 349.000000 349.000000 349.000000 \n", - "mean 0.059599 0.018338 0.108309 0.130659 0.108309 0.151862 \n", - "std 0.160104 0.107781 0.209720 0.273136 0.255210 0.224321 \n", - "min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "25% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "50% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "75% 0.000000 0.000000 0.200000 0.200000 0.000000 0.200000 \n", - "max 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 \n", - "\n", - " L X countDims Entropy \n", - "count 286.000000 286.000000 286.000000 286.000000 \n", - "mean 0.041259 0.254545 3.727273 0.982808 \n", - "std 0.146457 0.285000 1.424999 0.563678 \n", - "min 0.000000 0.000000 1.000000 0.000000 \n", - "25% 0.000000 0.000000 3.000000 0.721928 \n", - "50% 0.000000 0.200000 4.000000 0.970951 \n", - "75% 0.000000 0.400000 5.000000 1.370951 \n", - "max 1.000000 0.800000 5.000000 2.321928 " - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDFEntropy.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "failing-subscription", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
UAHISDLXcountDimsEntropy
00.20.00.00.00.00.20.00.62.01.370951
10.20.00.00.00.00.20.00.62.01.370951
20.20.00.00.00.00.20.00.62.01.370951
31.00.00.00.00.00.00.00.05.00.000000
40.00.00.00.01.00.00.00.05.00.000000
\n", - "
" - ], - "text/plain": [ - " U A H I S D L X countDims Entropy\n", - "0 0.2 0.0 0.0 0.0 0.0 0.2 0.0 0.6 2.0 1.370951\n", - "1 0.2 0.0 0.0 0.0 0.0 0.2 0.0 0.6 2.0 1.370951\n", - "2 0.2 0.0 0.0 0.0 0.0 0.2 0.0 0.6 2.0 1.370951\n", - "3 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 0.000000\n", - "4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 5.0 0.000000" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDFEntropy.head()" - ] - }, - { - "cell_type": "markdown", - "id": "active-highlight", - "metadata": {}, - "source": [ - "## Dimension counts analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "northern-shadow", - "metadata": {}, - "outputs": [], - "source": [ - "def countDimensions1(row, minDims=1):\n", - " dims = {'U': 0, 'A': 0, 'H': 0, 'I': 0, 'S': 0, 'D': 0, 'L': 0, 'X': 0}\n", - " cols = ['H_Dim', 'F_Dim', 'N_Dim', 'D_Dim', 'P_Dim']\n", - " for col in cols:\n", - " try:\n", - " if row[col] == 'O':\n", - " row[col] = 'D'\n", - " if type(row[col]) == str and len(row[col]) > 1:\n", - " row[col] = row[col][:1]\n", - " if not(pd.isna(row[col])):\n", - " dims[row[col].upper()] += 1\n", - " else:\n", - " dims['X'] += 1\n", - " except:\n", - " print(f\"Failed while processing value {row[col]}\")\n", - " dims['X'] += 1\n", - " probArr = [dims[val] for val in ['U', 'A', 'H', 'I', 'S', 'D', 'L', 'X']]\n", - " \n", - " return probArr" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "parallel-tongue", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failed while processing value P\n", - "Failed while processing value P\n", - "Failed while processing value 1\n", - "Failed while processing value 2\n" - ] - } - ], - "source": [ - "wordSimMergedDF_dimCount = pd.DataFrame(wordSimMergedDF.apply(countDimensions1,axis=1).to_list(), columns = ['U', 'A', 'H', 'I', 'S', 'D', 'L', 'X'])" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "opponent-capital", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
UAHISDLX
count349.000000349.000000349.000000349.000000349.000000349.000000349.000000349.000000
mean0.2979940.0916910.5415470.6532950.5415470.7593120.1690541.945559
std0.8005180.5389061.0486001.3656801.2760481.1216040.6674401.929777
min0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
25%0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
50%0.0000000.0000000.0000000.0000000.0000000.0000000.0000001.000000
75%0.0000000.0000001.0000001.0000000.0000001.0000000.0000004.000000
max5.0000005.0000005.0000005.0000005.0000005.0000005.0000005.000000
\n", - "
" - ], - "text/plain": [ - " U A H I S D \\\n", - "count 349.000000 349.000000 349.000000 349.000000 349.000000 349.000000 \n", - "mean 0.297994 0.091691 0.541547 0.653295 0.541547 0.759312 \n", - "std 0.800518 0.538906 1.048600 1.365680 1.276048 1.121604 \n", - "min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "25% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "50% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "75% 0.000000 0.000000 1.000000 1.000000 0.000000 1.000000 \n", - "max 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000 \n", - "\n", - " L X \n", - "count 349.000000 349.000000 \n", - "mean 0.169054 1.945559 \n", - "std 0.667440 1.929777 \n", - "min 0.000000 0.000000 \n", - "25% 0.000000 0.000000 \n", - "50% 0.000000 1.000000 \n", - "75% 0.000000 4.000000 \n", - "max 5.000000 5.000000 " - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDF_dimCount.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "portuguese-military", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "U 104\n", - "A 32\n", - "H 189\n", - "I 228\n", - "S 189\n", - "D 265\n", - "L 59\n", - "X 679\n", - "dtype: int64" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDF_dimCount.sum()" - ] - }, - { - "cell_type": "markdown", - "id": "dated-persian", - "metadata": {}, - "source": [ - "# Correlation between Entropy Values and Scores" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "weighted-climate", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy.stats as stats" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "regional-lloyd", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimMergedDFEntropy1 = wordSimMergedDFEntropy.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "concerned-width", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimMergedDF_WEntropy.set_index(['Word 1', 'Word 2']).loc[('announcement', 'effort')]" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "living-silicon", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimMergedDF_WEntropy = wordSimMergedDF.join(wordSimMergedDFEntropy1)" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "adaptive-champion", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset is being reduced from 349 to 286\n" - ] - } - ], - "source": [ - "print(f\"Dataset is being reduced from {len(wordSimMergedDF_WEntropy)} to {len(wordSimMergedDF_WEntropy[~wordSimMergedDF_WEntropy.Entropy.isna()])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "functioning-fireplace", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimMergedDF_WEntropy = wordSimMergedDF_WEntropy[~wordSimMergedDF_WEntropy.Entropy.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "twenty-series", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.22386618257947485, pvalue=0.00013458813322992746)" - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordSimMergedDF_WEntropy.Entropy, wordSimMergedDF_WEntropy.Avg)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "passive-teaching", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 224\n", - "U 51\n", - "I 11\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDF_WEntropy.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "adequate-trick", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.634273174149212, pvalue=0.03608419202831131)" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cat1 = 'I'\n", - "stats.spearmanr(wordSimMergedDF_WEntropy[wordSimMergedDF_WEntropy.category == cat1].Entropy, wordSimMergedDF_WEntropy[wordSimMergedDF_WEntropy.category == cat1].Avg)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "immediate-recruitment", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=-0.8140674774414028, pvalue=3.766571866164227e-13)" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cat1 = 'U'\n", - "stats.spearmanr(wordSimMergedDF_WEntropy[wordSimMergedDF_WEntropy.category == cat1].Entropy, wordSimMergedDF_WEntropy[wordSimMergedDF_WEntropy.category == cat1].Avg)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "romance-recipient", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4724114239021895, pvalue=7.472630212984452e-14)" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cat1 = 'M'\n", - "stats.spearmanr(wordSimMergedDF_WEntropy[wordSimMergedDF_WEntropy.category == cat1].Entropy, wordSimMergedDF_WEntropy[wordSimMergedDF_WEntropy.category == cat1].Avg)\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "third-suspect", - "metadata": {}, - "source": [ - "# Correlation between Entropy Values and Scores" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "apart-motel", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failed while processing value P\n", - "Failed while processing value P\n", - "Failed while processing value 1\n", - "Failed while processing value 2\n" - ] - } - ], - "source": [ - "wordSimMergedDFEntropy2 = pd.DataFrame(wordSimMergedDF.apply(findEntropy,axis=1, args=(3,)).to_list(), columns = ['U', 'A', 'H', 'I', 'S', 'D', 'L', 'X', 'countDims', 'Entropy'])" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "distinct-repository", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
UAHISDLXcountDimsEntropy
count349.000000349.000000349.000000349.000000349.000000349.000000219.000000219.000000219.000000219.000000
mean0.0538680.0166190.1014330.1134670.1025790.4252150.0502280.1196354.4018260.988119
std0.1585430.1064530.2093320.2711550.2544300.6176010.1643380.1583400.7916980.626279
min0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000003.0000000.000000
25%0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000004.0000000.721928
50%0.0000000.0000000.0000000.0000000.0000000.2000000.0000000.0000005.0000000.970951
75%0.0000000.0000000.2000000.0000000.0000000.6000000.0000000.2000005.0000001.521928
max1.0000001.0000001.0000001.0000001.0000002.0000001.0000000.4000005.0000002.321928
\n", - "
" - ], - "text/plain": [ - " U A H I S D \\\n", - "count 349.000000 349.000000 349.000000 349.000000 349.000000 349.000000 \n", - "mean 0.053868 0.016619 0.101433 0.113467 0.102579 0.425215 \n", - "std 0.158543 0.106453 0.209332 0.271155 0.254430 0.617601 \n", - "min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "25% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "50% 0.000000 0.000000 0.000000 0.000000 0.000000 0.200000 \n", - "75% 0.000000 0.000000 0.200000 0.000000 0.000000 0.600000 \n", - "max 1.000000 1.000000 1.000000 1.000000 1.000000 2.000000 \n", - "\n", - " L X countDims Entropy \n", - "count 219.000000 219.000000 219.000000 219.000000 \n", - "mean 0.050228 0.119635 4.401826 0.988119 \n", - "std 0.164338 0.158340 0.791698 0.626279 \n", - "min 0.000000 0.000000 3.000000 0.000000 \n", - "25% 0.000000 0.000000 4.000000 0.721928 \n", - "50% 0.000000 0.000000 5.000000 0.970951 \n", - "75% 0.000000 0.200000 5.000000 1.521928 \n", - "max 1.000000 0.400000 5.000000 2.321928 " - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDFEntropy2.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "another-kuwait", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
UAHISDLXcountDimsEntropy
00.00.00.00.00.02.0NaNNaNNaNNaN
10.00.00.00.00.02.0NaNNaNNaNNaN
20.00.00.00.00.02.0NaNNaNNaNNaN
31.00.00.00.00.00.00.00.05.00.0
40.00.00.00.01.00.00.00.05.00.0
\n", - "
" - ], - "text/plain": [ - " U A H I S D L X countDims Entropy\n", - "0 0.0 0.0 0.0 0.0 0.0 2.0 NaN NaN NaN NaN\n", - "1 0.0 0.0 0.0 0.0 0.0 2.0 NaN NaN NaN NaN\n", - "2 0.0 0.0 0.0 0.0 0.0 2.0 NaN NaN NaN NaN\n", - "3 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 0.0\n", - "4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 5.0 0.0" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDFEntropy2.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "second-valuation", - "metadata": {}, - "outputs": [], - "source": [ - "# wordSimMergedDF_WEntropy.set_index(['Word 1', 'Word 2']).loc[('announcement', 'effort')]" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "demonstrated-explanation", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimMergedDF_WEntropy2 = wordSimMergedDF.join(wordSimMergedDFEntropy2)" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "genetic-inspiration", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset is being reduced from 286 to 219\n" - ] - } - ], - "source": [ - "print(f\"Dataset is being reduced from {len(wordSimMergedDF_WEntropy)} to {len(wordSimMergedDF_WEntropy2[~wordSimMergedDF_WEntropy2.Entropy.isna()])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "seventh-syracuse", - "metadata": {}, - "outputs": [], - "source": [ - "wordSimMergedDF_WEntropy2 = wordSimMergedDF_WEntropy2[~wordSimMergedDF_WEntropy2.Entropy.isna()]" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "human-entrance", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.4630150942094212, pvalue=4.909163356811773e-13)" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "stats.spearmanr(wordSimMergedDF_WEntropy2.Entropy, wordSimMergedDF_WEntropy2.Avg)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "capable-hacker", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "M 216\n", - "I 3\n", - "Name: category, dtype: int64" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wordSimMergedDF_WEntropy2.category.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "relevant-flood", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nas/home/kshenoy/miniconda3/envs/kgtkEnv/lib/python3.8/site-packages/scipy/stats/stats.py:4264: SpearmanRConstantInputWarning: An input array is constant; the correlation coefficent is not defined.\n", - " warnings.warn(SpearmanRConstantInputWarning())\n" - ] - }, - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=nan, pvalue=nan)" - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cat1 = 'I'\n", - "stats.spearmanr(wordSimMergedDF_WEntropy2[wordSimMergedDF_WEntropy2.category == cat1].Entropy, wordSimMergedDF_WEntropy2[wordSimMergedDF_WEntropy2.category == cat1].Avg)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "partial-malawi", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=nan, pvalue=nan)" - ] - }, - "execution_count": 79, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cat1 = 'U'\n", - "stats.spearmanr(wordSimMergedDF_WEntropy2[wordSimMergedDF_WEntropy2.category == cat1].Entropy, wordSimMergedDF_WEntropy2[wordSimMergedDF_WEntropy2.category == cat1].Avg)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "beautiful-borough", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SpearmanrResult(correlation=0.48264071045505, pvalue=5.282364887488181e-14)" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cat1 = 'M'\n", - "stats.spearmanr(wordSimMergedDF_WEntropy2[wordSimMergedDF_WEntropy2.category == cat1].Entropy, wordSimMergedDF_WEntropy2[wordSimMergedDF_WEntropy2.category == cat1].Avg)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "literary-patrick", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "congressional-assumption", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kgtkEnv", - "language": "python", - "name": "kgtkenv" - }, - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/model.pt b/model.pt deleted file mode 100644 index 4cac0c2..0000000 Binary files a/model.pt and /dev/null differ diff --git a/semantic_similarity/config.json b/semantic_similarity/config.json deleted file mode 100644 index f2240ac..0000000 --- a/semantic_similarity/config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "es_url": "http://ckg07.isi.edu:9200", - "es_index": "wikidatadwd-augmented", - "qnode_to_ids_file": "", - "faiss_index_file": "" -} diff --git a/ws353simrel.tar.gz b/ws353simrel.tar.gz deleted file mode 100644 index bc72a9e..0000000 Binary files a/ws353simrel.tar.gz and /dev/null differ