نویسنده(ها): Arthur Lagacherie در اصل در Towards AI منتشر شده است. برای پاسخ به این سوال می توانیم از Outlines استفاده کنیم. اخیراً یک بسته پایتون به نام Outlines را کشف کردم که روشی همه کاره برای استفاده از مدلهای زبان بزرگ (LLM) برای کارهایی مانند: طبقهبندی با نام Entity Extraction تولید دادههای مصنوعی خلاصه کردن یک سند … و… بازی شطرنج (همچنین ۵ کاربرد دیگر وجود دارد) را کشف کردم. . GitHub – dottxt-ai/outlines: Structured Text Generation تولید متن ساخت یافته. با ایجاد یک حساب کاربری در GitHub به توسعه dottxt-ai/outlines کمک کنید. github.com در این مقاله، پیکربندیهای مختلف بازیهای شطرنج را بررسی میکنم، از جمله مسابقات انسان در مقابل LLM (مدل زبان بزرگ)، که در آن انسان با یک مدل هوش مصنوعی رقابت میکند، و همچنین تنظیمات LLM-در مقابل-LLM، که در آن دو مدل های هوش مصنوعی با یکدیگر بازی می کنند. چگونه کار می کند برای انجام آسان این کار، Outlines از تکنیک نمونه گیری متفاوت از روش معمول استفاده می کند. ابتدا، نمونه گیری در LLM چیست؟ هنگام تولید توکن بعدی، یک LLM احتمالی را برای هر توکن در واژگان خود برمیگرداند که از 0٪ تا 100٪ متغیر است. راه های مختلفی برای انتخاب از این نشانه های پیش بینی شده وجود دارد و این فرآیند انتخاب به عنوان نمونه گیری شناخته می شود. رئوس مطالب، به جای اعمال نمونه بر روی همه نشانه ها، فقط نشانه های مربوط به قالب متنی را که می خواهید ایجاد کنید انتخاب کنید و سپس نمونه برداری را در این زیر مجموعه اعمال کنید. برای انتخاب نشانههای مربوط به طرحهای قالب متن، از یک regex بهروزرسانی شده در هر حرکت استفاده کنید تا فقط با حرکات قانونی مطابقت داشته باشد. نسل هدایتشده کارآمد برای مدلهای زبانی بزرگ در این مقاله نشان میدهیم که چگونه مشکل تولید متن عصبی را میتوان به طور سازنده از نظر… arxiv.org LLM در مقابل LLM اولین کاری که میخواهم انجام دهم LLM در مقابل LLM است… اما فقط یک LLM برای شروع برای این کار به تعدادی کتابخانه پایتون نیاز داریم. !pip install outlines -q!pip install chess -q!pip install transformers accelerate einops -qimport chess, chess.svg, refrom outlines import import generate, modelsfrom IPython.display import Image, display, clear_output Chess: کتابخانه ای برای مدیریت تخته. IPython، chess.svg: کتابخانه هایی برای نمایش تخته. پس از آن، اولین چیزی که به آن نیاز داریم، تابعی برای ایجاد regex است که فرمت متن را Outlines تعیین می کند. def legal_moves_regex(board): “””یک regex بسازید که فقط با حرکات معتبر مطابقت داشته باشد.””” legal_moves = list(board.legal_moves) legal_modes_str = [board.san(move) for move in legal_moves] legal_modes_str = [re.sub(r"[+#]”، “”، move) for move in legal_modes_str]regex_pattern = “|”.join(re.escape(move) for move in legal_modes_str) regex_pattern = f”{regex_pattern}” return regex_pattern این تابع متنی مانند این را برمی گرداند. ‘Nh3|Nf3|Nc3|Na3|h3|g3|f3|e3|d3|c3|b3|a3|h4|g4|f4|e4|d4|c4|b4|a4’ این همه حرکت قانونی هیئت مدیره است اکنون کتابخانه ها و مولد regex را داریم که با اجرای خط کد زیر می توانیم مدل را دانلود کنیم models.transformers(“google/gemma-2-2b-it”, device=”auto”) و آخرین سلول کد برای اجرای حلقه اصلی = chess.Board(“rnbqkbnr/pppppppp/8/8/8. /8/PPPPPPPP/RNBQKBNR w KQkq – 0 1”)prompt = “بیا شطرنج بازی کنیم. Moves: “board_state = ” “turn_number = 0در حالی که board.is_game_over(): regex_pattern = legal_moves_regex(board) structured =gene.regex(model, regex_pattern)(prompt + board_state) move = board.parse_san(number %2) if turn_ == 0 : # نوبت سفید است board_state += board.san(move) + ” ” other: board_state += board.san(move) + ” ” + str(turn_number) + “turn_number += 1 board.push(move) clear_output(wait=True.” ) display(chess.svg.board(board, size=250, lastmove=move)) ابتدا صفحه شطرنج را تعریف می کنیم. دستور، وضعیت تخته و شماره نوبت را ایجاد می کنیم. ویدیوی نویسنده Gemma 2b در مقابل Smollm2 1.7b حالا وقت آن است که همین کار را انجام دهیم، اما بیایید آن را وارد کنیم models.transformers(“Arthur-LAGACHERIE/Gemma-2-2b-4bit”, device=”cuda”)model2 = models.transformers(“HuggingFaceTB/SmolLM2-1.7B-Instruct”, device=”cuda”) توجه: اینجا من قبل از نصب bitsandbytes ‘pip install -q bitsandbytes’ از نسخه کوانتیزه شده Gemma 2b استفاده می کنم. و همچنین باید عملکرد بازی را کمی تغییر دهیم. board = chess.Board(“rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq – 0 1”)prompt = “بیایید شطرنج بازی کنیم. حرکت: “board_state = ” “turn_number = 0while_game_overboard. (): اگر turn_number % 2 == 0 : # نوبت سفید است regex_pattern = legal_moves_regex(board) structured =gene.regex(model1, regex_pattern)(prompt + board_state) move = board.parse_san(structured) board_state += board.san(move) + ” ” = other: regex_pattern legal_moves_regex(board) structured = gene.regex(model2, regex_pattern)(prompt + board_state) move = board.parse_san(structured) board_state += board.san(move) + ” ” + str(turn_number) + “.” turn_number += 1 board.push(move) clear_output(wait=True) display(chess.svg.board(board, size=250, lastmove=move)) print(“0” if turn_number % 2 != 0 other “1 “) (آخرین خط را هم برای چاپ برنده اضافه می کنم) اجازه دهید آن را اجرا کنیم. gemma vs. smollm2 (گیف توسط نویسنده) پس از یک جنگ طولانی و دشوار (و همچنین ده ها و ده ها حرکت احمقانه) بین Gemma 2b و Smollm2 1.7b برنده این است: Smollm2 🥳 اما اگر عمیق تر به بازی نگاه کنید، خواهید دید. برخی از حرکت های احمقانه را ببینید. این دو LLM مانند یک انسان 3 ساله بازی می کنند. LLM vs. Human حالا که دیدیم LLM ها در مقابل هم قرار می گیرند، بیایید ببینیم که یک مدل زبان در برابر یک بازیکن انسانی (من) چگونه عمل می کند. اول مدل رو دانلود میکنیم، Smollm2 1.7b رو میگیرم چون مقابل جما 2b برنده میشه. model = models.transformers (“HuggingFaceTB/SmolLM2-1.7B-Instruct”، device=”auto”) سپس، ما نیاز داریم که اصلی را کمی به روز کنیم. board = chess.Board(“rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq – 0 1”)display(chess.svg.board(board, size=250))prompt = “بیایید شطرنج بازی کنیم حرکت می کند: ” “board_state = ” “turn_number = 0 در حالی که نه board.is_game_over(): if turn_number % 2 == 0 : # It’s turn’s turn inp = input(“حرکت شما:”) move = board.parse_san(inp) board_state += board.san(move) + ” ” else: regex_pattern = legal_moves_regex(board) structured = generate.regex(model, regex_pattern)(prompt + board_state) move = board.parse_san(structured) board_state += board.san(move) + ” ” + str(turn_number) + “.” turn_number += 1 board.push(move) clear_output(wait=True) display(chess.svg.board(board, size=250, lastmove=move))print(“0” if turn_number % 2 != 0 other “1 “) و آن را اجرا کنید. من در مقابل Smollm2، ویدیوی نویسنده که در 3 دقیقه برنده شدم. مهارت های شطرنج این مدل بسیار محدود است. نتیجه گیری این مدل ها در شطرنج بسیار هوشمند نیستند، احتمالاً به دلیل کاهش تعداد پارامترهایشان. با راهنمایی این مقاله، اکنون می توانید با LLM ها در یک محیط شطرنج آزمایش کنید – اگرچه ممکن است گیم پلی در سطح استاد بزرگ را نبینید. امیدوارم از این مقاله لذت ببرید و اگر اینطور است می توانید آن را کف بزنید. (شما همچنین می توانید من را دنبال کنید =). به هزاران رهبر داده بپیوندید […]
منبع: https://towardsai.net/p/artificial-intelligence/can-a-llm-beat-you-at-chess
