959 lines (958 with data), 113.8 kB
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TODO"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" - Embedding for all the lines of the document\n",
" <!-- - Embeddings for all concepts -->\n",
" <!-- - Each concept has a list of neighboring concepts based on similarity (e.g. cosine similarity) -->\n",
" <!-- - The searched term will be embedded and compared to all concepts -->\n",
" - The searched term will be embedded and compared to all lines of the corpus (with hashing to accelerate)\n",
" <!-- - Return patients having the neighboring concepts of the searched term -->\n",
" - Return patients that have big similarity"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"path = %pwd\n",
"if path.split(os.sep)[-1] == 'notebooks':\n",
" %cd .."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# %pip install -U sentence-transformers -q"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Importing"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# ----------------------------------- tech ----------------------------------- #\n",
"import os\n",
"import glob\n",
"import pickle\n",
"\n",
"# ---------------------------- Display and friends --------------------------- #\n",
"from tqdm import tqdm\n",
"from matplotlib import pyplot as plt\n",
"\n",
"# ------------------------- Transformers and freinds ------------------------- #\n",
"from transformers import AutoTokenizer, AutoModelForSequenceClassification, AutoModel\n",
"from sentence_transformers import SentenceTransformer, util\n",
"import torch\n",
"import torch.nn.functional as F\n",
"import numpy as np\n",
"\n",
"# ------------------------ Classification and friends ------------------------ #\n",
"from scipy.cluster.hierarchy import dendrogram\n",
"from sklearn.cluster import AgglomerativeClustering, KMeans\n",
"from sklearn.manifold import TSNE\n",
"\n",
"# ----------------------------------- local ---------------------------------- #\n",
"from data_preprocessing import Get_and_process_data\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Configurations"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of the model checkpoint at logs/scibert_20_epochs_64_batch_99_train_split were not used when initializing BertModel: ['classifier.weight', 'classifier.bias']\n",
"- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
"- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
"Some weights of BertModel were not initialized from the model checkpoint at logs/scibert_20_epochs_64_batch_99_train_split and are newly initialized: ['bert.pooler.dense.weight', 'bert.pooler.dense.bias']\n",
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
]
}
],
"source": [
"lines_per_tokenization = 5\n",
"filename_split_key = \"__at__\"\n",
"# Load model from HuggingFace Hub\n",
"device = \"cuda\"\n",
"# model_checkpoint = \"sentence-transformers/multi-qa-MiniLM-L6-cos-v1\"\n",
"# model_checkpoint = \"gsarti/scibert-nli\"\n",
"model_checkpoint = \"logs/scibert_20_epochs_64_batch_99_train_split\"\n",
"tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)\n",
"model = AutoModel.from_pretrained(model_checkpoint)\n",
"data_path = \"../data/train/txt\"\n",
"embeddings_path = data_path + os.sep + \"embeddings\"\n",
"similarity = torch.nn.CosineSimilarity()\n",
"if not os.path.exists(embeddings_path):\n",
" os.makedirs(embeddings_path)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### utils"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"#Mean Pooling - Take average of all tokens\n",
"def mean_pooling(model_output, attention_mask):\n",
" token_embeddings = model_output.last_hidden_state #First element of model_output contains all token embeddings\n",
" input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()\n",
" return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)\n",
"\n",
"\n",
"#Encode text\n",
"def encode(texts, tokenizer = tokenizer, model= model):\n",
" # Tokenize sentences\n",
" encoded_input = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')\n",
"\n",
" # Compute token embeddings\n",
" with torch.no_grad():\n",
" model_output = model(**encoded_input, return_dict=True)\n",
"\n",
" # Perform pooling\n",
" embeddings = mean_pooling(model_output, encoded_input['attention_mask'])\n",
"\n",
" # Normalize embeddings\n",
" embeddings = F.normalize(embeddings, p=2, dim=1)\n",
" \n",
" return embeddings\n",
"\n",
"def find_cluster(query_emb, clustered_data, similarity=similarity):\n",
" best_cluster = None\n",
" best_score = -1\n",
" for i in clustered_data.keys():\n",
" center = clustered_data[i][\"center\"]\n",
" score = similarity(query_emb, center)\n",
" if score >= best_score:\n",
" best_cluster = i\n",
" best_score = score\n",
" return best_cluster\n",
"\n",
"def text_splitter(text, lines_per_tokenization=lines_per_tokenization):\n",
" lines = text.split(\"\\n\")\n",
" \n",
" texts = []\n",
" for i in range(len(lines)//lines_per_tokenization):\n",
" texts.append(\"\\n\".join(lines[i*lines_per_tokenization:(i+1)*lines_per_tokenization]))\n",
" \n",
" return texts\n",
"\n",
"def semantic_search_base(query_emb, doc_emb, docs):\n",
" #Compute dot score between query and all document embeddings\n",
" scores = torch.mm(query_emb, doc_emb.transpose(0, 1))[0].cpu().tolist()\n",
"\n",
" #Combine docs & scores\n",
" doc_score_pairs = list(zip(docs, scores))\n",
"\n",
" #Sort by decreasing score\n",
" doc_score_pairs = sorted(doc_score_pairs, key=lambda x: x[1], reverse=True)\n",
" print(doc_score_pairs)\n",
" #Output passages & scores\n",
" for doc, score in doc_score_pairs:\n",
" print(\"==> \",score) \n",
" print(doc)\n",
" \n",
"def forward(texts, tokenizer= tokenizer, model= model):\n",
" # Tokenize sentences\n",
" encoded_input = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')\n",
"\n",
" # Compute token embeddings\n",
" model_output = model(**encoded_input, return_dict=True)\n",
"\n",
" # Perform pooling\n",
" embeddings = mean_pooling(model_output, encoded_input['attention_mask'])\n",
"\n",
" # Normalize embeddings\n",
" embeddings = F.normalize(embeddings, p=2, dim=1)\n",
" \n",
" return embeddings\n",
"\n",
"\n",
"def forward_doc(texts, tokenizer= tokenizer, model= model, no_grad= False):\n",
" texts = text_splitter(texts) \n",
" \n",
" # Tokenize sentences\n",
" encoded_input = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')\n",
" \n",
" # Compute token embeddings\n",
" if no_grad:\n",
" with torch.no_grad():\n",
" model_output = model(**encoded_input, return_dict=True)\n",
" else :\n",
" model_output = model(**encoded_input, return_dict=True)\n",
"\n",
" # Perform pooling\n",
" embeddings = mean_pooling(model_output, encoded_input['attention_mask'])\n",
"\n",
" # NOTE: This is an easy approach\n",
" # another mean pooling over the lines of the document\n",
" # embeddings = torch.mean(embeddings_lines, 0).unsqueeze(0)\n",
" \n",
" # Normalize embeddings\n",
" embeddings = F.normalize(embeddings, p=2, dim=1)\n",
" \n",
" return embeddings\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Testing Inference from checkpoint"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"model =model.eval()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[('Around 9 Million people live in London', 0.9155025482177734), ('London is known for its financial district', 0.8950100541114807)]\n",
"==> 0.9155025482177734\n",
"Around 9 Million people live in London\n",
"==> 0.8950100541114807\n",
"London is known for its financial district\n"
]
}
],
"source": [
"# Sentences we want sentence embeddings for\n",
"query = \"How many people live in London?\"\n",
"docs = [\"Around 9 Million people live in London\", \"London is known for its financial district\"]\n",
"\n",
"#Encode query and docs\n",
"query_emb = encode(query)\n",
"doc_emb = encode(docs)\n",
"\n",
"semantic_search_base(query_emb, doc_emb, docs)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"0.915637195110321 Around 9 Million people live in London\n",
"\n",
"\n",
"0.49475765228271484 London is known for its financial district"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Testing training"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"encoded_input = tokenizer(query, padding=True, truncation=True, return_tensors='pt')\n",
"model_output = model(**encoded_input, return_dict=True)\n",
"# model_output"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([1, 9])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encoded_input[\"input_ids\"].shape"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([1, 9, 768])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_output.last_hidden_state.shape"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([1, 768])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_output.pooler_output.shape"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"q shape : torch.Size([1, 768])\n",
"a shape : torch.Size([1, 768])\n"
]
}
],
"source": [
"# model.train()\n",
"\n",
"query = \"How many people live in London?\"\n",
"answer = \"Around 9 Million people live in London\"\n",
"\n",
"loss_fn = torch.nn.MSELoss()\n",
"optimizer = torch.optim.Adam(model.parameters(), lr=1e-6)\n",
"\n",
"q = forward(query)\n",
"print(\"q shape :\", q.shape)\n",
"a = forward(answer)\n",
"print(\"a shape :\", a.shape)\n",
"\n",
"loss = loss_fn(a,q)\n",
"\n",
"optimizer.zero_grad()\n",
"# loss.backward()\n",
"# optimizer.step()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Getting data"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([14, 768])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"doc = \"\"\n",
"\n",
"with open(\"../data/train/txt/018636330_DH.txt\") as f:\n",
" doc = f.read()\n",
" \n",
"doc_emb = forward_doc(doc)\n",
"doc_emb.shape"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[('C5-6 disc herniation with cord compression and myelopathy .\\nPRINCIPAL PROCEDURE :\\nMicroscopic anterior cervical diskectomy at C5-6 and fusion .\\nHISTORY OF PRESENT ILLNESS :\\nThe patient is a 63-year-old female with a three-year history of bilateral hand numbness and occasional weakness .', 0.5795029997825623), ('Within the past year , these symptoms have progressively gotten worse , to encompass also her feet .\\nShe had a workup by her neurologist and an MRI revealed a C5-6 disc herniation with cord compression and a T2 signal change at that level .\\nPAST MEDICAL HISTORY :\\nSignificant for hypertension , hyperlipidemia .\\nMEDICATIONS ON ADMISSION :', 0.4698948562145233), ('She occasionally drinks alcohol .\\nPHYSICAL EXAMINATION :\\nShe had 5/5 strength in bilateral upper and lower extremities .\\nShe had a Hoffman 's sign greater on the right than the left and she had 10 beats of clonus in the right foot and 3-5 beats in the left foot .\\nShe had hyperreflexia in both the bilateral upper and lower extremities .', 0.35985130071640015), ('HOSPITAL COURSE :\\nThe patient tolerated a C5-6 ACDF by Dr. Miezetri Gach quite well .\\nShe had a postoperative CT scan that revealed partial decompression of the spinal canal and good placement of her hardware .\\nImmediately postop , her exam only improved slightly in her hyperreflexia .\\nShe was ambulating by postoperative day number two .', 0.2649998962879181), ('Discharge Summary\\nSigned\\nDIS\\nReport Status :\\nSigned', 0.13975289463996887), ('DISCHARGE SUMMARY\\nNAME :\\nKOTE , OA\\nUNIT NUMBER :\\n509-22-30', 0.11684238910675049), ('ADMISSION DATE :\\n06/02/2005\\nDISCHARGE DATE :\\n06/05/2005\\nPRINCIPAL DIAGNOSIS :', 0.11604052782058716), ('Electronically Signed MIEZETRI NIMIRY POP , M.D. 08/01/2005 18:50\\n_____________________________ MIEZETRI NIMIRY POP , M.D.\\nTR :\\nqg\\nDD :', 0.09493331611156464), ('Lipitor , Flexeril , hydrochlorothiazide and Norvasc .\\nALLERGIES :\\nShe has no known drug allergy .\\nSOCIAL HISTORY :\\nShe smokes one pack per day x45 years .', 0.09043849259614944), ('07/30/2005\\nTD :\\n07/31/2005 9:43 A 123524\\ncc :\\nMIEZETRI NIMIRY POP , M.D.', 0.08962328732013702), ('018636330 DH\\n5425710\\n123524\\n0144918\\n6/2/2005 12:00:00 AM', 0.08391078561544418), ('4. Lipitor , 10 mg PO daily .\\n5. Hydrochlorothiazide , 25 mg PO daily .\\n6. Norvasc , 5 mg PO daily .\\nLALIND KOTE , M.D.\\nDICTATING FOR :', 0.068220354616642), ('She tolerated a regular diet .\\nHer pain was under good control with PO pain medications and she was deemed suitable for discharge .\\nDISCHARGE ORDERS :\\nThe patient was asked to call Dr. Miezetri Gach 's office for a follow-up appointment and wound check .\\nShe is asked to call with any fevers , chills , increasing weakness or numbness or any bowel and bladder disruption .', 0.03576041758060455), ('DISCHARGE MEDICATIONS :\\nShe was discharged on the following medications .\\n1. Colace , 100 mg PO bid .\\n2. Zantac , 150 mg PO bid .\\n3. Percocet , 5/325 , 1-2 tabs PO q4-6h prn pain .', 0.029356611892580986)]\n",
"==> 0.5795029997825623\n",
"C5-6 disc herniation with cord compression and myelopathy .\n",
"PRINCIPAL PROCEDURE :\n",
"Microscopic anterior cervical diskectomy at C5-6 and fusion .\n",
"HISTORY OF PRESENT ILLNESS :\n",
"The patient is a 63-year-old female with a three-year history of bilateral hand numbness and occasional weakness .\n",
"==> 0.4698948562145233\n",
"Within the past year , these symptoms have progressively gotten worse , to encompass also her feet .\n",
"She had a workup by her neurologist and an MRI revealed a C5-6 disc herniation with cord compression and a T2 signal change at that level .\n",
"PAST MEDICAL HISTORY :\n",
"Significant for hypertension , hyperlipidemia .\n",
"MEDICATIONS ON ADMISSION :\n",
"==> 0.35985130071640015\n",
"She occasionally drinks alcohol .\n",
"PHYSICAL EXAMINATION :\n",
"She had 5/5 strength in bilateral upper and lower extremities .\n",
"She had a Hoffman 's sign greater on the right than the left and she had 10 beats of clonus in the right foot and 3-5 beats in the left foot .\n",
"She had hyperreflexia in both the bilateral upper and lower extremities .\n",
"==> 0.2649998962879181\n",
"HOSPITAL COURSE :\n",
"The patient tolerated a C5-6 ACDF by Dr. Miezetri Gach quite well .\n",
"She had a postoperative CT scan that revealed partial decompression of the spinal canal and good placement of her hardware .\n",
"Immediately postop , her exam only improved slightly in her hyperreflexia .\n",
"She was ambulating by postoperative day number two .\n",
"==> 0.13975289463996887\n",
"Discharge Summary\n",
"Signed\n",
"DIS\n",
"Report Status :\n",
"Signed\n",
"==> 0.11684238910675049\n",
"DISCHARGE SUMMARY\n",
"NAME :\n",
"KOTE , OA\n",
"UNIT NUMBER :\n",
"509-22-30\n",
"==> 0.11604052782058716\n",
"ADMISSION DATE :\n",
"06/02/2005\n",
"DISCHARGE DATE :\n",
"06/05/2005\n",
"PRINCIPAL DIAGNOSIS :\n",
"==> 0.09493331611156464\n",
"Electronically Signed MIEZETRI NIMIRY POP , M.D. 08/01/2005 18:50\n",
"_____________________________ MIEZETRI NIMIRY POP , M.D.\n",
"TR :\n",
"qg\n",
"DD :\n",
"==> 0.09043849259614944\n",
"Lipitor , Flexeril , hydrochlorothiazide and Norvasc .\n",
"ALLERGIES :\n",
"She has no known drug allergy .\n",
"SOCIAL HISTORY :\n",
"She smokes one pack per day x45 years .\n",
"==> 0.08962328732013702\n",
"07/30/2005\n",
"TD :\n",
"07/31/2005 9:43 A 123524\n",
"cc :\n",
"MIEZETRI NIMIRY POP , M.D.\n",
"==> 0.08391078561544418\n",
"018636330 DH\n",
"5425710\n",
"123524\n",
"0144918\n",
"6/2/2005 12:00:00 AM\n",
"==> 0.068220354616642\n",
"4. Lipitor , 10 mg PO daily .\n",
"5. Hydrochlorothiazide , 25 mg PO daily .\n",
"6. Norvasc , 5 mg PO daily .\n",
"LALIND KOTE , M.D.\n",
"DICTATING FOR :\n",
"==> 0.03576041758060455\n",
"She tolerated a regular diet .\n",
"Her pain was under good control with PO pain medications and she was deemed suitable for discharge .\n",
"DISCHARGE ORDERS :\n",
"The patient was asked to call Dr. Miezetri Gach 's office for a follow-up appointment and wound check .\n",
"She is asked to call with any fevers , chills , increasing weakness or numbness or any bowel and bladder disruption .\n",
"==> 0.029356611892580986\n",
"DISCHARGE MEDICATIONS :\n",
"She was discharged on the following medications .\n",
"1. Colace , 100 mg PO bid .\n",
"2. Zantac , 150 mg PO bid .\n",
"3. Percocet , 5/325 , 1-2 tabs PO q4-6h prn pain .\n"
]
}
],
"source": [
"c_emb= encode(\"bilateral hand numbness\")\n",
"semantic_search_base(c_emb, doc_emb, text_splitter(doc))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Saving embeddings"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Encoding documents: 100%|##########| 170/170 [06:48<00:00, 2.41s/it]\n"
]
}
],
"source": [
"# what are the elements in the folder ../data/train/txt/\n",
"all_docs = {}\n",
"text_files = glob.glob(data_path + os.sep + \"*.txt\")\n",
"for file in tqdm(text_files, \"Encoding documents\", ascii=True):\n",
" with open(file) as f:\n",
" doc = f.read()\n",
" file_name = os.path.basename(file).split(\".\")[0]\n",
" embeddings = forward_doc(doc, no_grad=True)\n",
" for i,emb in enumerate(embeddings):\n",
" all_docs[file_name+filename_split_key+str(i)] = emb.unsqueeze(0)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"with open(embeddings_path + os.sep + \"all_docs.pkl\", \"wb\") as f:\n",
" pickle.dump(all_docs, f)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"# with open(embeddings_path + os.sep + \"all_docs.pkl\", \"rb\") as f:\n",
"# all_docs = pickle.load(f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Classify the embeddings"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use hierachical clustering to classify the embeddings for a very search efficient task. But for simplicity, we will only perform K-means clustering."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3218, 768)"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sample_names_list = list(map(lambda x: x[0], all_docs.items()))[:]\n",
"sample_values_list = list(map(lambda x: x[1], all_docs.items()))[:]\n",
"sample = np.array(list(map(lambda x: x.numpy().reshape(-1), sample_values_list))) # array of 1 dim vectors\n",
"sample.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Test hierachical clustering"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"clustering = AgglomerativeClustering(distance_threshold=0.7, n_clusters=None).fit(sample)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def plot_dendrogram(model, **kwargs):\n",
" # Create linkage matrix and then plot the dendrogram\n",
"\n",
" # create the counts of samples under each node\n",
" counts = np.zeros(model.children_.shape[0])\n",
" n_samples = len(model.labels_)\n",
" for i, merge in enumerate(model.children_):\n",
" current_count = 0\n",
" for child_idx in merge:\n",
" if child_idx < n_samples:\n",
" current_count += 1 # leaf node\n",
" else:\n",
" current_count += counts[child_idx - n_samples]\n",
" counts[i] = current_count\n",
"\n",
" linkage_matrix = np.column_stack(\n",
" [model.children_, model.distances_, counts]\n",
" ).astype(float)\n",
"\n",
" # Plot the corresponding dendrogram\n",
" dendrogram(linkage_matrix, **kwargs)\n",
"\n",
"plt.title(\"Hierarchical Clustering Dendrogram\")\n",
"# plot the top three levels of the dendrogram\n",
"plot_dendrogram(clustering, truncate_mode=\"level\", p=5)\n",
"plt.xlabel(\"Number of points in node (or index of point if no parenthesis).\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Test K-means clustering"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"clustering = KMeans(n_clusters = 10).fit(sample)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/mus5900/anaconda3/envs/nlp/lib/python3.9/site-packages/sklearn/manifold/_t_sne.py:780: FutureWarning: The default initialization in TSNE will change from 'random' to 'pca' in 1.2.\n",
" warnings.warn(\n",
"/home/mus5900/anaconda3/envs/nlp/lib/python3.9/site-packages/sklearn/manifold/_t_sne.py:790: FutureWarning: The default learning rate in TSNE will change from 200.0 to 'auto' in 1.2.\n",
" warnings.warn(\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Scatter plot using TSNE\n",
"def plot_clutering(sample):\n",
" new_sample = TSNE(n_components=2).fit_transform(sample)\n",
" plt.scatter(new_sample[:, 0], new_sample[:, 1], c=clustering.labels_)\n",
" plt.show()\n",
" # # plot in 3D\n",
" # new_sample_3D = TSNE(n_components=3).fit_transform(sample)\n",
" # fig = plt.figure()\n",
" # ax = fig.add_subplot(111, projection='3d')\n",
" # ax.scatter(new_sample_3D[:, 0], new_sample_3D[:, 1], new_sample_3D[:, 2], c=clustering.labels_)\n",
" # plt.show()\n",
"plot_clutering(sample)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cluster 0 -> 212 element\n",
"cluster 1 -> 862 element\n",
"cluster 2 -> 123 element\n",
"cluster 3 -> 157 element\n",
"cluster 4 -> 345 element\n",
"cluster 5 -> 269 element\n",
"cluster 6 -> 142 element\n",
"cluster 7 -> 521 element\n",
"cluster 8 -> 366 element\n",
"cluster 9 -> 221 element\n"
]
}
],
"source": [
"for i in range(10):\n",
" print(\"cluster\", i , \"->\" , list(clustering.labels_).count(i), \"element\")"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"clustered_data = {}\n",
"for i,center in enumerate(clustering.cluster_centers_):\n",
" clustered_data[i] = {\"center\": torch.tensor(center.reshape(1, -1)), \"elements\": {}}\n",
"\n",
"for i, cluster in enumerate(clustering.labels_):\n",
" clustered_data[cluster][\"elements\"][sample_names_list[i]] = all_docs[sample_names_list[i]]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"with open(embeddings_path + os.sep + \"clustered_data.pkl\", \"wb\") as f:\n",
" pickle.dump(clustered_data, f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Search"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"with open(embeddings_path + os.sep + \"clustered_data.pkl\", \"rb\") as f:\n",
" clustered_data = pickle.load(f)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"center = clustered_data[0][\"center\"]"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([0.7883])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"similarity(query_emb, center)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"\n",
"class Buffer_best_k:\n",
" def __init__(self, k, initia_value=-float(\"inf\")):\n",
" self.k = k\n",
" self.values = [initia_value] * self.k\n",
" self.data = [None] * self.k\n",
" def new_val(self, value, data=None):\n",
" for i in range(self.k):\n",
" if self.values[i] < value:\n",
" self.values[i+1:] = self.values[i:-1]\n",
" self.data[i+1:] = self.data[i:-1]\n",
" self.values[i] = value\n",
" self.data[i] = data\n",
" return True\n",
" return False\n",
" def get_data(self):\n",
" return self.data\n",
" def get_values(self):\n",
" return self.values \n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[tensor([0.8351]), tensor([0.8331]), tensor([0.8309]), tensor([0.8288]), tensor([0.8287])]\n",
"['record-177__at__12', '920798564__at__13', 'record-144__at__7', 'record-66__at__13', '176318078_a__at__3']\n"
]
}
],
"source": [
"# query = \"DIGOXIN and AMIODARONE HCL\"\n",
"query = \"hello\"\n",
"query_emb = encode(query)\n",
"cluster = find_cluster(query_emb, clustered_data)\n",
"\n",
"buffer = Buffer_best_k(k=5)\n",
"\n",
"for name, doc_emb in clustered_data[cluster][\"elements\"].items():\n",
" score = similarity(query_emb, doc_emb)\n",
" # print(name, \"\\t{:.2f}\".format(float(score)))\n",
" buffer.new_val(score, name)\n",
" \n",
"print(buffer.get_values())\n",
"print(buffer.get_data())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# model_checkpoint = \"allenai/scibert_scivocab_uncased\"\n",
"# batch_size = 32\n",
"# tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)\n",
"\n",
"\n",
"# data_loader = Get_and_process_data(tokenizer, train_split=0.95, add_unlabeled=True)\n",
"# D = data_loader.get_dataset()\n",
"# label_list = data_loader.get_label_list()"
]
}
],
"metadata": {
"interpreter": {
"hash": "d650a3b94c458c273a536969f20832049d87778dafdd87df0ff4ffcada142abe"
},
"kernelspec": {
"display_name": "Python 3.9.7 64-bit ('nlp': conda)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}