Add prerequisite relations experiment notebook#3
Conversation
📝 WalkthroughWalkthroughДобавлены три новых файла в каталог Изменения
Диаграммы последовательностиsequenceDiagram
participant User as Пользователь
participant ACE as run_ace()
participant Prepare as prepare_embeddings()
participant Rank as build_ranked_pairs()
participant Scorer as CSR/CER Scorer
participant Expert as ask_expert()
participant Graph as Graph Builder\n(Transitive Reduce)
User->>ACE: Запуск с topic_to_text и параметрами
ACE->>Prepare: Подготовить модель и эмбеддинги
Prepare->>Scorer: Кодировать концепты и фрагменты
Prepare-->>ACE: Возвращает эмбеддинги
ACE->>Rank: Построить и отсортировать пары (PRS)
Rank->>Scorer: Вычислить направленные оценки CSR/CER
Rank-->>ACE: Возвращает отсортированные пары
loop Для каждой пары (по рангу, до top_t_percent)
ACE->>Graph: Проверить существующий путь между узлами
alt Путь существует
Graph-->>ACE: Пропустить пару
else Нет пути
ACE->>Expert: Запросить направление ребра
Expert->>User: Показать предложение для решения
User-->>Expert: Выбор (A→B / B→A / Stop)
Expert-->>ACE: Возвращает решение
alt Добавить ребро
ACE->>Graph: Добавить ребро
Graph->>Graph: Применить транситивную редукцию
Graph-->>ACE: Обновлённый граф
else Остановка
ACE-->>User: Завершить процесс
end
end
end
Оценка трудоемкости проверки кода🎯 4 (Сложная) | ⏱️ ~45 минут 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@experiments/prerequisite_relations_experiment.ipynb`:
- Around line 155-163: В функции build_ranked_pairs валидируй аргумент mode
(ожидается, например, "csr" или "cer") и готовь эмбеддинги только когда mode ==
"csr": вместо всегда вызывать prepare_embeddings(topic_to_text, ...) сначала
проверить mode, бросить понятную ошибку (ValueError/TypeError) при неизвестном
значении и только в ветке "csr" вызывать prepare_embeddings; для других
поддерживаемых режимов реализовать соответствующую логику без ненужного вызова
prepare_embeddings; проверь и аналогично исправь поведение в связанных местах
(см. участки вокруг build_ranked_pairs — строки 173-194 в diff).
- Around line 8-24: В ноутбуке захвачен stdout/stderr с локальным абсолютным
путём (см. поле "outputs" -> объект с "name": "stderr" и текст с путём к
C:\\Users\\...), удалите этот вывод из коммита: откройте cell outputs в
experiments/prerequisite_relations_experiment.ipynb и очистите все outputs
(включая блоки с "BertModel LOAD REPORT" и предупреждением huggingface_hub),
затем пересохраните ноутбук без выводов или примените nbstripout/`jupyter
nbconvert --clear-output` перед коммитом, чтобы убрать локальные пути и
приватные данные.
- Around line 503-505: Replace hardcoded Windows paths with cross-platform Path
objects: import pathlib.Path, compute a notebook-root base (e.g. base =
Path(__file__).parent if '__file__' in globals() else Path.cwd()) and set
csv_file = base / "EKG-Dataset-main" / "0-100.csv" and descriptions_dir = base /
"EKG-Dataset-main" / "concept_descriptions" (use str(...) where APIs expect
strings); apply the same change to the other two cells that set CSV file paths
so all uses of csv_file and descriptions_dir are platform-independent.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: bff4fa4f-204d-41ac-89ae-7f5b8ce23929
📒 Files selected for processing (2)
experiments/.gitkeepexperiments/prerequisite_relations_experiment.ipynb
| "outputs": [ | ||
| { | ||
| "name": "stderr", | ||
| "output_type": "stream", | ||
| "text": [ | ||
| "C:\\Users\\timofey\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\huggingface_hub\\file_download.py:129: UserWarning: `huggingface_hub` cache-system uses symlinks by default to efficiently store duplicated files but your machine does not support them in C:\\Users\\timofey\\.cache\\huggingface\\hub\\models--sentence-transformers--all-MiniLM-L6-v2. Caching files will still work but in a degraded version that might require more space on your disk. This warning can be disabled by setting the `HF_HUB_DISABLE_SYMLINKS_WARNING` environment variable. For more details, see https://huggingface.co/docs/huggingface_hub/how-to-cache#limitations.\n", | ||
| "To support symlinks on Windows, you either need to activate Developer Mode or to run Python as an administrator. In order to activate developer mode, see this article: https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development\n", | ||
| " warnings.warn(message)\n", | ||
| "Loading weights: 100%|██████████| 103/103 [00:00<00:00, 4248.84it/s]\n", | ||
| "\u001b[1mBertModel LOAD REPORT\u001b[0m from: sentence-transformers/all-MiniLM-L6-v2\n", | ||
| "Key | Status | | \n", | ||
| "------------------------+------------+--+-\n", | ||
| "embeddings.position_ids | UNEXPECTED | | \n", | ||
| "\n", | ||
| "\u001b[3mNotes:\n", | ||
| "- UNEXPECTED\u001b[3m\t:can be ignored when loading from different task/architecture; not ok if you expect identical arch.\u001b[0m\n" | ||
| ] |
There was a problem hiding this comment.
Уберите из ноутбука закоммиченный stderr с локальным путём пользователя.
В output попал абсолютный путь из домашнего каталога Windows. Это светит локальное имя пользователя и делает diff привязанным к вашей машине; такие outputs лучше очищать перед коммитом.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@experiments/prerequisite_relations_experiment.ipynb` around lines 8 - 24, В
ноутбуке захвачен stdout/stderr с локальным абсолютным путём (см. поле "outputs"
-> объект с "name": "stderr" и текст с путём к C:\\Users\\...), удалите этот
вывод из коммита: откройте cell outputs в
experiments/prerequisite_relations_experiment.ipynb и очистите все outputs
(включая блоки с "BertModel LOAD REPORT" и предупреждением huggingface_hub),
затем пересохраните ноутбук без выводов или примените nbstripout/`jupyter
nbconvert --clear-output` перед коммитом, чтобы убрать локальные пути и
приватные данные.
| "def build_ranked_pairs(\n", | ||
| " topic_to_text: dict[str, str],\n", | ||
| " mode: str = \"csr\",\n", | ||
| " model: SentenceTransformer = DEFAULT_MODEL,\n", | ||
| " n: int = 10,\n", | ||
| " step: int = 10,\n", | ||
| "):\n", | ||
| " topics = list(topic_to_text.keys())\n", | ||
| " topic_embs, topic_chunk_embs = prepare_embeddings(topic_to_text, model=model, n=n, step=step)\n", |
There was a problem hiding this comment.
build_ranked_pairs() стоит валидировать mode и готовить эмбеддинги только для csr.
Сейчас prepare_embeddings() вызывается всегда, а ветка else подхватывает любой неизвестный режим. В итоге mode="cer" без надобности считает эмбеддинги, а опечатка в параметре молча меняет алгоритм.
💡 Вариант правки
def build_ranked_pairs(
topic_to_text: dict[str, str],
mode: str = "csr",
model: SentenceTransformer = DEFAULT_MODEL,
n: int = 10,
step: int = 10,
):
+ if mode not in {"csr", "cer"}:
+ raise ValueError(f"Unsupported mode: {mode}")
+
topics = list(topic_to_text.keys())
- topic_embs, topic_chunk_embs = prepare_embeddings(topic_to_text, model=model, n=n, step=step)
+ topic_embs = topic_chunk_embs = None
+ if mode == "csr":
+ topic_embs, topic_chunk_embs = prepare_embeddings(
+ topic_to_text, model=model, n=n, step=step
+ )Also applies to: 173-194
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@experiments/prerequisite_relations_experiment.ipynb` around lines 155 - 163,
В функции build_ranked_pairs валидируй аргумент mode (ожидается, например, "csr"
или "cer") и готовь эмбеддинги только когда mode == "csr": вместо всегда
вызывать prepare_embeddings(topic_to_text, ...) сначала проверить mode, бросить
понятную ошибку (ValueError/TypeError) при неизвестном значении и только в ветке
"csr" вызывать prepare_embeddings; для других поддерживаемых режимов реализовать
соответствующую логику без ненужного вызова prepare_embeddings; проверь и
аналогично исправь поведение в связанных местах (см. участки вокруг
build_ranked_pairs — строки 173-194 в diff).
| "csv_file = r\".\\EKG-Dataset-main\\0-100.csv\"\n", | ||
| "descriptions_dir = r\".\\EKG-Dataset-main\\concept_descriptions\"\n", | ||
| "\n", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cd experiments && python << 'EOF'
import json
import re
# Load the notebook
with open('prerequisite_relations_experiment.ipynb', 'r', encoding='utf-8') as f:
notebook = json.load(f)
# Find cells with code containing backslash paths
cells = notebook.get('cells', [])
line_count = 0
target_lines = {503: None, 505: None, 697: None, 699: None, 891: None, 893: None}
for cell_idx, cell in enumerate(cells):
if cell['cell_type'] == 'code':
source = cell.get('source', [])
cell_start = line_count + 1
for line in source:
line_count += 1
cell_end = line_count
# Check if any target lines fall in this cell
cell_source = ''.join(source)
# Print cells that might contain our target ranges
if any(target_start <= cell_end and target_end >= cell_start
for target_start, target_end in [(503, 505), (697, 699), (891, 893)]):
print(f"\n=== Cell {cell_idx} (lines {cell_start}-{cell_end}) ===")
for i, line in enumerate(source, start=cell_start):
if i in [503, 504, 505, 697, 698, 699, 891, 892, 893]:
print(f"Line {i}: {line.rstrip()}")
# Also search for backslash paths in the entire notebook
print("\n=== All backslash path patterns found ===")
for cell_idx, cell in enumerate(cells):
if cell['cell_type'] == 'code':
source = ''.join(cell.get('source', []))
# Search for patterns like r"...\...\..." or r'...\...\...'
backslash_paths = re.findall(r'r["\']\.\\[^"\']*["\']', source)
if backslash_paths:
print(f"Cell {cell_idx}: {backslash_paths}")
EOFRepository: citec-spbu/schedule-optimization
Length of output: 404
Жёстко прошитые Windows-специфичные пути ломают ноутбук на Linux/macOS и зависят от текущей рабочей директории.
В ячейках 6, 7 и 8 используются пути с обратными слешами (r".\\EKG-Dataset-main\\0-100.csv" и т. д.), которые не работают на Unix-подобных системах. Кроме того, в Jupyter текущая директория может не совпадать с расположением ноутбука, поэтому даже при наличии датасета эти ячейки легко не стартуют на чистом checkout.
Используйте pathlib.Path для кросс-платформной совместимости:
Пример правки
+from pathlib import Path
+
+DATASET_DIR = Path("EKG-Dataset-main")
-csv_file = r".\EKG-Dataset-main\0-100.csv"
-descriptions_dir = r".\EKG-Dataset-main\concept_descriptions"
+csv_file = DATASET_DIR / "0-100.csv"
+descriptions_dir = DATASET_DIR / "concept_descriptions"Применить ту же схему ко всем трём ячейкам с CSV-файлами.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "csv_file = r\".\\EKG-Dataset-main\\0-100.csv\"\n", | |
| "descriptions_dir = r\".\\EKG-Dataset-main\\concept_descriptions\"\n", | |
| "\n", | |
| from pathlib import Path | |
| DATASET_DIR = Path("EKG-Dataset-main") | |
| csv_file = DATASET_DIR / "0-100.csv" | |
| descriptions_dir = DATASET_DIR / "concept_descriptions" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@experiments/prerequisite_relations_experiment.ipynb` around lines 503 - 505,
Replace hardcoded Windows paths with cross-platform Path objects: import
pathlib.Path, compute a notebook-root base (e.g. base = Path(__file__).parent if
'__file__' in globals() else Path.cwd()) and set csv_file = base /
"EKG-Dataset-main" / "0-100.csv" and descriptions_dir = base /
"EKG-Dataset-main" / "concept_descriptions" (use str(...) where APIs expect
strings); apply the same change to the other two cells that set CSV file paths
so all uses of csv_file and descriptions_dir are platform-independent.
|
@T1moffey посмотри на ревью от ИИ, он оставил комментарии и рекомендации. Я ознакомился с ними и оставил свою реакцию. Если сочтёшь что-то подправить с учётом его замечаний, сделай это, пожалуйста, а если нет, то дай знать и я приму так (замечания имеют среднюю или низкую критичность) |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
experiments/experiment_description.md (1)
13-13: Упростите перегруженную конструкцию в конце абзаца.Фраза на Line 13 содержит длинную цепочку существительных в родительном падеже и читается тяжело. Рекомендую перефразировать на более короткие синтаксические блоки.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@experiments/experiment_description.md` at line 13, Разбейте перегруженное предложение из последнего предложения абзаца на 2–3 более коротких предложения и замените длинную цепочку существительных на связные фразы с глаголами: например, вместо «позволяют говорить о содержательно успешной реализации метода, а также свидетельствуют о работоспособности предложенного алгоритма, как инструмента определения вероятности существования отношения пререквизита, который может быть успешно применен в дальнейших этапах исследования» перепишите в два предложения, одно — о близости оценок к опубликованным значениям и содержательной успешности реализации, второе — о том, что предложенный алгоритм является работоспособным инструментом для определения вероятности существования отношения пререквизита и может быть применён на дальнейших этапах исследования; используйте явные глаголы и простую структуру для улучшения читабельности.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@experiments/experiment_description.md`:
- Line 1: Replace the placeholder "(...)" in
experiments/experiment_description.md (the first line of the file) with the full
bibliographic citation of the source method including authors, year, title,
journal or conference, and DOI or URL, and also state the dataset identifier and
version/date used for comparison; ensure the citation appears inline or as a
footnote and include the dataset version/date or retrieval date for
reproducibility.
- Around line 11-13: Замените чрезмерно категоричную фразу о «в большинстве
случаев очень близки к эталонным» (предложение, содержащее числа 0.746397 и max
13.171602) на более взвешенное утверждение: укажите, что большинство оценок
близки к эталонным, но наблюдаются отдельные выбросы (например, max абсолютного
отклонения 13.171602) и при необходимости предложите добавить контекст
(распределение ошибок или перцентили) для уточнения картины; переформулируйте
соответствующие предложения в блоке, содержащем результаты трёх выборок, чтобы
прямо отметить наличие выбросов и смягчить общую формулировку.
- Around line 5-7: Clarify the CSR metric definition and operand order:
explicitly state whether you use cosine similarity or cosine distance (and if
distance, whether lower/higher means stronger link), specify normalization
(e.g., L2 normalize embeddings), and fix the formula for CSR(A→B) — for example,
write CSR(A→B) = sum_i cos_sim(emb(title_B), emb(block_i_of_A)) (or the chosen
order) so it matches the textual description that "description A" is compared to
"title B"; also state that embeddings are computed with all-MiniLM-L6-v2, blocks
are 10 words, and how CER and the symmetric ranking (max of two directed values)
are derived from CSR(A→B) and CSR(B→A).
---
Nitpick comments:
In `@experiments/experiment_description.md`:
- Line 13: Разбейте перегруженное предложение из последнего предложения абзаца
на 2–3 более коротких предложения и замените длинную цепочку существительных на
связные фразы с глаголами: например, вместо «позволяют говорить о содержательно
успешной реализации метода, а также свидетельствуют о работоспособности
предложенного алгоритма, как инструмента определения вероятности существования
отношения пререквизита, который может быть успешно применен в дальнейших этапах
исследования» перепишите в два предложения, одно — о близости оценок к
опубликованным значениям и содержательной успешности реализации, второе — о том,
что предложенный алгоритм является работоспособным инструментом для определения
вероятности существования отношения пререквизита и может быть применён на
дальнейших этапах исследования; используйте явные глаголы и простую структуру
для улучшения читабельности.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 54fd4fb4-42d0-4760-a5ff-c21e5dd9fbc9
📒 Files selected for processing (1)
experiments/experiment_description.md
| @@ -0,0 +1,13 @@ | |||
| Проведенный эксперимент воспроизводит алгоритм оценивания вероятности существования отношения пререквизита между заранее определенными понятиями, относящимися к разным областям знаний. Алгоритм был построен на основании общего описания, предложенного в статье (...), оттуда же был позаимствован датасет для сравнения результатов. Цель эксперимента состояла в том, чтобы реализовать вычислительную часть метода в неизменной логике, использовать ту же модель семантического кодирования и оценить, насколько получаемые значения метрики совпадают с эталонными значениями, приведёнными в исходном датасете. | |||
There was a problem hiding this comment.
Добавьте точную ссылку на первоисточник метода.
На Line 1 стоит заглушка (...) вместо библиографической ссылки. Для воспроизводимости нужно указать статью (авторы, год, DOI/URL) и при возможности версию/дату датасета.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@experiments/experiment_description.md` at line 1, Replace the placeholder
"(...)" in experiments/experiment_description.md (the first line of the file)
with the full bibliographic citation of the source method including authors,
year, title, journal or conference, and DOI or URL, and also state the dataset
identifier and version/date used for comparison; ensure the citation appears
inline or as a footnote and include the dataset version/date or retrieval date
for reproducibility.
| Ключевая часть эксперимента была связана именно с воспроизведением метрики CSR. Для этого текстовое описание каждого понятия разбивалось на последовательные блоки по десять слов. Далее название понятия кодировалось в векторное представление с помощью модели all-MiniLM-L6-v2. Тем же способом кодировались и все блоки описания другого понятия. После получения эмбеддингов выполнялась их нормализация, а затем вычислялась сумма косинусных расстояний между вектором названия понятия и всеми векторами блоков рассматриваемого описания. Полученное значение интерпретировалось как накопленная семантическая ссылка одного понятия на другое, то есть как значение CSR в заданном направлении. | ||
|
|
||
| Таким образом, для пары понятий A и B вычислялась направленная величина CSR(A→B), показывающая, насколько содержание текстового описания понятия A семантически соотносится с названием понятия B. В общей реализации метода для каждой пары понятий вычислялись обе направленные оценки, формировалась сводная величина ранжирования как максимум из двух направленных значений, а также учитывалась более простая метрика CER, отвечающая за прямые вхождения названия одной темы в описание другой. Помимо этого, значимая часть исходного алгоритма посвящена составлению минимального графа данных понятий, отражающего выявленные связи, однако эта часть подразумевает работу живого эксперта для однозначного определения существования отношения пререквизита между парой понятий, поэтому в данном эксперименте она не воспроизводилась. Внимание было сосредоточено именно на полностью автоматизированной части алгоритма, то есть на воспроизведении и верификации численных значений метрики CSR на эталонном наборе данных. |
There was a problem hiding this comment.
Уточните метрику и направление CSR — сейчас есть неоднозначность.
На Line 5 используется термин «косинусных расстояний», а на Line 7 направление CSR(A→B) описано как связь описания A с названием B. Это может быть понято двояко и привести к невоспроизводимым расчетам. Лучше зафиксировать формулу и порядок операндов явно.
Предлагаемая правка формулировки
-Ключевая часть эксперимента была связана именно с воспроизведением метрики CSR. ...
-... вычислялась сумма косинусных расстояний ...
+Ключевая часть эксперимента была связана с воспроизведением метрики CSR.
+Для пары понятий A и B вычислялось направленное значение CSR(A→B) как сумма косинусных сходств
+между эмбеддингом названия понятия A и эмбеддингами 10-словных блоков описания понятия B
+(после L2-нормализации векторов).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@experiments/experiment_description.md` around lines 5 - 7, Clarify the CSR
metric definition and operand order: explicitly state whether you use cosine
similarity or cosine distance (and if distance, whether lower/higher means
stronger link), specify normalization (e.g., L2 normalize embeddings), and fix
the formula for CSR(A→B) — for example, write CSR(A→B) = sum_i
cos_sim(emb(title_B), emb(block_i_of_A)) (or the chosen order) so it matches the
textual description that "description A" is compared to "title B"; also state
that embeddings are computed with all-MiniLM-L6-v2, blocks are 10 words, and how
CER and the symmetric ranking (max of two directed values) are derived from
CSR(A→B) and CSR(B→A).
| Проверка была проведена на нескольких независимых фрагментах датасета по 100 пар понятий в каждом. Для первой выборки среднее абсолютное отклонение составило 0.746397, а максимальное — 13.171602. Для второй выборки среднее абсолютное отклонение составило 0.427687, максимальное — 2.327201. Для третьей выборки среднее абсолютное отклонение составило 0.491056, максимальное — 2.737585. В большинстве случаев вычисленные значения оказались очень близки к эталонным, что указывает на корректное воспроизведение общей логики расчёта, несмотря на единичные расхождения. | ||
|
|
||
| Полученные результаты позволяют сделать вывод о том, что реализованная процедура вычисления CSR в целом адекватно воспроизводит исходный метод. Небольшие средние значения абсолютной ошибки на проверенных подвыборках свидетельствуют о близости получаемых оценок к опубликованным значениям, и позволяют говорить о содержательно успешной реализации метода, а также свидетельствуют о работоспособности предложенного алгоритма, как инструмента определения вероятности существования отношения пререквизита, который может быть успешно применен в дальнейших этапах исследования. No newline at end of file |
There was a problem hiding this comment.
Смягчите вывод о «очень близких» результатах.
На Line 11 указан max абсолютного отклонения 13.171602, поэтому формулировка «в большинстве случаев очень близки» на Line 11-13 выглядит слишком сильной без дополнительного контекста (например, распределение/перцентили). Лучше явно отметить наличие выбросов.
🧰 Tools
🪛 LanguageTool
[uncategorized] ~13-~13: Более 4 существительных в родительном падеже подряд. Перефразируйте предложение.
Context: ...пособности предложенного алгоритма, как инструмента определения вероятности существования отношения пререквизита, который может быть успешн...
(noun_genitive_3)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@experiments/experiment_description.md` around lines 11 - 13, Замените
чрезмерно категоричную фразу о «в большинстве случаев очень близки к эталонным»
(предложение, содержащее числа 0.746397 и max 13.171602) на более взвешенное
утверждение: укажите, что большинство оценок близки к эталонным, но наблюдаются
отдельные выбросы (например, max абсолютного отклонения 13.171602) и при
необходимости предложите добавить контекст (распределение ошибок или перцентили)
для уточнения картины; переформулируйте соответствующие предложения в блоке,
содержащем результаты трёх выборок, чтобы прямо отметить наличие выбросов и
смягчить общую формулировку.
There was a problem hiding this comment.
Согласен с наблюдением ИИ.
И вообще, нужны какие-то сопроводительные комментарии, а возможно и нужно попытаться разобраться в причинах (заглянуть под капот, сделать свои предположения или утверждения, запросить обратную связь у авторов)
There was a problem hiding this comment.
@sevryukov, полностью поддерживаю ваше дополнение. Помимо смягчения формулировки, было бы ценно, если бы @T1moffey добавил в описание (или в сам ноутбук) следующее:
-
Идентификация выбросов. Выяснить, какие именно пары понятий дали максимальное отклонение 13.171602 в первой выборке — и почему оно столь резко контрастирует с результатами второй и третьей (max ≈ 2.3–2.7). Это единичный артефакт или систематическая проблема?
-
Гипотезы о причинах отклонений. Возможные причины стоит рассмотреть явно, например:
- Несоответствие в нормализации имён понятий (функция
norm_name): пара могла быть сопоставлена с неверным описанием. - Аномально короткое или длинное описание, из-за которого
make_ngramsгенерирует нетипичное число блоков. - Возможная неоднозначность в структуре исходного датасета (например,
csr_scoreв датасете мог быть вычислен при иных гиперпараметрахnилиstep).
- Несоответствие в нормализации имён понятий (функция
-
Сравнение гиперпараметров. Проверить, не отличаются ли параметры
n=10, step=10от тех, что использовались авторами статьи при формировании эталонногоcsr_score. Если в статье это явно не указано — это само по себе важное наблюдение, достойное упоминания. -
Обратная связь с авторами. Если репродуцируемая статья доступна и авторы открыты для контакта, запрос об уточнении деталей реализации (особенно нормализации и параметров чанкования) — хорошая научная практика.
Таким образом, предлагаю @T1moffey пересмотреть финальный абзац и абзац с числовыми результатами: явно указать на наличие выброса, добавить собственный анализ его возможных причин и по возможности проверить хотя бы одну из гипотез прямо в ноутбуке.
|
@T1moffey оставил свои комментарии по сопроводительной записке. Как поступим? |
|
|
||
| Исходные данные представляли собой набор пар понятий и отдельный корпус текстовых описаний этих понятий. Для каждой пары в датасете было доступно эталонное значение метрики «csr_score», отражающей вероятность существования отношения пререквизита в этой паре по направлению от первого понятия ко второму. На первом этапе выполнялась унификация наименований понятий для корректного сопоставления записей из таблицы с файлами текстовых описаний. После этого для каждого понятия загружалось соответствующее текстовое описание, которое далее использовалось как основа для вычисления значения соответствующей метрики. | ||
|
|
||
| Ключевая часть эксперимента была связана именно с воспроизведением метрики CSR. Для этого текстовое описание каждого понятия разбивалось на последовательные блоки по десять слов. Далее название понятия кодировалось в векторное представление с помощью модели all-MiniLM-L6-v2. Тем же способом кодировались и все блоки описания другого понятия. После получения эмбеддингов выполнялась их нормализация, а затем вычислялась сумма косинусных расстояний между вектором названия понятия и всеми векторами блоков рассматриваемого описания. Полученное значение интерпретировалось как накопленная семантическая ссылка одного понятия на другое, то есть как значение CSR в заданном направлении. |
There was a problem hiding this comment.
Следует развернуть абревиатуру CSR и перевести на русский (можно в скобках после первого упоминания)
|
|
||
| Из исходного набора данных выбиралась группа пар понятий, после чего для каждой такой пары заново вычислялось значение метрики CSR по описанной выше процедуре. Затем это значение сравнивалось с эталонным «csr_score», доступным в датасете, и вычислялось абсолютное отклонение. По совокупности пар для каждой проверяемой выборки рассчитывались среднее абсолютное отклонение и максимальное абсолютное отклонение. Такая постановка эксперимента позволяет оценить как общий уровень близости результатов, так и наличие единичных случаев с заметным расхождением. | ||
|
|
||
| Проверка была проведена на нескольких независимых фрагментах датасета по 100 пар понятий в каждом. Для первой выборки среднее абсолютное отклонение составило 0.746397, а максимальное — 13.171602. Для второй выборки среднее абсолютное отклонение составило 0.427687, максимальное — 2.327201. Для третьей выборки среднее абсолютное отклонение составило 0.491056, максимальное — 2.737585. В большинстве случаев вычисленные значения оказались очень близки к эталонным, что указывает на корректное воспроизведение общей логики расчёта, несмотря на единичные расхождения. |
There was a problem hiding this comment.
Почему берутся именно такие выборки (по 100 пар), почему не больше, почему не меньше, почему три?
Что означают эти числа, что есть много, что есть мало, как интерпретировать значения?
Лучше оформить значения для выборок в виде таблицы (можно не сейчас, а в финальной версии текста).
Раз мы сравниваем с эталоном, то надо указать эталонные значения (чтобы читатель мог сам прийти и согласиться с твоим выводом о близости).
| Проверка была проведена на нескольких независимых фрагментах датасета по 100 пар понятий в каждом. Для первой выборки среднее абсолютное отклонение составило 0.746397, а максимальное — 13.171602. Для второй выборки среднее абсолютное отклонение составило 0.427687, максимальное — 2.327201. Для третьей выборки среднее абсолютное отклонение составило 0.491056, максимальное — 2.737585. В большинстве случаев вычисленные значения оказались очень близки к эталонным, что указывает на корректное воспроизведение общей логики расчёта, несмотря на единичные расхождения. | ||
|
|
||
| Полученные результаты позволяют сделать вывод о том, что реализованная процедура вычисления CSR в целом адекватно воспроизводит исходный метод. Небольшие средние значения абсолютной ошибки на проверенных подвыборках свидетельствуют о близости получаемых оценок к опубликованным значениям, и позволяют говорить о содержательно успешной реализации метода, а также свидетельствуют о работоспособности предложенного алгоритма, как инструмента определения вероятности существования отношения пререквизита, который может быть успешно применен в дальнейших этапах исследования. No newline at end of file |
There was a problem hiding this comment.
Согласен с наблюдением ИИ.
И вообще, нужны какие-то сопроводительные комментарии, а возможно и нужно попытаться разобраться в причинах (заглянуть под капот, сделать свои предположения или утверждения, запросить обратную связь у авторов)
|
Делаем MPR и идём на следующую итерацию |
Adds prerequisite relations experiment notebook to experiments.
Refs #1
Summary by CodeRabbit
Примечания к выпуску