سامانهٔ پژوهش حقوقی
بخش دشوار یک دستیار حقوقی، پیکرهٔ زیر آن است. آن بخش ساخته و اندازهگیری شده — و دربارهٔ آنچه هنوز نیست صریح است.
برای چه کسی: دفاتر وکالت، ناشران حقوقی، واحدهای حقوقی سازمانها، و هر تیمی که باید روی متن مقرراتی بازیابی بسازد؛ جایی که یک استناد غلط، خطای گرد کردن نیست.
هر عدد اندازهگیری شده و روش اندازهگیریاش ثبت است. عددی که اندازه نگرفته باشیم اینجا نمیآید.
همه دستیار میخواهند. کارِ اصلی، پیکره است.
دستیار پژوهش حقوقی، در واقع یک مسئلهٔ بازیابی است که لباس گفتوگو پوشیده. لباس را میشود در یک هفته دوخت. پیکرهٔ زیر آن — کامل، بهروز، درست از نظر ساختار، و صریح دربارهٔ اینکه کدام جملهاش قانون است و کدام نظرِ کسی دربارهٔ قانون — زمان بسیار بیشتری میبرد، و تنها بخشی است که کیفیت پاسخها را تعیین میکند.
پس همان بخش را اول ساختیم، و این صفحه همان مرحله را شرح میدهد.
وضعیت امروز
پیکره ساخته، پاکسازی و برای جستوجوی واژگانی نمایه شده است. مخزن بازیابی ۱۵۱٬۲۱۶ واحد دارد و هیچکدام هنوز بردار ندارند. جستوجوی معنایی، صفحهٔ گفتوگو و توضیح مستند، طراحی و مستند شدهاند و عمداً متوقف ماندهاند تا مجموعهٔ ارزیابی ساخته شود. این صفحه دربارهٔ چیزی است که ساخته شده.
داخلش چیست
| تعداد | |
|---|---|
| قانون، شامل قانون اساسی | ۱٬۰۲۰ |
| ماده، شامل ۱۷۷ اصل قانون اساسی | ۳۲٬۱۰۳ |
| تبصره، بهعنوان رکورد مستقل | ۱۴٬۴۷۱ |
| رأی قضایی | ۳۵٬۱۸۵ |
| نظریهٔ مشورتی | ۱۳٬۴۶۲ |
| نشست قضایی | ۶٬۴۰۶ |
| اثر پژوهشی | ۲۱٬۸۷۰ |
| بند شرح و تفسیر | ۸۲٬۵۴۰ |
| موضوع و پیوند موضوعی | ۲۳٬۵۶۷ · ۳۶۱٬۱۶۷ |
| واحد بازیابی | ۱۵۱٬۲۱۶ |
متن قانون هرگز با شرح در یک ستون نمینشیند. تبصره رکورد مستقل خودش را دارد، چون وکیل «تبصرهٔ ۲ مادهٔ ۱۰» را جداگانه استناد میکند و ممکن است تبصره اصلاح شود در حالی که مادهٔ مادر دستنخورده بماند. شرح، تا وقتی چیزی آن را قابل نقل قول علامت نزده باشد، قابل نقل قول نیست.
اینها در ظاهر تصمیمهای اسکیما هستند. در عمل، همان چیزی هستند که فرق میگذارد بین سامانهای که به ماده استناد میکند و سامانهای که نظر یک کتاب دربارهٔ آن ماده را با همان قلم و همان اعتماد نقل میکند.
گرفتنِ متن، بخش ارزان ماجرا بود
برداشت، ۱۸۳٬۷۲۵ صفحه را در حدود هشتاد دقیقه روی هشت ماشین یکبارمصرف انجام داد؛ ماشینهایی که در پایان کار، در استثنا و در وقفه، خودشان را حذف میکردند. صفر مسدودسازی. یک تا دو دلار. نرخ درخواست هر کارگر محدود بود و دستورش این بود که در صورت مسدود شدن، گزارش بدهد و متوقف شود، نه اینکه راهی دور بزند.
هیچ بخشی از این کار هوشمندانه نیست. مؤدبانه است، ارزان است، و منطقهٔ فرودِ خامی که ساخت پایدار نگه داشته میشود — هر اصلاحی از آن پس، یک تجزیهٔ دوباره بوده، نه یک خزش دوباره.
«از کجا میدانید این پیکره سالم است؟»
چون هفت بار رفتیم دنبال اینکه کجا خراب است، و آنچه پیدا کردیم را نوشتیم.
هفت دور کشفِ آنچه غلط بود
پنجاهوشش یافته، هجده تای آن بحرانی، هر کدام با شمارش روی پایگاهدادهٔ زنده راستیآزمایی شده، نه صرفاً ادعا. آنهایی که ارزش نام بردن دارند:
- ۱۰۳٬۴۲۳ سطر محتوا برای نمایهٔ جستوجو نامرئی بودند. تبصرهها، شرحها و نشستهای قضایی اصلاً نمایه نشده بودند. پس از بازسازی، مخزن بازیابی از ۱۰۶٬۴۷۹ واحد به ۱۵۱٬۰۳۹ رسید.
- قانون اساسی بهکلی غایب بود. تجزیهگر «مادهٔ N» را میشناخت و «اصل N» را نه، پس ۱٬۴۶۱ صفحه بیصدا حذف شده بودند. هر ۱۷۷ اصل از منطقهٔ فرود خام بازیابی شد، بدون جای خالی.
- رتبهٔ اعتبار کاملاً تخت بود. همهٔ آرا روی یک ردهٔ یکسان نشسته بودند و هیچکدام «لازمالاتباع» علامت نخورده بود؛ یعنی یک رأی وحدت رویه دقیقاً همرتبهٔ یک رأی بدوی بود. دادگاهی که اتفاقاً همان کلمات پروندهٔ شما را به کار برده، هرگز نباید بالاتر از رأیی بنشیند که مسئله را فیصله داده — و شباهت برداری هیچ راهی برای دانستن این ندارد.
- گراف استناد حدود هفتاد درصد نویز بود. ۲۴٬۵۱۷ از ۳۴٬۷۷۳ یال، جفتهای متوالی درون یک قانون بودند؛ اثر جانبی پیوندهای «مشاهدهٔ مادهٔ قبلی/بعدی» در صفحات منبع. علامت خوردند، نه حذف — پس بازیابی نادیدهشان میگیرد و تشخیص هم برگشتپذیر میماند.
مفیدترین دور، دوری بود که یک برنامه را لغو کرد
دور چهارم قرار بود قوانین تکهتکه و تکراری را ادغام کند. نکرد، چون خودِ تشخیصِ تکهتکهشدگی غلط بود: بیشترِ آنچه تکراری بهنظر میرسید نسخههای مشروع یک قانون بودند، و دو رکوردی که هر ۱۲۴ شمارهٔ ماده را مشترک داشتند، تنها در هشت ماده متن یکسان داشتند. ادغام، تاریخ واقعی قانون را نابود میکرد تا یک جدول مرتبتر بهنظر برسد.
همان دور، یک فیلتر حذف را هم رد کرد؛ فیلتری که سطرهای برچسبخوردهٔ «رأی تکراری» را هدف گرفته بود و هفده مورد از بیستودو مورد آن، آرای واقعی و قطعی بودند.
دور پاکسازیای که چیزی حذف نمیکند، دور شکستخورده نیست. بازبینی دقیقاً برای همین است.
بازیابیای که طراحی شده و روشن نشده
طراحی مشخص است و نوشته شده: یک بازوی معنایی روی بردارهای ۱۰۲۴ بُعدی و یک بازوی واژگانی روی نمایهٔ متن نرمالشده، که با تجمیع رتبهٔ متقابل در k=۶۰ ادغام میشوند، با برداشت اضافی ۱۵۰ نامزد در هر بازو، و شکستن تساوی بر اساس ردهٔ اعتبار — تا رتبهبندی هرگز با سلسلهمراتب منابع در تضاد نباشد. فیلترهای لازمالاجرا بودن، شاخهٔ حقوقی و بازهٔ سال در دل تابع هستند و همه نسبت به مقدار تهی بردبارند، تا هیچ فیلتری نتواند مادهٔ حاکم را بیصدا پنهان کند.
ما ۱۵۱٬۲۱۶ واحد را بردار نمیکنیم تا این را ثابت کنیم. اول مجموعهٔ ارزیابی، بعد مقایسهٔ مدلها، بعد هزینه — به همین ترتیب؛ چون جایگزینش انتخاب مدل بر پایهٔ نمراتی است که در دامنهای دیگر گرفته شدهاند.
هر عمل رد میگذارد، وگرنه انجام نمیشود
سطر ثبت رویداد داخل همان تراکنشی نوشته میشود که خودِ عمل در آن است. نه بعدش، نه از طریق صف، نه داخل یک try/except که شانه بالا بیندازد. رکورد اگر و تنها اگر خودِ عمل ثبت شود ثبت میشود، و یک تریگر پایگاهداده هر تلاش برای ویرایش یا حذف سطر ثبت را با خطا متوقف میکند. هیچ تنظیمی برای خاموش کردنش وجود ندارد، در هیچ محیطی.
پوشش مسیرها یک آزمون است، نه یک قول: مجموعهٔ آزمون، جدول زندهٔ مسیرها را میپیماید و اگر نقطهٔ پایانیِ نویسندهای پیدا شود که نه به عمل ثبت مشخصی نگاشته شده و نه با دلیل مکتوب معاف شده، شکست میخورد.
آنچه نیست
- دستیار هوش مصنوعی حقوقیِ در حالِ کار نیست. هنوز نه، و اینطور توصیفش نمیکنیم.
- جایگزین قضاوت حقوقی وکیل نیست — در هیچ مرحلهای از این نقشهٔ راه.
- پیکرهای نیست که برای بازتوزیع عرضه کنیم.
- سامانهای با اعداد کارایی نیست. آن اعداد با مجموعهٔ ارزیابی میآیند و همراه با روش سنجش منتشر میشوند.
تصمیمهای فنی
و آنچه انتخاب نکردیم، همراه با دلیلش.
انتشار در وضعیت «پیکره کامل» بهجای تولید ۱۵۱٬۲۱۶ بردار برای رسیدن سریع به یک نمایش.
گزینههای دیگر: همین حالا بردارها را بسازیم و صفحهٔ گفتوگو را منتشر کنیم
بردارسازی کل پیکره هزینهای یکطرفه است که انتخاب مدل را قفل میکند، پیش از آنکه راهی برای سنجش درستیِ آن انتخاب وجود داشته باشد. مهمترین سنجهٔ تعبیهسازی فارسی هیچ مجموعهٔ دادهٔ حقوقی ندارد، پس نمرات منتشرشده رفتار این دامنه را پیشبینی نمیکنند. مجموعهٔ ارزیابی، تحویلشدنیِ پیش از تنظیم بازیابی است، نه پس از آن.
۲۴٬۵۱۷ یال از ۳۴٬۷۷۳ یال استنادی قرنطینه شد، نه حذف.
گزینههای دیگر: حذف یالهای نادرست، رها کردن گراف به همان شکل ورودی
حدود هفتاد درصد گراف استناد، اثر جانبی پیوندهای پیمایش «مادهٔ قبلی» و «مادهٔ بعدی» بود، نه استناد حقوقی. حذف، تشخیص را برگشتناپذیر میکرد. علامتگذاری، هم بازیابی را تمیز نگه میدارد و هم تصمیم را باز.
۲۸٬۶۸۴ یال آینهای متقابل هم حذف شد؛ اینها امتیاز گرههای پرارتباط را ۱٫۸۳ برابر باد کرده بودند.
ادغام برنامهریزیشدهٔ قوانین «تکهتکه» لغو شد، چون خودِ تشخیص غلط از آب درآمد.
گزینههای دیگر: ادغام رکوردهای تکراری قانون، مطابق برنامهٔ اولیه
آنچه تکهتکهشدگی بهنظر میرسید، عمدتاً نسخهبندی مشروع بود: دو رکورد که هر ۱۲۴ شمارهٔ ماده را مشترک داشتند، تنها در ۸ ماده متن یکسان داشتند. ادغام، تاریخ واقعی قانون را نابود میکرد تا یک عدد مرتبتر بهنظر برسد.
طراحی عاملِ ۶۴ گامی برای موتور تطبیق پرونده رد شد.
گزینههای دیگر: حلقهٔ عامل با ۶۴ تکرار، خط لولهٔ محدود ۸ گامی
بهترین قابلیت اطمینان مستقلاً اندازهگیریشده در هر گام حدود ۹۹٫۳٪ است که در ۶۴ گام به حدود ۶۴٪ سرتاسری میرسد، در برابر حدود ۸۹٪ در ۱۶ گام. بردن پیمایش گراف و اتصال جدولها به داخل حلقهٔ مدل، عملیاتی را که بنا به ساختار درستاند به تصمیمهایی تبدیل میکند که اغلبِ اوقات درستاند — شصتوچهار بار پشت سر هم.
جایگزین، خط لولهای محدود با ۸ گام و سه تا چهار فراخوانی متوالی مدل است؛ در آن، بازیابی، گسترش گراف و راستیآزمایی هیچ فراخوانی مدلی ندارند.
سطر ثبت رویداد در همان تراکنشِ خودِ عمل نوشته میشود.
گزینههای دیگر: قلاب پس از commit، صندوق خروجی پیام، ثبت با بهترین تلاش
هر جایگزین دقیقاً همان خرابیای را برمیگرداند که الزام، آن را ممنوع کرده است: عملی که رخ داده و رکوردی ندارد. سطر ثبت، اگر و تنها اگر خودِ عمل commit شود ثبت میشود، و یک تریگر پایگاهداده هر UPDATE و DELETE روی این جدول را با خطا متوقف میکند.
بازیابی ترکیبی بهصورت تابعی در پایگاهداده طراحی شد، نه حول یک پایگاهدادهٔ برداری جداگانه.
گزینههای دیگر: Qdrant یا Weaviate یا Milvus در کنار PostgreSQL
در این مقیاس، جدول بردارها و ایندکس آن روی یک ماشین متوسط در حافظه جا میشود. پایگاهدادهٔ برداری جداگانه یک مؤلفهٔ عملیاتی، یک مسئلهٔ همگامسازی و یک مدل سازگاری دوم اضافه میکند و در ازای آن چیزی نمیدهد.
محدودیتها
- بازیابی معنایی روشن نیست. مخزن بازیابی ۱۵۱٬۲۱۶ واحد دارد و صفر بردار. صفحهٔ گفتوگویی پیش روی کاربر نیست، فهرست نتیجهٔ رتبهبندیشدهای نیست، و جملهٔ مستندِ «چرا مرتبط است» تولید نمیشود. هر کس این را «دستیار هوش مصنوعی حقوقی در حال کار» توصیف کند — از جمله خودِ ما — دارد فاز بعدی را توصیف میکند، نه این فاز را.
- هیچ عدد تأخیر، دقت یا کیفیت رتبهبندی برای این سامانه وجود ندارد و ما هیچکدام را نقل نمیکنیم. مجموعهٔ ارزیابیِ نمرهگذاریشده یک تحویلشدنی زمانبندیشده است، نه یک نتیجه. فروشندهای که در این مرحله عدد دارد، یا سامانهٔ دیگری را سنجیده یا عدد را ساخته است.
- متن پیکره از منابع عمومی مرجع حقوقی گردآوری شده است. انتقال متن اصلی به منابع رسمی انتشار، برنامهریزی شده و پیششرط هر استقرار مشتری است؛ ترجیح میدهیم این را همینجا بگوییم، نه در جلسهٔ تأمین.
- حدود ۱۹٫۶٪ صفحات منبع، خلاصههای تولیدشده با مدل زبانیِ خودِ منبع را دارند. اینها ثبت، علامتگذاری، و بهصورت پیشفرض از مجموعهٔ قابلاستناد خارج شدهاند — که برای محصولی با وعدهٔ «هرگز قانون نساز» تصمیم درستی است و در عین حال دامنهٔ قابل نقل قول را کوچک میکند.
- تنها ۸٫۳٪ از یالهای ماده↔رأی به خودِ منطوق رأی متصلاند، نه به پیوند سطح صفحه. اینها ویژگیِ رتبهبندیاند و هرگز بهصورت خودکار در نتایج گنجانده نمیشوند.
- متن ماده در تاریخ مشخص، وقتی تاریخچهٔ نسخهها ناقص باشد، بهجای متن امروز، چیزی برنمیگرداند. این عمدی است و یعنی این قابلیت بیشتر از یک پیادهسازی بیدقتتر، ساکت میماند.
- هیچ استقرار آفلاین یا درونسازمانی از این سامانه تحویل نشده است. معماری آن بهجز مدل مولد از چنین استقراری پشتیبانی میکند؛ این یک ویژگی طراحی است، نه یک نمونهٔ اجراشده.