Files
Meyar/notebooks/Step1_make_measure_lists.ipynb
T

479 lines
24 KiB
Plaintext
Raw Normal View History

2026-06-27 07:52:17 +03:30
{
"cells": [
{
"cell_type": "code",
"execution_count": 6,
"id": "f13c8350",
"metadata": {},
"outputs": [],
"source": [
"# thi files gets the list of measures and description as input and then generates a simple definition of the values and their opposite\n",
"# the output is a JSON file (list_of_processed_measures.json) with inputs and outputs of the model"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "fe5f6c5a",
"metadata": {},
"outputs": [],
"source": [
"MAX_NUMBER_OF_MEASURES = 128"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "212e2f85",
"metadata": {},
"outputs": [],
"source": [
"import re\n",
"import joblib\n",
"import time\n",
"import numpy as np\n",
"\n",
"\n",
"INTRO_QUARY = \"\"\"\n",
"من یک متن دارم (مثلاً بیانات، گزارش، سند راهبردی یا متن تحلیلی) که در آن به ویژگی‌ها یا رفتارهای مطلوب در یک زمینه خاص (مثلاً مدیریت، کار جهادی، اخلاق سازمانی و...) اشاره شده است.\n",
"\n",
"لطفاً:\n",
"\n",
"1. فقط بخش «معیار برای تشخیص» و «توضیحات معیار» را تولید کن.\n",
"2. بخش «معیار برای تشخیص» را ازبخش «معیار اصلی» در ورودی استفاده کن. میتوانی با برعکس کردن ورودی «معیار معکوس» آن را کامل کنی.\n",
"3. در «توضیحات معیار»، با استفاده از منابع در متن ورودی، مفاهیم به کار برده در «معیار معکوس» و «معیار اصلی» را لیست کن و به صورت مفصل، دقیق و شفاف توضیح بده.\n",
"4. زبان علمی، بی‌طرف و توصیفی باشد.\n",
"5. از کلی‌گویی یا قضاوت‌گری مستقیم (مانند: \"بسیار درست است که...\" یا \"این تنها راه موفقیت است\") پرهیز کن (مثلاً ننویس «ضعیف»، «نامطلوب»، «منفی»، «ناکارآمد» یا «اشتباه»).\n",
"از نوشتن متن اضافه بعد از لیست مفاهیم در انتهای خروجی پرهیز کن.\n",
"\n",
"متن ورودی:\n",
"\n",
"\"\"\"\n",
"\n",
"\n",
"INTRO_OPPOSITE = \"\"\"\n",
"من یک معیار دارم که ویژگی یا رفتاری مطلوب را توصیف می‌کند. می‌خواهم معادل معکوس آن را تولید کنی؛ یعنی شرایطی که در آن، تحقیق یا فعالیتی با این معیار هم‌خوانی ندارد. \n",
"\n",
"لطفاً:\n",
"\n",
"1. فقط بخش «معیار برای تشخیص» و «توضیحات معیار» را تولید کن.\n",
"2. بخش «معیار برای تشخیص» را ازبخش «معیار معکوس» در ورودی استفاده کن. میتوانی با برعکس کردن ورودی «معیار اصلی» آن را کامل کنی.\n",
"3. در «توضیحات معیار»، با استفاده از منابع در متن ورودی، مفاهیم به کار برده در «معیار معکوس» و «معیار اصلی» را لیست کن و به صورت دقیق و شفاف توضیح بده.\n",
"4. زبان علمی، بی‌طرف و توصیفی باشد.\n",
"5. از کلی‌گویی یا قضاوت‌گری مستقیم (مانند: \"بسیار درست است که...\" یا \"این تنها راه موفقیت است\") پرهیز کن (مثلاً ننویس «ضعیف»، «نامطلوب»، «منفی»، «ناکارآمد» یا «اشتباه»).\n",
"از نوشتن متن اضافه بعد از لیست مفاهیم در انتهای خروجی پرهیز کن.\n",
"\n",
"متن ورودی:\n",
"\n",
"\"\"\"\n",
"\n",
"\n",
"QUESTION_ORIGINAL = \"\"\"\n",
"لطفاً فقط ویژگی‌ها و رفتارهایی را استخراج کن که متناسب با نوع مطلوب باشند، به‌گونه‌ای که بتوان از آن‌ها به عنوان ابزار تحلیل کیفی در بررسی متون یا عملکردها استفاده کرد.\n",
"\n",
"1. فقط بخش «معیار برای تشخیص» و «توضیحات معیار» را تولید کن.\n",
"2. بخش «معیار برای تشخیص» را ازبخش «معیار اصلی» در ورودی استفاده کن. میتوانی با برعکس کردن ورودی «معیار معکوس» آن را کامل کنی.\n",
"3. برای «توضیحات معیار»، با استفاده از منابع و مفاهیم آمده در متن ورودی، مفاهیم به کار برده در «معیار برای تشخیص» را به صورت دقیق و شفاف توضیح بده تا امکان سنجش هر متنی با معیار به طور دقیق فراهم شود.\n",
"4. زبان علمی، بی‌طرف و توصیفی باشد.\n",
"5. از کلی‌گویی یا قضاوت‌گری مستقیم (مانند: \"بسیار درست است که...\" یا \"این تنها راه موفقیت است\") پرهیز کن (مثلاً ننویس «ضعیف»، «نامطلوب»، «منفی»، «ناکارآمد» یا «اشتباه»).\n",
"از نوشتن متن اضافه بعد از لیست مفاهیم در انتهای خروجی پرهیز کن.\n",
"\"\"\"\n",
"\n",
"QUESTION_OPPOSITE = \"\"\"\n",
"لطفاً فقط ویژگی‌ها و رفتارهایی را استخراج کن که متناسب با نوع معکوس باشند، به‌گونه‌ای که بتوان از آن‌ها به عنوان ابزار تحلیل کیفی در بررسی متون یا عملکردها استفاده کرد.\n",
"\n",
"1. فقط بخش «معیار برای تشخیص» و «توضیحات معیار» را تولید کن.\n",
"2. بخش «معیار برای تشخیص» را ازبخش «معیار معکوس» در ورودی استفاده کن. میتوانی با برعکس کردن ورودی «معیار اصلی» آن را کامل کنی.\n",
"3. برای «توضیحات معیار»، با استفاده از منابع و مفاهیم آمده در متن ورودی، مفاهیم به کار برده در «معیار برای تشخیص» را به صورت دقیق و شفاف توضیح بده تا امکان سنجش هر متنی با معیار به طور دقیق فراهم شود.\n",
"4. زبان علمی، بی‌طرف و توصیفی باشد.\n",
"5. از کلی‌گویی یا قضاوت‌گری مستقیم (مانند: \"بسیار درست است که...\" یا \"این تنها راه موفقیت است\") پرهیز کن (مثلاً ننویس «ضعیف»، «نامطلوب»، «منفی»، «ناکارآمد» یا «اشتباه»).\n",
"از نوشتن متن اضافه بعد از لیست مفاهیم در انتهای خروجی پرهیز کن.\n",
"\"\"\"\n",
"\n",
"\n",
"PERSONALITY = \"\"\"\n",
"شما یک تحلیلگر بی‌طرف با تخصص در ارزیابی کیفی و ارزشی فعالیت‌های اجتماعی، فرهنگی و سازمانی هستید. وظیفه شما استخراج و بازنویسی معیارهای رفتاری و ارزشی از متن‌های مفهومی یا توصیفی است، به‌گونه‌ای که معیارها قابل استفاده برای ارزیابی و تحلیل پژوهش‌ها، متون یا عملکردها باشند.\n",
"\n",
"در بازنویسی معیارها:\n",
"- اگر هدف **استخراج معیار اصلی** است، تمرکز شما بر ویژگی‌های مثبت، اخلاق‌محور، علمی، کارآمد و انسان‌دوستانه خواهد بود.\n",
"- اگر هدف **استخراج معیار معکوس** است، تمرکز شما بر ویژگی‌هایی است که در تعارض با معیارهای اصلی هستند؛ با این حال باید از زبان منفی یا قضاوت‌گر خودداری کرده و تنها توصیفی علمی و بی‌طرف ارائه دهید.\n",
"\"\"\"\n",
"\n",
"\n",
"\n",
"def get_two_measures(output):\n",
" # If the output contains a code block, extract the list using regex\n",
" import re\n",
"\n",
" # Get only the code block (text between ```python and ```)\n",
" match = re.search(r\"```python\\n(.*?)```\", output, re.DOTALL)\n",
" if match:\n",
" code = match.group(1)\n",
" exec_globals = {}\n",
" try:\n",
" exec(code, exec_globals) # Be cautious with exec; only use with trusted content\n",
" return [exec_globals[\"main_measure\"], exec_globals[\"opposite_measure\"]]\n",
" except: \n",
" print(\"No variables found.\")\n",
" print(code)\n",
" return ['', '']\n",
"\n",
" else:\n",
" print(\"No code block or questions found.\")\n",
" print(match)\n",
" \n",
" #print(code)\n",
" #print(output)\n",
" return ['', '']\n",
"\n",
"from LLMInterface import LLMInterface\n",
"class MeasureSplitter(LLMInterface):\n",
" def __init__(self, measures_file, positive_measures_file, personality=PERSONALITY, number_of_jobs=64):\n",
" super().__init__(personality=personality)\n",
" self.number_of_jobs = number_of_jobs\n",
"\n",
" self.list_of_measures = np.load(measures_file)\n",
" self.list_of_measures = self.list_of_measures[:MAX_NUMBER_OF_MEASURES]\n",
" self.list_of_positive_measures = np.load(positive_measures_file)\n",
" self.list_of_positive_measures = self.list_of_positive_measures[:MAX_NUMBER_OF_MEASURES]\n",
" \n",
" \n",
" def convert_to_message(self, measure, intro_text=INTRO_QUARY, question=QUESTION_ORIGINAL):\n",
" return intro_text +'\\n'+ measure +'\\n'+ question\n",
"\n",
" def get_ind_analysis(self, i):\n",
" print(i)\n",
" query_original = self.convert_to_message(self.list_of_positive_measures[i], INTRO_QUARY, QUESTION_ORIGINAL)\n",
" output_original = self.get_reponse(query_original)\n",
" query_opposite = self.convert_to_message(output_original + '\\n' + self.list_of_measures[i], INTRO_OPPOSITE, QUESTION_OPPOSITE)\n",
" output_opposite = self.get_reponse(query_opposite)\n",
" return {'measure': self.list_of_measures[i], 'query_original': query_original,\n",
" 'output_original': output_original, 'query_opposite': query_opposite,\n",
" 'output_opposite': output_opposite}\n",
"\n",
" def get_text_analysis(self):\n",
" with joblib.parallel_backend(\"threading\"):\n",
" output_analysis = [joblib.Parallel(n_jobs=self.number_of_jobs)(joblib.delayed(self.get_ind_analysis)(i) for i in range(len(self.list_of_measures)))]\n",
" return output_analysis"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "42aa05cd",
"metadata": {},
"outputs": [],
"source": [
"ms = MeasureSplitter(measures_file='Step0_output_list_of_measures.npy',\n",
" positive_measures_file='Step0_output_list_of_positive-only_measures.npy')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "a7c18498",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"01\n",
"\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n",
"10\n",
"11\n",
"12\n",
"13\n",
"14\n",
"15\n",
"16\n",
"17\n",
"18\n",
"19\n",
"20\n",
"21\n",
"22\n",
"23\n",
"24\n",
"25\n",
"26\n",
"27\n",
"28\n",
"29\n",
"30\n",
"31\n",
"32\n",
"33\n",
"34\n",
"35\n",
"36\n",
"37\n",
"38\n",
"39\n",
"40\n",
"41\n",
"42\n",
"43\n",
"44\n",
"45\n",
"46\n",
"47\n",
"48\n",
"49\n",
"50\n",
"51\n",
"52\n",
"53\n",
"54\n",
"55\n",
"56\n",
"57\n",
"58\n",
"59\n",
"60\n",
"61\n",
"62\n",
"63\n",
"64\n",
"65\n",
"66\n",
"67\n",
"68\n",
"69\n",
"70\n",
"71\n",
"72\n",
"73\n",
"74\n",
"75\n",
"76\n",
"77\n",
"78\n",
"79\n",
"80\n",
"81\n",
"82\n",
"83\n",
"84\n",
"85\n",
"86\n",
"87\n",
"88\n",
"89\n",
"90\n",
"91\n",
"92\n",
"93\n",
"94\n",
"95\n",
"96\n",
"97\n",
"98\n",
"99\n",
"100\n",
"101\n",
"102\n",
"103\n",
"104\n",
"105\n",
"106\n",
"107\n",
"108\n",
"109\n",
"110\n",
"111\n",
"112\n",
"113\n",
"114\n",
"115\n",
"116\n",
"117\n",
"118\n",
"119\n",
"120\n",
"121\n",
"122\n",
"123\n",
"124\n",
"125\n",
"126\n",
"127\n"
]
}
],
"source": [
"res = ms.get_text_analysis()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "712d6a97",
"metadata": {},
"outputs": [],
"source": [
"# write all the measures in the output\n",
"\n",
"import json\n",
"with open('Step1_output_list_of_all_processed_measures.json', 'w', encoding=\"utf8\") as f:\n",
" json.dump(res[0], f, ensure_ascii=False)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "25625601",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"**معیار برای تشخیص:** ارائه یک «تصویر مطلوب» برای رشد هماهنگ دانش\n",
"\n",
"**توضیحات معیار:** \n",
"رشد هماهنگ دانش به معنای توجه به ابعاد مختلف معرفت و علوم، به‌ویژه در زمینه‌هایی همچون علوم انسانی و تجربی، و تلاش برای تولید و ابداع نظریه‌های جدید است. در این راستا، مفاهیمی همچون شجاعت علمی، اعتماد به نفس شخصی و ملی، و همچنین نوآوری و ابتکار از اهمیت بالایی برخوردارند. \n",
"\n",
"این حوزه‌ها باید به روشی انسانی و معنوی پیگیری شوند که از تعارض با اصول اخلاقی و انسانی پرهیز کند. در نهایت، تلاش در راستای پیشرفت باید مبتنی بر استقلال فرهنگی و نظارت بر استفاده از ابزارهای نوین باشد تا از نفوذ ایده‌ها و تفکرات غیرسازنده جلوگیری شود. \n",
"\n",
"علاوه بر این، ارزش‌های اخلاقی و معنوی باید در تمامی عرصه‌های علمی و اجتماعی مد نظر قرار گیرند تا از بروز خشونت، فساد و بی‌عدالتی جلوگیری شود. استقلال در انتخاب سبک زندگی و ارائه الگوهای علمی بر اساس ارزش‌های اسلامی و ملی نیز از دیگر ابعاد مهم در این مسیر به شمار می‌آید.\n"
]
}
],
"source": [
"print(res[0][6]['output_original'])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "49951a2f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"**معیار برای تشخیص:** رؤیاهای مدرنیته، تصویر تحرک آفرین جامعه و عامل شیفتگی به الگوها و اسوه‌های بیگانه\n",
"\n",
"**توضیحات معیار:** \n",
"رؤیاهای مدرنیته به معنای نگریستن به پیشرفت‌های تکنولوژیکی و فرهنگی از منظر مادی و دور از ارزش‌های معنوی و انسانی است. این دیدگاه می‌تواند به تحرک آفرینی جامعه منجر شود، اما در عوض احتمال ترویج نگاهی یک‌جانبه و مادی‌گرایانه را نیز به دنبال دارد. این نگرش ممکن است منجر به شیفتگی به الگوها و اسوه‌هایی از فرهنگ‌های بیگانه شود که ارزشی از فرهنگ بومی و ملی را نادیده می‌گیرد.\n",
"\n",
"رشد بی‌هدف در شاخص‌های زندگی به دنبال پذیرش صرف معیارهای کمّی و ظاهری به جای معیارهای کیفی و ارزشی در زندگی فردی و اجتماعی است. این نوع رشد ممکن است تضمین‌کننده پیشرفت در برخی زمینه‌ها باشد، اما بسترهای فرهنگی و اخلاقی را که لازمه تعالی واقعی جامعه است، نادیده می‌گیرد. \n",
"\n",
"مفاهیمی همچون تسلط مادی، نگاه سودجو، نداشتن نگاه معنوی و معیارهای مبتنی بر عقل و اخلاق می‌توانند به بررسی این معیار کمک کنند. به ویژه، اشاره به خطرات مادی‌گرایی و دوری از معنویت در راستای تشخیص این معیار کمک‌رسان خواهد بود.\n"
]
}
],
"source": [
"print(res[0][6]['output_opposite'])"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "a599b017",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"### معیار برای تشخیص\n",
"• سازماندهی جهادی بر اساس: کار برای خدا، اخلاص، تلاش خستگی‌ناپذیر، عالمانه، باتدبیر، کارآمد.\n",
"\n",
"### توضیحات معیار\n",
"1. **کار برای خدا**: این مفهوم به معنای انجام کارها با نیت خالص و برای رضایت الهی است. فرد باید انگیزه‌های شخصی را کنار گذاشته و به خدمت به جامعه و افراد نیازمند تمرکز کند.\n",
" \n",
"2. **اخلاص**: اخلاص به این اشاره دارد که فرد باید در فعالیت‌های خود صداقت و خلوص نیت داشته باشد. این ویژگی به معنای نداشتن انگیزه‌های مادی و شخصی و همچنین تمرکز بر اهداف انسانی و اجتماعی است.\n",
"\n",
"3. **تلاش خستگی‌ناپذیر**: این ویژگی نشان‌دهنده تداوم و پایمردی در انجام فعالیت‌ها است. فرد باید توانایی ایجاد انگیزه و تلاش مستمر را داشته باشد تا در برابر چالش‌ها ایستادگی کند.\n",
"\n",
"4. **عالمانه**: این جنبه به استفاده از دانش و اطلاعات علمی در انجام کارها اشاره دارد. به معنای تفکر منطقی، تحلیلی و مبتنی بر شواهد در فرآیند تصمیم‌گیری و برنامه‌ریزی است.\n",
"\n",
"5. **باتدبیر**: این ویژگی شامل برنامه‌ریزی دقیق، مدیریت منابع و اتخاذ تصمیمات هوشمندانه است. فرد باید قادر باشد تا برای رسیدن به اهداف، از منابع به شیوه‌ای مؤثر استفاده کند.\n",
"\n",
"6. **کارآمد**: کارآمدی به معنای دستیابی به نتایج مناسب با استفاده بهینه از زمان و منابع است. فرد و یا سازمان باید بتوانند اهداف خود را با حداقل اتلاف منابع و زمان محقق کنند.\n",
"\n",
"این معیارها به ارزیابی و تحلیل فعالیت‌ها و عملکردها کمک می‌کنند و امکان سنجش آن‌ها بر اساس اصول اخلاقی و انسانی را فراهم می‌آورند.\n"
]
}
],
"source": [
"print(res[0][1]['output_original'])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "da82832f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"### معیار برای تشخیص\n",
"• انگیزه حضور فرد در سازمان، سلطه بر دیگران یا حرص و طمع است. انگیزه حضور فرد در سازمان، خودشیفتگی، اشرافیگری، لذت‌جویی، فکر جمع‌آوری زخارف دنیا. • عدم سازماندهی نیروهای مردمی و جهادی ترجیح دیوان‌سالاری فرسوده بر مدیریت جهادی • وابسته کردن نیروهای جهادی به برنامه و حمایت بنیاد\n",
"\n",
"### توضیحات معیار\n",
"1. **سلطه بر دیگران**: این مفهوم به معنای تلاش برای به دست آوردن کنترل یا برتری بر دیگران با هدف دریافت منافع شخصی است. در فعالیت‌های اجتماعی و جهادی، این ویژگی با روحیه همکاری و جمع‌گرایی در تضاد است.\n",
"\n",
"2. **حرص و طمع**: انگیزه‌های مادی و تلاش برای کسب ثروت یا موقعیت برتر می‌تواند بر تصمیم‌گیری‌ها تأثیر منفی بگذارد و اهداف انسانی و اجتماعی را دچار انحراف کند. \n",
"\n",
"3. **خودشیفتگی**: در این شرایط، فرد به جای تمرکز بر نیازهای دیگران، بر خود و خواسته‌های شخصی‌اش تمرکز دارد. این ویژگی معمولاً با کمبود همدلی و توجه به دیگران همراه است.\n",
"\n",
"4. **اشرافیگری**: به معنای تمایل به زندگی در لوکس و تجملاتی است که ممکن است با رشد فردی و خدمات اجتماعی در تضاد باشد. \n",
"\n",
"5. **لذت‌جویی**: این ویژگی به گرایش به جستجوی لذت‌های فوری و موقتی اشاره دارد که می‌تواند منجر به غفلت از مسئولیت‌های اجتماعی و انسانی شود.\n",
"\n",
"6. **عدم سازماندهی نیروهای مردمی و جهادی**: این مفهوم نشان‌دهنده فقدان ساختار و هماهنگی در فعالیت‌های اجتماعی است که می‌تواند منجر به ناکامی در تحقق اهداف جمعی گردد.\n",
"\n",
"7. **وابسته کردن نیروهای جهادی به برنامه و حمایت بنیاد**: این ویژگی به معنای ایجاد وابستگی به منابع و حمایت‌های بیرونی است که می‌تواند استقلال و خودکفایی نیروهای جهادی را تحت‌الشعاع قرار دهد.\n"
]
}
],
"source": [
"print(res[0][1]['output_opposite'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2039a0cd-9857-4ddd-8290-a0d689c389e6",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.12.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}